logo separator

[mkgmap-dev] Curvy routing support: new function?

From WanMil wmgcnfg at web.de on Tue Jul 1 21:32:34 BST 2014


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 :-)


> 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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: curviness_v1.patch
Type: text/x-patch
Size: 3482 bytes
Desc: not available
URL: <http://www.mkgmap.org.uk/pipermail/mkgmap-dev/attachments/20140701/ff19b94f/attachment.bin>

More information about the mkgmap-dev mailing list