On 26/12/09 22:11, Mark Burton wrote:
>
> Hi Chris,
>
>> Mark Burton schrieb:
>>
>>> So, is putting the coastline into a multipolygon a reasonable OSM
>>> thing?
>>
>> A coastline is often also a boundary and boundaries are
>> multipolygons in OSM.
>>
>>> If so, should mkgmap be breaking the coastline by removing its
>>> tags? If not, how do we fix that?
>>
>> My guess is, that the multipolygon handling in mkgmap is not working
>> perfectly.
>>
>> See an older thread on this list where I suggest a
>> workaround. (I check if the MP has no inner elements
>> and change the type=multipolygon to type=boundarypolygon
>> if this is the case).
>>
>> Chris
>
> OK, that's understood.
>
> But why do we have to trash the original ways when we make a
> multipolygon from them? Would it not be better to give the relation a
> duplicate of the way to trash so that the original way can go on to
> serve its original purpose. Perhaps we should do this:
>
> diff --git a/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java 
> b/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java
> index acc5cf9..fbb1d57 100644
> --- a/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java
> +++ b/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java
> @@ -266,10 +266,12 @@ class Osm5XmlHandler extends DefaultHandler {
>          private void startInRelation(String qName, Attributes attributes) {
>                  if (qName.equals("member")) {
>                          long id = idVal(attributes.getValue("ref"));
> -                       Element el;
> +                       Element el = null;
>                          String type = attributes.getValue("type");
> -                       if ("way".equals(type)){
> -                               el = wayMap.get(id);
> +                       if ("way".equals(type)) {
> +                               Way way = wayMap.get(id);
> +                               if(way != null)
> +                                       el = way.duplicate();
>                          } else if ("node".equals(type)) {
>                                  el = nodeMap.get(id);
>                                  if(el == null) {
>
> I just tried this patch and (just like magic) the coastline reappears.

But do you also magically get an extra unwanted polygon when the 
relation is a cascading multipolygon?

Aside from that, the multipolygon code already does duplicate the way 
before removing the tags from the original. Duplicating it again can't 
be the right solution.

..Steve
_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to