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&reg; 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&reg; 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&reg; 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&reg; 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

Reply via email to