Ah, thanks a lot, Gerd. And I think I got it: + for (Coord c3 : w.getPoints()) { + if (c1 != null && c2 != null) { + angle += Utils.getAngle(c1, c2, c3); + } + c1 = c2; + c2 = c3; + } The simple addition of angle values cannot work. It needs a) an absolute abs() value. For curviness in its meaning, it does not matter into which direction (left or right turn) the way bends b) a correction for angles that are almost, or alternating around north-south direction due to the fact that a change from 359 degrees to 2 degrees is not a full 357 degreees turn, but a very slight turn. (or, a correction for east-west roads, depending on where the transition from + to - of the Utils.getAngle() function currently is)
For both, after several tests I have found a solution which works well, please see my first mail. But I don't know ow the getAngle function works, where the +- transition is. I think we'll wait till WanMil has more time. I don't want to pull more and more people into that. Cheers Manfred > > Hi Manfred, > > it seems you did not notice the patch which was attached in WanMils 1st > post: > http://gis.19327.n5.nabble.com/attachment/5810047/0/curviness_v1.patch > > Gerd > > > Manfred Brenneisen-2 wrote > > Hi WanMil, > > > > sorry I did not want to create pressure - it's holiday time :-) > > Just thought it drowned below noise level > > > > If I can help by looking at the source code, please let me know > > > > Cheers > > Manfred > > > >> Hi Manfred, > >> > >> I do not have time to have a look on it within the next weeks. So please > >> help yourself or wait... Sorry :-) > >> > >> WanMil > >> > >> > Hi WanMil, > >> > > >> > unfortunately the curviness() function does not work as expected yet. I > >> can try to help to analyse it, may I have a look at the source code > >> anywhere? The function alone would be enough > >> > > >> > Thanks and cheers > >> > Manfred > >> > > >> > > >> > PS: please find detailed analysis in my mail from July 3 > >> > > >> > > >> >> Gesendet: Donnerstag, 03. Juli 2014 um 20:49 Uhr > >> >> Von: WanMil < > > > wmgcnfg@ > > > > > >> >> An: "Development list for mkgmap" < > > > mkgmap-dev@.org > > > > > >> >> Betreff: Re: [mkgmap-dev] Curvy routing support: new function? > >> >> > >> >> I forgot to clean before build... > >> >> Here is the new version: http://files.mkgmap.org.uk/detail/216 > >> >> > >> >>> Hi WanMil, > >> >>> > >> >>> you are very fast, thank you very much for this! > >> >>> However I'm facing some expectations, log: > >> >>> java.lang.NoSuchMethodError: > >> uk.me.parabola.mkgmap.reader.osm.Way.deleteTag(Ljav > >> >>> a/lang/String;)V > >> >>> at > >> uk.me.parabola.mkgmap.reader.osm.MultiPolygonFinishHook.end(MultiPoly > >> >>> gonFinishHook.java:50) > >> >>> at > >> uk.me.parabola.mkgmap.reader.osm.OsmReadingHooksChain.end(OsmReadingH > >> >>> ooksChain.java:79) > >> >>> at > >> uk.me.parabola.mkgmap.reader.osm.o5m.O5mBinMapDataSource.load(O5mBinM > >> >>> apDataSource.java:49) > >> >>> at > >> uk.me.parabola.mkgmap.reader.osm.OsmMapDataSource.load(OsmMapDataSour > >> >>> ce.java:127) > >> >>> at > >> uk.me.parabola.mkgmap.main.MapMaker.loadFromFile(MapMaker.java:167) > >> >>> at > >> uk.me.parabola.mkgmap.main.MapMaker.makeMap(MapMaker.java:63) > >> >>> at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:253) > >> >>> at uk.me.parabola.mkgmap.main.Main$1.call(Main.java:249) > >> >>> at java.util.concurrent.FutureTask$Sync.innerRun(Unknown > >> Source) > >> >>> at java.util.concurrent.FutureTask.run(Unknown Source) > >> >>> at > >> java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) > >> >>> at > >> java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) > >> >>> at java.lang.Thread.run(Unknown Source) > >> >>> > >> >>> (I have installed r3310 which works ok, and then replaced mkgmap.jar > >> by your build) > >> >>> > >> >>> I'm open to any suggestions for other logic. A curviness function can > >> only be a virtual value, not physical. However it may probably sufficient > >> to say, curviness=length()/distance(first_point, last_point)? May be I'm > >> thinking too complex :-) > >> >>> > >> >>> Cheers > >> >>> Manfred > >> >>> > >> >>> > >> >>> > >> >>>> Gesendet: Dienstag, 01. Juli 2014 um 22:32 Uhr > >> >>>> Von: WanMil < > > > wmgcnfg@ > > > > > >> >>>> An: "Development list for mkgmap" < > > > mkgmap-dev@.org > > > > > >> >>>> Betreff: Re: [mkgmap-dev] Curvy routing support: new function? > >> >>>> > >> >>>> Hi, > >> >>>> > >> >>>> I remember that it is on my Todo-List :-) > >> >>>> > >> >>>> So I performed a quick implementation following your suggestion. You > >> can > >> >>>> find in the attached patch so that you can play a little bit with > >> it. > >> >>>> (Attention: it is completely untested!!) > >> >>>> You can find a patched mkgmap.jar at > >> http://files.mkgmap.org.uk/detail/215. > >> >>>> > >> >>>> I think curviness should to be defined in a different way. > >> >>>> 1. Calculate the distance of each point Dmiddle to the virtual line > >> from > >> >>>> first to the last point. > >> >>>> 2. curviness()=standard mean(Dmiddle/(length to next point + length > >> to > >> >>>> previous point) > >> >>>> > >> >>>> I think this gives a better indication how curviness a road is. But > >> it > >> >>>> need to be implemented and tested later on :-) > >> >>>> > >> >>>> WanMil > >> >>>> > >> >>>>> Hi all, > >> >>>>> > >> >>>>> Garmin offers "curvy roads" preferences for their zümo 390 and 590 > >> devices. > >> >>>>> > >> https://buy.garmin.com/en-US/US/on-the-road/motorcycles/zumo-390lm/prod138275.html > >> >>>>> I'm thinking about creating motorcycle maps for old 200 series. > >> >>>>> Might it be useful to integrate a curviness() function so that > >> mkgmap can optimize for curvy roads too? It might also help do determine > >> a better default speed for curvy roads for use with car routing. > >> >>>>> > >> >>>>> The curviness() value might be the overall absolute turning angle > >> (in degrees) of a road segment divided by the segment's length. > >> >>>>> > >> >>>>> What's your opinion? > >> >>>>> > >> >>>>> Cheers > >> >>>>> Manfred > >> >>>>> > >> >>>>> > >> >>>>> > >> >>>>> > >> >>>>> Pseudo code might look like this: > >> >>>>> > >> >>>>> function curviness() > >> >>>>> { > >> >>>>> oldpoint=points(0) > >> >>>>> foreach (point of a way segment as newpoint) > >> >>>>> { > >> >>>>> > >> d_x=(newpoint.x-oldpoint.x)/360*40000000*COS(newpoint.x*PI()/180) //in > >> meters > >> >>>>> d_y=(newpoint.y-oldpoint.y)/360*40000000 //in meters > >> >>>>> length+=sqrt(d_x**2+d_y**2) > >> >>>>> angle=arctan(d_y/d_x) > >> >>>>> d_angle=abs(angle-old_angle) > >> >>>>> sgn_x=sgn(d_x) > >> >>>>> sgn_y=sgn(d_y) > >> >>>>> if ((sgn_x*sgn_y*old_sgn_x*old_sgn_y)=-1 && > >> (sgn_x!=old_sgn_x)) d_angle=pi-d_angle // 180 degrees correction, > >> otherwise north-south roads show strange results > >> >>>>> if (point>1) sum_angle+=d_angle > >> >>>>> old_angle=angle > >> >>>>> oldpoint=newpoint > >> >>>>> old_sgn_x=sgn_x > >> >>>>> old_sgn_y=sgn_y > >> >>>>> } > >> >>>>> return sum_angle/length > >> >>>>> } > >> >>>>> > >> >>>>> // perhaps simple multiplication is faster than 4 times sgn() > >> functions? > >> >>>>> _______________________________________________ > >> >>>>> mkgmap-dev mailing list > >> >>>>> > > > mkgmap-dev@.org > > >> >>>>> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > >> >>>>> > >> >>>> > >> >>>> _______________________________________________ > >> >>>> mkgmap-dev mailing list > >> >>>> > > > mkgmap-dev@.org > > >> >>>> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > >> >>> _______________________________________________ > >> >>> mkgmap-dev mailing list > >> >>> > > > mkgmap-dev@.org > > >> >>> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > >> >>> > >> >> > >> >> _______________________________________________ > >> >> mkgmap-dev mailing list > >> >> > > > mkgmap-dev@.org > > >> >> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > >> > _______________________________________________ > >> > mkgmap-dev mailing list > >> > > > > mkgmap-dev@.org > > >> > http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > >> > > >> > >> _______________________________________________ > >> mkgmap-dev mailing list > >> > > > mkgmap-dev@.org > > >> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > > _______________________________________________ > > mkgmap-dev mailing list > > > mkgmap-dev@.org > > > http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev > > > > > > -- > View this message in context: > http://gis.19327.n5.nabble.com/Curvy-routing-support-new-function-tp5810044p5813421.html > Sent from the Mkgmap Development mailing list archive at Nabble.com. > _______________________________________________ > mkgmap-dev mailing list > mkgmap-dev@lists.mkgmap.org.uk > http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev _______________________________________________ mkgmap-dev mailing list mkgmap-dev@lists.mkgmap.org.uk http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev