logo separator

[mkgmap-dev] Re: my map testing

From Alexander Atanasov aatanasov at gmail.com on Fri Dec 12 15:58:15 GMT 2008


On 12/12/08, Robert Vollmert <rvollmert-lists at gmx.net> wrote:
> On Dec 11, 2008, at 18:58, Alexander Atanasov wrote:
> > Do not increase bmlen if the starting point is not a node.
> > It represents the count of nodes, not their locations in the line
> > and nnodes is set to the real count from the reader.
> >
> > I don't know how this is handled:
> >  R1                           R1
> > ------------------X-------------------
> >                      | R2
> >
> > If R1 is the first segment it can be split in two and have bmlen=2 and
> > 01 10 bitmaps.
> >
> > If it's not the first segment starting point is a node depending on
> > the last point from the previous segment.
> >
> > So extend the nodes count only for roads with one node which is not
> > the starting one, i don't see how to find the segments.
> >
> I tried to code what I saw in some maps. Namely, most of the time, there's
> just the lower bmlen bits set, and bmlen=nnodes (eg bmlen=3, bs=7). Then
> there's a few cases where the lowest bit is not set, but above that bmlen
> bits are set, and bmlen=nnodes+1 (eg bmlen=3, bs=6). Furthermore, this
> appears to happen iff the start point of a road is not a node. In all the
> cases I've seen,
> (highest bit in bs) == (1 << (bmlen - 1)) .
> Do you have different examples?

I've seen bitmaps with holes too afaik somewhere in mg.
like bmlen=3 bitmap=101

For the extra bit you are right. If i read them the way they are in mkgmap
mapping looks accurate. Except for the start and end eb.

I found this for the case ----X---
garmin_net.c:469:1|SF:49915221 SD:10 l=0 ot=3 idx=12 gt=0x00(0) lng=10.579920 la
t=49.310932 d:0 sc:1 eb:1 dt:2
garmin_net.c:478:1|0 10.579920/49.310932 (78604/2310c8) e=1 <-- not a node
garmin_net.c:486:1|1 10.580800/49.311340 (7862d/2310db) e=1
garmin_net.c:486:1|2 10.581465/49.311619 (7864c/2310e8) e=0
garmin_net.c:502:1|segments:0 i:12 sd:10
garmin_net.c:508:1|NOD info at 740
garmin_net.c:517:1|NOD1 at 4165 bmlen=2 fb=0
garmin_net.c:522:1|NET: BITMAP: 2


and another ----X--- case

garmin_net.c:469:1|SF:49915221 SD:8 l=0 ot=3 idx=59 gt=0x16(0) lng=10.572925 lat
=49.313121 d:0 sc:0 eb:0 dt:3
garmin_net.c:478:1|0 10.572925/49.313121 (784be/23112e) e=0
garmin_net.c:486:1|1 10.572925/49.313314 (784be/231137) e=0
garmin_net.c:486:1|2 10.572839/49.313507 (784ba/231140) e=0
garmin_net.c:486:1|3 10.572860/49.313700 (784bb/231149) e=0
garmin_net.c:502:1|segments:0 i:59 sd:8
garmin_net.c:508:1|NOD info at 333
garmin_net.c:517:1|NOD1 at 2782 bmlen=2 fb=0
garmin_net.c:522:1|NET: BITMAP: 2


I think the difference comes from what road the node belongs to.
nodes have only one road offset.
So if nodes are from that road mark their positions with extra bit.
That can explain the above cases and why start and end eb are not
always set.

But from the first case it looks like eb is not always a node
but a segmentation point in the line and bitmap makes the mapping
to nodes. Still not quite clear ...

have fun,

More information about the mkgmap-dev mailing list