I am now sure that the 1st version of the patch is wrong.
It measures the distance between two road junctions. If this distance is shorter than the given minimum length,
it replaces the coord of the previous junction with the latter one (or vice verse, depending on boundary issues)
and remembers that this coord was replaced. Any other road using the replaced coord is changed so that it also uses the replacement.
Doing this some ways end up having only one point. These ways are removed.
So, the algorithm has to iterate over all roads again when a coord was replaced.
See eg.
in the 2nd pass the way 196384413 is removed because it only has one point left.
So, in short, I think the best solution until now is the one we have in r2448, and I think we
should adapt the unit test.
I still don't understand why a short arc breaks routing, I assume this is caused by
some Garmin limit.
> Date: Thu, 17 Jan 2013 14:28:02 +0000
> From: steve@parabola.me.uk
> To: mkgmap-dev@lists.mkgmap.org.uk
> Subject: [mkgmap-dev] Remove short arcs
>
>
> Hi Gerd
>
> > Yes, today I tried to put it into RoadNetWork, but then I found out that
> > this
> > routine sees the roads after they were split into smaller parts by
> > StyledConverter. So, a lot more program logic has to be changed, and I think
>
> Yes, most of that code should be moved too.
> And anyway, shouldn't the short arc code be run after cutting the
> roads up anyway? It might also be possible to combine the two
> functions.
>
> > that I don't
> > understand enough for that :-(
> > I hope you can solve this, because I am not that happy with the
> > removeShortArcs_v3.patch as well.
>
> I don't understand it either.
> I suspect that it might be possible to solve the actual problem
> that removeShortArcs is attempting to solve, at the level of building
> the NOD file. But the only way to find out would be to find or
> construct cases that don't route properly as tests and experiment.
>
> In the short term we need to decide on something to do. We
> could disable the failing tests for the moment, go back to the
> version that didn't iterate multiple times over the roads, or
> go back to running it over all lines.
>
> Running over all lines is a step backwards in my opinion. The second
> option seems fine to me, as long as there are no error messages about
> short arcs. Even though the results are different they could well be for
> the better. The comments about contour lines in that routine make me
> think that it could be simplified now that we are not running it
> on contours. Lastly we could disable the failing tests for now,
> since they are false failures.
>
> So it depends on what you think about the original patch that didn't
> run multiple times over the ways. If you think it is definitely broken
> then we should @Ignore the failing test, and I will try out ways of
> re-structuring all that code. I've wanted to do it for a long time
> since I think that it is a barrier to any routing improvements.
>
> ..Steve
> _______________________________________________
> mkgmap-dev mailing list
> mkgmap-dev@lists.mkgmap.org.uk
> http://lists.mkgmap.org.uk/mailman/listinfo/mkgmap-dev