<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Hi WanMil,<br><br>I agree that also Coord.equals()&nbsp; is a method which has to be handled with <br>great care. The meaning of "p1.equals(p2) == true" <br>is that both points have coordinates that were rounded<br>to equal map unit values. The original OSM points can have a<br>distance of&nbsp; &gt; 2m, on the other hand, two points with a <br>distance &lt; 0.2m can have different map unit coordinates.<br><br>I know one case where the Coord.equals() has a meaning:<br>When creating the road network, we must make sure that <br>a RouteArc connects two points that have different coordinates.<br>(high prec branch r2861 still contains an error here)<br><br>I think equals() should be <b>avoided </b>in all algos that try to calculate <br>something. problem is that we use Coord.equals() whenever we use collections<br>like Map&lt;Coord,xyz&gt; or even List&lt;Coord&gt; in combinations with List.contains().<br>Most of these usages are candidates for errors when input data allows that<br>p1.equals(p2) == true and p1 != p2.<br><br>The higher precision values in the high prec branch are no solution for that, they <br>just make it less likely to happen.<br><br>Maybe a good way to find potential errors in the code is to create test data <br>that contains these special cases ?<br><br>Gerd<br><br><br><br><div>&gt; Date: Thu, 5 Dec 2013 21:59:42 +0100<br>&gt; From: wmgcnfg@web.de<br>&gt; To: mkgmap-dev@lists.mkgmap.org.uk<br>&gt; Subject: Re: [mkgmap-dev] Way.isClosed()<br>&gt; <br>&gt; Hi Gerd,<br>&gt; <br>&gt; I've gone through all calls of isClosed(). I am quite sure all in all <br>&gt; calls it should be checked for identity.<br>&gt; <br>&gt; But there are some other changes that need to be done (not complete!!):<br>&gt; SeaGenerator<br>&gt;    beginMap (line 770) need to be IdentityHashMap<br>&gt; <br>&gt; BoundaryRelation<br>&gt;    line 387 should be an IdentityHashMap?<br>&gt;    line 474+477: Coord.equals(..) maybe check for identity?<br>&gt; <br>&gt; MultipolgyonRelation<br>&gt;    line 468 should be an IdentityHashMap?<br>&gt;    line 553+556: Coord.equals(..) maybe check for identity?<br>&gt; <br>&gt; I guess there are a lot of other places where Coord.equals is used <br>&gt; instead of identity.<br>&gt; <br>&gt; WanMil<br>&gt; <br>&gt; <br>&gt; <br>&gt; &gt; Hi WanMil,<br>&gt; &gt;<br>&gt; &gt;  &gt; Before fixing that all calls to this method need to be checked if they<br>&gt; &gt;  &gt; rely on the current behaviour.<br>&gt; &gt;<br>&gt; &gt; I agree. The problem is that the method is used in rather complex<br>&gt; &gt; algos, so it's difficult for me to answer this question, esp.<br>&gt; &gt; when we also have to consider the changes in the high prec branch.<br>&gt; &gt;<br>&gt; &gt; Gerd<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; _______________________________________________<br>&gt; &gt; mkgmap-dev mailing list<br>&gt; &gt; mkgmap-dev@lists.mkgmap.org.uk<br>&gt; &gt; http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev<br>&gt; &gt;<br>&gt; <br>&gt; _______________________________________________<br>&gt; mkgmap-dev mailing list<br>&gt; mkgmap-dev@lists.mkgmap.org.uk<br>&gt; http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev<br></div>                                               </div></body>
</html>