Hi Michaël, Thanks a lot for the improvements. However, I would like to ask you to help with one more fix. Now the script fires the requests automatically and it is dangerous if user has selected a layer with thousands of features. Could you show how to limit the maximum number of requests to 10? Generally it is good to be able to do several routings at a time because it gives a simple way for the user to use interim fixed route points by digitizing the route as connected lines but I think that 10 legs should be enough.
-Jukka Rahkonen- Michaël Michaud wrote: > > Hi Jukka, > > Good job, > > With a few more lines, you can get the path in your map (hereafter, kml > parsing is very crude, but it shows how powerful beanshell scripting can be). > > { > import com.vividsolutions.jts.geom.*; > import com.vividsolutions.jts.io.WKTReader; > import com.vividsolutions.jump.feature.*; > import com.vividsolutions.jump.geom.EnvelopeUtil; > import com.vividsolutions.jump.workbench.model.*; > import java.io.*; > import java.net.URL; > > fc = > wc.getLayerNamePanel().getSelectedLayers()[0].getFeatureCollectionWrap > per(); > paths = new ArrayList();; > for (Iterator i = fc.getFeatures().iterator(); i.hasNext();) { > Feature feature = (Feature) i.next(); > LineString lineString = (LineString)feature.getGeometry(); > URL url; > try { > // get URL content > url = new > URL("http://www.yournavigation.org/api/1.0/gosmore.php?format=kml&fla > t=" > +lineString.getStartPoint().getY()+"&flon=" > +lineString.getStartPoint().getX()+"&tlat=" > +lineString.getEndPoint().getY()+"&tlon=" > +lineString.getEndPoint().getX() > +"&v=motorcar" > +"&fast=1" > +"&layer=mapnik"); > print(url); > URLConnection conn = url.openConnection(); > > // open the stream and put it into BufferedReader > BufferedReader br = new BufferedReader( > new > InputStreamReader(conn.getInputStream())); > String inputLine; > StringBuffer sb = new StringBuffer(); > while ((inputLine = br.readLine()) != null) { > sb.append(inputLine).append("\n"); > } > wkt = sb.toString() > .replaceAll("(?s).*<coordinates>\\s*", "LINESTRING(") > .replaceAll("(?s)\\s*</coordinates>.*", ")") > .replaceAll("(?s)\\s+", "@") > .replaceAll("(?s),", " ") > .replaceAll("(?s)@", ","); > print(wkt); > bf = new BasicFeature(fc.getFeatureSchema()); > bf.setGeometry(new WKTReader().read(wkt)); > paths.add(bf); > > br.close(); > > } catch (MalformedURLException e) { > e.printStackTrace(); > } catch (IOException e) { > e.printStackTrace(); > } > } > fc.addAll(paths); > } > > > > Michaël > > > > Hi, > > > > Here is a demo script which finds route from the service or > yournavigation.org. Save the following code into lib\ext\BeanTools, draw > one or more lines with OpenJUMP by using EPSG:4326 system, run the tool > and copy the URLs from the result window into browser and you will get the > routes in KML format. Script creates a request which follows the YOURS > syntax http://wiki.openstreetmap.org/wiki/YOURS and it is simple to modify > to use other YOURS parameters. I also made another version which is getting > routes from the service of the Helsinki Region Traffic and it works fine too. > > > > With a little bit of work it should be possible to make an OpenJUMP routing > service plugin. Creating a request is easy but a very good plugin should be > able to handle coordinate conversions between OJ project coordinate > system and the one used by the routing service. And then OpenJUMP should > be able to parse the returning route which is typically in GPX or KML format. > However, I tested also a workaround by using GDAL in between. OpenJUMP > can create a ogr2ogr request and ogr2ogr can save the result as a shapefile > and possibly converted into another projection. > > > > > > > > Get_YOURS_Route.bsh > > ============== > > { > > import com.vividsolutions.jts.geom.*; > > import com.vividsolutions.jump.feature.*; > > import com.vividsolutions.jump.geom.EnvelopeUtil; > > import com.vividsolutions.jump.workbench.model.*; > > > > htmlFrame = wc.workbench.frame.outputFrame; > > htmlFrame.createNewDocument(); > > htmlFrame.setTitle("Output for gdal_translate"); > > fc = > wc.getLayerNamePanel().getSelectedLayers()[0].getFeatureCollectionWrap > per(); > > int j=1; > > for (Iterator i = fc.getFeatures().iterator(); i.hasNext();) { > > Feature feature = (Feature) i.next(); > > LineString lineString = (LineString)feature.getGeometry(); > > > htmlFrame.addText("http://www.yournavigation.org/api/1.0/gosmore.php? > format=kml&flat=" > > +lineString.getStartPoint().getY()+"&flon=" > > +lineString.getStartPoint().getX()+"&tlat=" > > +lineString.getEndPoint().getY()+"&tlon=" > > +lineString.getEndPoint().getX() > > +"&v=motorcar" > > +"&fast=1" > > +"&layer=mapnik"); > > j++; > > } > > wc.workbench.frame.flash(htmlFrame); > > htmlFrame.surface(); > > } > > > > > > With small modifications the script works with the routing service of > > the Helsinki Region Traffic. Coordinates must be in EPSG:2392 system. > > Can be tested for example with LINESTRING (2538008.7818696885 > > 6679830.130311615, 2538096.0339943343 6679899.818696884) > > > > > > > > > htmlFrame.addText("\"http://pk.hsl.fi/getroute/?format=gpx&profile=klero > weighted&from=location*Koordinaatti[" > > +lineString.getStartPoint().getX()+", " > > +lineString.getStartPoint().getY()+"]" > > +"*"+lineString.getStartPoint().getX() > > +"*"+lineString.getStartPoint().getY() > > +"&to=location*Koordinaatti[" > > +lineString.getEndPoint().getX()+", " > > +lineString.getEndPoint().getY()+"]" > > +"*"+lineString.getEndPoint().getX() > > +"*"+lineString.getEndPoint().getY() > > +"\"" ); > > > > > > > > -Jukka- > > > > ________________________________________ > > Michaël Michaud wrote: > > > > > >> Hi Jukka, > >> You can easily pick start and end point with Geometry geometry = > >> feature.getGeometry(); > > // this will return something whatever the geometry is Coordinate[] cc > > = geometry.getCoordinates(); x_start = cc[0].x; y_start = cc[0].y; > > x_end = cc[cc.length-1].x; y_end = cc[cc.length-1].y; > > > > // this is more readable if you make sure your geometry is a > > linestring before LineString lineString = > > (LineString)feature.getGeometry(); > > x_start = lineString.getStartPoint().getX(); > > y_start = lineString.getStartPoint().getY(); > > x_end = lineString.getEndPoint().getX(); y_end = > > lineString.getEndPoint().getX(); > > > >> Warning : I did not check the code > >> Michaël > >> PS let us know what you achieved with this code > >>> Hi, > >>> > >>> How could I pick Startpoint_X, Startpoint_Y, Endpoint_X,Endpoint_Y > from a linestring with BeanShell? Meaning is to build a http request for an > external routing service. Something similar is done in the following code with > envelope of a geometry for building a WFS GetFeature request with BBOX > filter. > >>> > >>> Geometry geometry = feature.getGeometry(); > >>> Envelope env = geometry.getEnvelopeInternal(); > >>> htmlFrame.addText("wget " > >>> +"\"http://hip.latuviitta.org/cgi-bin/" > >>> +"tinyows?" > >>> +"SERVICE=WFS" > >>> +"&VERSION=1.0.0" > >>> +"&REQUEST=GetFeature" > >>> +"&TYPENAME=lv:municipalities" > >>> +"&BBOX=" > >>> +env.getMinX()+"," > >>> +env.getMinY()+"," > >>> +env.getMaxX()+"," > >>> +env.getMaxY()+"\"" > >>> +" -O prexif_" > >>> +j > >>> +".gml" ); > >>> > >>> -Jukka Rahkonen- > >> --------------------------------------------------------------------- > >> --------- Own the Future-Intel® Level Up Game Demo Contest 2013 > >> Rise to greatness in Intel's independent game demo contest. > >> Compete for recognition, cash, and the chance to get your game on > >> Steam. $5K grand prize plus 10 genre and skill prizes. > >> Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d > >> _______________________________________________ > >> Jump-pilot-devel mailing list > >> Jump-pilot-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > >> > >> > > > > ---------------------------------------------------------------------- > > -------- Own the Future-Intel® Level Up Game Demo Contest 2013 > > Rise to greatness in Intel's independent game demo contest. > > Compete for recognition, cash, and the chance to get your game on > > Steam. $5K grand prize plus 10 genre and skill prizes. > > Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d > > _______________________________________________ > > Jump-pilot-devel mailing list > > Jump-pilot-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > ---------------------------------------------------------------------- > > -------- Own the Future-Intel® Level Up Game Demo Contest 2013 > > Rise to greatness in Intel's independent game demo contest. > > Compete for recognition, cash, and the chance to get your game on > > Steam. $5K grand prize plus 10 genre and skill prizes. > > Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d > > _______________________________________________ > > Jump-pilot-devel mailing list > > Jump-pilot-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > > > ------------------------------------------------------------------------------ > Own the Future-Intel® Level Up Game Demo Contest 2013 Rise to > greatness in Intel's independent game demo contest. > Compete for recognition, cash, and the chance to get your game on Steam. > $5K grand prize plus 10 genre and skill prizes. > Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel ------------------------------------------------------------------------------ Own the Future-Intel(R) Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel