[mkgmap-dev] Curvy routing support: new function?
From WanMil wmgcnfg at web.de on Tue Jul 1 21:49:31 BST 2014
One correction: in 2. I ment standard deviation instead of standard mean. WanMil > 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 at lists.mkgmap.org.uk >> http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev >> > > > > _______________________________________________ > mkgmap-dev mailing list > mkgmap-dev at lists.mkgmap.org.uk > http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev >
- Previous message: [mkgmap-dev] Curvy routing support: new function?
- Next message: [mkgmap-dev] Curvy routing support: new function?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the mkgmap-dev mailing list