Hi,
> 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.
I see,
In your initial script, there was a counter.
I removed it, but you can add it again and use it this way.
count = 0;
for (Iterator it = ....) {
if (count++ > 10) break;
}
Also an improvement I was too lazy to do is to put result in
a new layer...
Michaël
-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
>
>
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel