Fix often outer of boundary ways for map creator
This commit is contained in:
parent
3cf8987b0b
commit
07286013ba
3 changed files with 17 additions and 10 deletions
|
@ -51,7 +51,7 @@ public class Boundary {
|
|||
// b node above
|
||||
Node b = a == node2 ? node : node2;
|
||||
if(latitude == a.getLatitude() || latitude == b.getLatitude()){
|
||||
latitude += 0.00001d;
|
||||
latitude += 0.00000001d;
|
||||
}
|
||||
if(latitude < a.getLatitude() || latitude > b.getLatitude()){
|
||||
return false;
|
||||
|
|
|
@ -595,8 +595,9 @@ public class IndexCreator {
|
|||
|
||||
creator.recreateOnlyBinaryFile = false;
|
||||
creator.deleteDatabaseIndexes = true;
|
||||
creator.deleteOsmDB = true;
|
||||
|
||||
creator.generateIndexes(new File("/home/victor/projects/OsmAnd/download/406/map.osm"),
|
||||
creator.generateIndexes(new File("/home/victor/projects/OsmAnd/download/410/map.osm"),
|
||||
new ConsoleProgressImplementation(1), null, MapZooms.getDefault(), null);
|
||||
// creator.generateIndexes(new File("/home/victor/projects/OsmAnd/data/osm-maps/minsk_around.osm"),
|
||||
// new ConsoleProgressImplementation(1), null, MapZooms.getDefault(), null);
|
||||
|
|
|
@ -137,7 +137,6 @@ public class IndexVectorMapCreator extends AbstractIndexPartCreator {
|
|||
if(nodeOut != null){
|
||||
log.warn("Map bug: Multipoligon contains 'inner' way point outside of 'outer' border.\n" + //$NON-NLS-1$
|
||||
"Multipolygon id : " + e.getId() + ", inner node out id : " + nodeOut.getId()); //$NON-NLS-1$
|
||||
return;
|
||||
}
|
||||
|
||||
for (List<Way> l : completedRings) {
|
||||
|
@ -167,25 +166,32 @@ public class IndexVectorMapCreator extends AbstractIndexPartCreator {
|
|||
|
||||
|
||||
private Node checkOuterWaysEncloseInnerWays(List<List<Way>> completedRings, Map<Entity, String> entities) {
|
||||
List<Way> innerWays = new ArrayList<Way>();
|
||||
List<List<Way>> innerWays = new ArrayList<List<Way>>();
|
||||
Boundary outerBoundary = new Boundary();
|
||||
Node toReturn = null;
|
||||
for(List<Way> ring : completedRings){
|
||||
boolean innerType = "inner".equals(entities.get(ring.get(0))); //$NON-NLS-1$
|
||||
if(!innerType){
|
||||
outerBoundary.getOuterWays().addAll(ring);
|
||||
} else {
|
||||
innerWays.addAll(ring);
|
||||
innerWays.add(ring);
|
||||
}
|
||||
}
|
||||
|
||||
for(Way innerWay : innerWays){
|
||||
for(Node node : innerWay.getNodes()){
|
||||
if(!outerBoundary.containsPoint(node.getLatitude(), node.getLongitude())){
|
||||
return node;
|
||||
for (List<Way> innerRing : innerWays) {
|
||||
ring: for (Way innerWay : innerRing) {
|
||||
for (Node node : innerWay.getNodes()) {
|
||||
if (!outerBoundary.containsPoint(node.getLatitude(), node.getLongitude())) {
|
||||
if (toReturn == null) {
|
||||
toReturn = node;
|
||||
}
|
||||
completedRings.remove(innerRing);
|
||||
break ring;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue