[mkgmap-dev] RoadDef patch
From Brian Egge brianegge at gmail.com on Thu Nov 6 16:39:03 GMT 2014
Hi Gerd, I was completely wrong about the compareTo. Thanks for pointing that out. I agree the compareTo method should be removed. TableA should really be using an IdentityLinkedHashMap, but this doesn't exist in the standard jdk. Thanks, Brian On Thu, Nov 6, 2014 at 9:45 AM Gerd Petermann < gpetermann_muenchen at hotmail.com> wrote: > Hi Brian, > > I read again your posts. I think you got something wrong. > I think we allow to create multiple instances of RoadDef > having the same values in the id field and in the name field. > This happens when a style adds the same OSM way > with different routing attributes, e.g. one way for bicycles > and one for cars. > A public available style that does this is Minkos: > http://mijndev.openstreetmap.nl/%7Eligfietser/openfietsmap/Scripts/ > > I think your patch disables this feature. > > > Gerd > > ------------------------------ > From: brianegge at gmail.com > Date: Thu, 6 Nov 2014 06:34:43 -0500 > To: mkgmap-dev at lists.mkgmap.org.uk > Subject: Re: [mkgmap-dev] RoadDef patch > > Hi Gerd, > > In Steve’s stack trace it shows RoadMap is being used by a LinkedHashMap > in TableA. A linked hash map maintains an ordered list of nodes, which is > the same in every JDK version. You can set a breakpoint in CompareTo and > run the SimpleRouteTest and see that it’s being used. > > The TableA addArc method is trying to only add unique arcs. They > containsKey method at present will never return true, but it’s clear from > the code that there are case where it should return true. My change results > in a slight reduction of the NOD section, which seems to make sense. > > The sole purpose of the Hash seems to be preventing multiple, duplicate > arcs from being created on the same RouteNode. > > In MapNode, RoadDef is constructed with the osm id of the way, but when > constructed from the NETFileReader, the id is the record number, which will > be unique. > > If every RoadDef should be unique, then one should not implement > equals/hashCode/compareable, and instead use the default implementations > from Object. However, one would then need to remove the LinkedHashMap from > TableA and replace it with something like Array. > > Brian > > > When RoadDefs are created in NETFileReader, a unique id is generated for > each RoadDef. > > On Nov 6, 2014, at 3:34 AM, Gerd Petermann < > gpetermann_muenchen at hotmail.com> wrote: > > Hi Brian, > > thanks for the patch. If I got it right, the compareTo() methid is obsolete > as we do no longer sort RoadDef instances anywhere. So, > it would be easier to remove the Comparable attribute from the class > public class RoadDef /*implements Comparable<RoadDef>*/ { > and remove the compareTo() method. > > You are right regarding the hashCode() method, but I think > we should not use the fields id + name to implement it. > A style may add the same OSM way as a routable line multiple times, > in that case these two fields are equal. > > A typical map has less than 100.000 RoadDef instances, so I see no problem > to add an int (or long) field like roadId which is filled with a unique > value > and use that in hashCode(). > What do you think? > > Gerd > > From: brianegge at gmail.com > Date: Wed, 5 Nov 2014 22:28:38 -0500 > To: mkgmap-dev at lists.mkgmap.org.uk > Subject: [mkgmap-dev] RoadDef patch > > I’m not sure what the concurrency issue is related to this class, but it seems to have some problems around equality. First, it’s being used in a HashMap, which means both equals and hashCode need to be implemented. Second, the compareTo was using an unimplemented hashCode, which results in random sorting and inability to find two identical objects. > > I’m not sure I understand all the details of what RoadDef does, but I’ve fixed up the basic methods in the class to be consistent and added a test case around those methods. > > > Brian > _______________________________________________ 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 > > > > _______________________________________________ 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 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://www.mkgmap.org.uk/pipermail/mkgmap-dev/attachments/20141106/a26a4659/attachment.html>
- Previous message: [mkgmap-dev] RoadDef patch
- Next message: [mkgmap-dev] Commit: r3345: - remove compareTo() method from RoadDef and the Comparable attribute.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the mkgmap-dev mailing list