
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