Hi Felix,
Please try the attached patch, hopefully it will stop the flooding.
Mark
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 f78b1f9..f7aba49 100644
--- a/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java
+++ b/src/uk/me/parabola/mkgmap/reader/osm/xml/Osm5XmlHandler.java
@@ -115,6 +115,7 @@ public class Osm5XmlHandler extends DefaultHandler {
private boolean generateSeaUsingMP = true;
private boolean allowSeaSectors = true;
private boolean extendSeaSectors;
+ private boolean roadsReachBoundary;
private int maxCoastlineGap;
private String[] landTag = { "natural", "land" };
private final Double minimumArcLength;
@@ -618,10 +619,12 @@ public class Osm5XmlHandler extends DefaultHandler {
coordMap = null;
+ if(bbox != null && (generateSea || minimumArcLength != null))
+ makeBoundaryNodes();
+
if (generateSea)
generateSeaPolygon(shoreline);
- long start = System.currentTimeMillis();
for (Relation r : relationMap.values())
converter.convertRelation(r);
@@ -630,11 +633,8 @@ public class Osm5XmlHandler extends DefaultHandler {
nodeMap = null;
- if(minimumArcLength != null) {
- if(bbox != null)
- makeBoundaryNodes();
+ if(minimumArcLength != null)
removeShortArcsByMergingNodes(minimumArcLength);
- }
nodeIdMap = null;
@@ -691,7 +691,8 @@ public class Osm5XmlHandler extends DefaultHandler {
// highway count one
clippedPair[1].incHighwayCount();
++numBoundaryNodesAdded;
-
+ if(!roadsReachBoundary && way.getTag("highway") != null)
+ roadsReachBoundary = true;
}
else if(clippedPair[1].getOnBoundary())
++numBoundaryNodesDetected;
@@ -712,6 +713,8 @@ public class Osm5XmlHandler extends DefaultHandler {
// highway count one
clippedPair[0].incHighwayCount();
++numBoundaryNodesAdded;
+ if(!roadsReachBoundary && way.getTag("highway") != null)
+ roadsReachBoundary = true;
}
else if(clippedPair[0].getOnBoundary())
++numBoundaryNodesDetected;
@@ -1187,6 +1190,7 @@ public class Osm5XmlHandler extends DefaultHandler {
// the remaining shoreline segments should intersect the boundary
// find the intersection points and store them in a SortedMap
SortedMap<EdgeHit, Way> hitMap = new TreeMap<EdgeHit, Way>();
+ boolean shorelineReachesBoundary = false;
long seaId;
Way sea;
for (Way w : shoreline) {
@@ -1343,6 +1347,13 @@ public class Osm5XmlHandler extends DefaultHandler {
w.getPoints().add(w.getPoints().get(0));
log.info("adding non-island landmass, hits.size()=" + hits.size());
islands.add(w);
+ shorelineReachesBoundary = true;
+ }
+
+ if(!shorelineReachesBoundary && roadsReachBoundary) {
+ // try to avoid tiles being flooded by anti-lakes or other
+ // bogus uses of natural=coastline
+ generateSeaBackground = false;
}
List<Way> antiIslands = new ArrayList<Way>();
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev