<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>yes, I had something like this in mind.<br>StyledConverter could call the POIGenerator<br>for each polygon. The POIGenerator <br>creates a dummy node, opies the tags, adds the <br>mkgmap:area2poi=true tag and <br>checks if the style produces a map element.<br>If yes, it calculates the coords<br>and returns the node which is than passed to addNode.<br><br>Anyhow, this change is only useful when performance<br>is a problem. I once had a similar idea for mp-processing.<br><br>Gerd<br><br><div>&gt; Date: Thu, 8 Jan 2015 20:55:46 +0100<br>&gt; From: wmgcnfg@web.de<br>&gt; To: mkgmap-dev@lists.mkgmap.org.uk<br>&gt; Subject: Re: [mkgmap-dev] small issue with Way.getCofG()<br>&gt; <br>&gt; Hi Gerd,<br>&gt; <br>&gt; I think there are many drawbacks to move the POI generation into the <br>&gt; style code. At least it will complicate the style code.<br>&gt; <br>&gt; Maybe it is better to implement your idea directly in the POIGeneratorHook.<br>&gt; If it has access to the point style it could check itself if the polygon <br>&gt; will (probably) create a POI. Maybe it could first test if there is any <br>&gt; overlap of the polygon tags with the tags used in the points file. Then <br>&gt; it could pass an artifical POI through the points style and check if a <br>&gt; POI is created (finally rules might be disabled to speed up the <br>&gt; processing).<br>&gt; The hook might also decide how to proceed dependent on the complexity of <br>&gt; the polygon.<br>&gt; <br>&gt; <br>&gt; By the way: Did you think of having different methods depending on the <br>&gt; use case? So one getCofG() for POI placement, one getHouseNumberPoint() <br>&gt; for housenumber processing etc. It sounds like it is hard to find one <br>&gt; algorithm that fits all.<br>&gt; <br>&gt; WanMil<br>&gt; <br>&gt; &gt; Hi Mike,<br>&gt; &gt;<br>&gt; &gt; reg. POI for polygons like rivers etc:<br>&gt; &gt;<br>&gt; &gt; The current algo calculates a POI for each polygon before any style rule<br>&gt; &gt; is applied.<br>&gt; &gt; If the calculation of the Coord takes a lot of time, and many of the POI<br>&gt; &gt; are later dropped in the points rules, maybe it is possible<br>&gt; &gt; to create a dummy object first, pass it through the style rules, check<br>&gt; &gt; if it<br>&gt; &gt; produces a map object, and calculate the exact position only for those.<br>&gt; &gt; I think we would have to change/remove the POIGeneratorHook and<br>&gt; &gt; call it "on the fly", but I don't see any big problem with that.<br>&gt; &gt;<br>&gt; &gt; Gerd<br>&gt; &gt;<br>&gt; &gt; ------------------------------------------------------------------------<br>&gt; &gt; From: mike@tvage.co.uk<br>&gt; &gt; To: mkgmap-dev@lists.mkgmap.org.uk<br>&gt; &gt; Date: Wed, 7 Jan 2015 09:29:51 +0000<br>&gt; &gt; Subject: Re: [mkgmap-dev] small issue with Way.getCofG()<br>&gt; &gt;<br>&gt; &gt; HI Gerd, the method I’ve used won’t work if the polygon is thinner than<br>&gt; &gt; the resolution of the bitmap. I hadn’t considered that it might be used<br>&gt; &gt; on rivers; my main testing has been on car parks, which although they<br>&gt; &gt; may be irregularly shaped are not normally very long and very thin (I<br>&gt; &gt; handle river names from the underlying lines). There are two possible<br>&gt; &gt; problems that could occur – if a polygon is thin enough that it renders<br>&gt; &gt; in the bitmap as a line that is nowhere wider than 2 pixels the POI<br>&gt; &gt; could be placed just outside the polygon. I haven’t checked what<br>&gt; &gt; fillPolygon does if the points have no volume and form a line. If this<br>&gt; &gt; renders nothing, then the algo will just return the centre point, which<br>&gt; &gt; could be nowhere near the polygon. A simple solution to the first<br>&gt; &gt; problem would be to examine the biggestSquaredDistanceToBlack figure<br>&gt; &gt; before returning the coordinate and if the value is 1, repeat the<br>&gt; &gt; operation on a small area around the point to get a better accuracy.<br>&gt; &gt; I’ll look into that. For the second problem I’ll add an error message,<br>&gt; &gt; so we can determine if it actually occurs (biggestSquaredDistanceToBlack<br>&gt; &gt; is 0). I’ve also thought that having drawn the bitmap, it might be more<br>&gt; &gt; efficient to then copy its contents out into an array so that finding<br>&gt; &gt; the distances from pixels inside the polygon to those outside become<br>&gt; &gt; simple array lookups instead of graphics function calls. I’ll look into<br>&gt; &gt; that as well.<br>&gt; &gt;<br>&gt; &gt; Cheers,<br>&gt; &gt;<br>&gt; &gt; Mike<br>&gt; &gt;<br>&gt; &gt; *From:*Gerd Petermann [mailto:gpetermann_muenchen@hotmail.com]<br>&gt; &gt; *Sent:* 07 January 2015 06:55<br>&gt; &gt; *To:* mkgmap-dev@lists.mkgmap.org.uk<br>&gt; &gt; *Subject:* Re: [mkgmap-dev] small issue with Way.getCofG()<br>&gt; &gt;<br>&gt; &gt; Hi Mike,<br>&gt; &gt;<br>&gt; &gt; on my PC the performance of your algo is quite good.<br>&gt; &gt; Attached is a patch that contains your patch as well as my quick<br>&gt; &gt; implementation<br>&gt; &gt; of the algo described here:<br>&gt; &gt; http://arxiv.org/ftp/arxiv/papers/1212/1212.3193.pdf<br>&gt; &gt;<br>&gt; &gt; The patch tests only performance, it computes the center with the 3<br>&gt; &gt; different algos,<br>&gt; &gt; I've commented the part that prints times and GPX data for debug purposes.<br>&gt; &gt;<br>&gt; &gt; I noticed that the results between both algos are very different, I did not<br>&gt; &gt; yet try to find out which one is better, but mine is much slower on my PC.<br>&gt; &gt; I also noticed that your algo doesn't always calculate a point in the<br>&gt; &gt; polygon,<br>&gt; &gt; see e.g.   way 178708143.<br>&gt; &gt;<br>&gt; &gt; If you like, please try to find a better compromise, I like to fix a<br>&gt; &gt; problem in<br>&gt; &gt; splitter first.<br>&gt; &gt; I also did not yet look at the effect on the house number code, as there<br>&gt; &gt; are many<br>&gt; &gt; more small open problems, but I think it should be easy to sort that out.<br>&gt; &gt;<br>&gt; &gt; Gerd<br>&gt; &gt;<br>&gt; &gt;&gt; Date: Tue, 6 Jan 2015 13:23:57 -0700<br>&gt; &gt;&gt; From:gpetermann_muenchen@hotmail.com &lt;mailto:gpetermann_muenchen@hotmail.com&gt;<br>&gt; &gt;&gt; To:mkgmap-dev@lists.mkgmap.org.uk &lt;mailto:mkgmap-dev@lists.mkgmap.org.uk&gt;<br>&gt; &gt;&gt; Subject: Re: [mkgmap-dev] small issue withWay.getCofG()<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  Hi Mike,<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  I like the idea, but it seems to be slow.<br>&gt; &gt;&gt; Is it possible that your algo suffers when no fast graphics card is<br>&gt; &gt;&gt; available?<br>&gt; &gt;&gt; On my netbook the performance is very poor, did not yet<br>&gt; &gt;&gt; try on the PC, but that also has no high speed graphics.<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; Gerd<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; GerdP wrote<br>&gt; &gt;&gt; &gt; Hi Mike,<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt; 50% sounds better than my algo, but still quite a lot. I'll have a closer<br>&gt; &gt;&gt; &gt; look at your<br>&gt; &gt;&gt; &gt; algo later.<br>&gt; &gt;&gt; &gt; Please note that your change has a side effect on the house number<br>&gt; &gt;&gt; &gt; generator.<br>&gt; &gt;&gt; &gt; Up to now this doesn't contain a filter for generated POI, so each polygon<br>&gt; &gt;&gt; &gt; with a house number is processed twice, once because of the POI, once<br>&gt; &gt;&gt; &gt; because the Generator uses Way.getCofG(). If both have different positions<br>&gt; &gt;&gt; &gt; this might have a negative impact.<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt;  &gt; Gerd<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt;  &gt;<br>&gt; &gt;&gt; &gt; From:<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;mike@.co &lt;mailto:mike@.co&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; To:<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; &gt;mkgmap-dev@.org &lt;mailto:mkgmap-dev@.org&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; Date: Tue, 6 Jan 2015 14:56:30 +0000<br>&gt; &gt;&gt; &gt; Subject: Re: [mkgmap-dev] small issue withWay.getCofG()<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt;  &gt; I have a working solution for ensuring that the created point is placed<br>&gt; &gt;&gt; &gt; within the polygon when using --add-pois-to-areas, based on drawing the<br>&gt; &gt;&gt; &gt; polygon on to a small monochrome bitmap and then looking for the point<br>&gt; &gt;&gt; &gt; that<br>&gt; &gt;&gt; &gt; is furthest from the surrounding area. I used a 9x9 bitmap for polygons<br>&gt; &gt;&gt; &gt; having a small number of points and 15x15 for longer polygons. There is<br>&gt; &gt;&gt; &gt; however a performance penalty. My standard map takes about 1 hour 20<br>&gt; &gt;&gt; &gt; minutes; using this algorithm the time increases by about 50% to about 2<br>&gt; &gt;&gt; &gt; hours. I am not currently able to commit changes to SVN (perhaps someone<br>&gt; &gt;&gt; &gt; can<br>&gt; &gt;&gt; &gt; help out with that) but I have attached the code changes. I suggest that<br>&gt; &gt;&gt; &gt; due<br>&gt; &gt;&gt; &gt; to the performance penalty, if we adopt this, then the --add-pois-to-areas<br>&gt; &gt;&gt; &gt; option be extended to be --add-pois-to-areas[=centre|optimised] or<br>&gt; &gt;&gt; &gt; something<br>&gt; &gt;&gt; &gt; similar, with the default being centre and functioning as now and the<br>&gt; &gt;&gt; &gt; optimised option invoking the new code. Please try out the suggested<br>&gt; &gt;&gt; &gt; change.<br>&gt; &gt;&gt; &gt; Note I don't expect this to work properly where a polygon is formed from a<br>&gt; &gt;&gt; &gt; multiploygon relation, but the code could quite easily be adapted for this<br>&gt; &gt;&gt; &gt; circumstance.<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt;  &gt;<br>&gt; &gt;&gt; &gt; Regards,<br>&gt; &gt;&gt; &gt; Mike<br>&gt; &gt;&gt; &gt;<br>&gt; &gt;&gt; &gt; _______________________________________________<br>&gt; &gt;&gt; &gt; mkgmap-dev mailing list<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; mkgmap-dev@.org &lt;mailto:mkgmap-dev@.org&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev<br>&gt; &gt;&gt; &gt; _______________________________________________<br>&gt; &gt;&gt; &gt; mkgmap-dev mailing list<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; mkgmap-dev@.org &lt;mailto:mkgmap-dev@.org&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;  &gt; http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; --<br>&gt; &gt;&gt; View this message in context:http://gis.19327.n5.nabble.com/small-issue-with-Way-getCofG-tp5828821p5829247.html<br>&gt; &gt;&gt; Sent from theMkgmap Development mailing list archive at Nabble.com.<br>&gt; &gt;&gt; _______________________________________________<br>&gt; &gt;&gt;mkgmap-dev mailing list<br>&gt; &gt;&gt;mkgmap-dev@lists.mkgmap.org.uk &lt;mailto:mkgmap-dev@lists.mkgmap.org.uk&gt;<br>&gt; &gt;&gt;http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev<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; &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>