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
> >> [email protected]
> >> 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
> > [email protected]
> > 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
> > [email protected]
> > 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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel