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].getFeatureCollectionWrapper();
     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&flat=";
                 +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].getFeatureCollectionWrapper();
>          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=kleroweighted&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

Reply via email to