Ticket #16188: 0001-Add-support-for-crossing-of-residential-areas-with-s.patch
File 0001-Add-support-for-crossing-of-residential-areas-with-s.patch, 7.4 KB (added by , 7 years ago) |
---|
-
data/validator/geometry.mapcss
From 3b518fd8c848cd312e0fbb5633130db89fb25bc2 Mon Sep 17 00:00:00 2001 From: marxin <mliska@suse.cz> Date: Sat, 3 Mar 2018 21:40:22 +0100 Subject: [PATCH] Add support for crossing of residential areas with something. --- data/validator/geometry.mapcss | 3 +- .../openstreetmap/josm/data/validation/Test.java | 9 +++ .../josm/data/validation/tests/CrossingWays.java | 81 ++++++++++++++++++---- 3 files changed, 80 insertions(+), 13 deletions(-) diff --git a/data/validator/geometry.mapcss b/data/validator/geometry.mapcss index 971ba7cf7..9dc1831b7 100644
a b area:closed:areaStyle[tag("natural") = parent_tag("natural")] ⧉ area:closed:ar 184 184 throwWarning: tr("Overlapping Identical Natural Areas"); 185 185 } 186 186 187 area:closed:areaStyle[tag("landuse") = parent_tag("landuse")] ⧉ area:closed:areaStyle[landuse] { 187 area:closed:areaStyle[landuse!=residential][tag("landuse") = parent_tag("landuse")] ⧉ 188 area:closed:areaStyle[landuse!=residential][landuse] { 188 189 throwWarning: tr("Overlapping Identical Landuses"); 189 190 } 190 191 -
src/org/openstreetmap/josm/data/validation/Test.java
diff --git a/src/org/openstreetmap/josm/data/validation/Test.java b/src/org/openstreetmap/josm/data/validation/Test.java index 8aaf54553..d17163ea1 100644
a b public class Test implements OsmPrimitiveVisitor, Comparable<Test> { 346 346 return p.hasTagDifferent("building", "no", "entrance"); 347 347 } 348 348 349 /** 350 * Determines if the specified primitive denotes a residential area. 351 * @param p The primitive to be tested 352 * @return True if landuse key is equal to residential 353 */ 354 protected static final boolean isResidentialArea(OsmPrimitive p) { 355 return p.get("landuse") == "residential"; 356 } 357 349 358 @Override 350 359 public int hashCode() { 351 360 return Objects.hash(name, description); -
src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
diff --git a/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java b/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java index dd91a119f..d7941d809 100644
a b import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 6 import java.awt.geom.Point2D; 7 7 import java.util.ArrayList; 8 import java.util.Arrays; 8 9 import java.util.HashMap; 9 10 import java.util.List; 10 11 import java.util.Map; … … public abstract class CrossingWays extends Test { 34 35 static final String HIGHWAY = "highway"; 35 36 static final String RAILWAY = "railway"; 36 37 static final String WATERWAY = "waterway"; 38 static final String LANDUSE = "landuse"; 37 39 38 40 /** All way segments, grouped by cells */ 39 41 private final Map<Point2D, List<WaySegment>> cellSegments = new HashMap<>(1000); … … public abstract class CrossingWays extends Test { 64 66 || w.hasKey(WATERWAY) 65 67 || isRailway(w) 66 68 || isCoastline(w) 67 || isBuilding(w)); 69 || isBuilding(w) 70 || isResidentialArea(w)); 68 71 } 69 72 70 73 @Override … … public abstract class CrossingWays extends Test { 77 80 if (w1.hasKey(HIGHWAY) && w2.hasKey(HIGHWAY) && !Objects.equals(w1.get("level"), w2.get("level"))) { 78 81 return true; 79 82 } 83 if ((w1.hasKey(HIGHWAY) && isResidentialArea(w2)) 84 || (w2.hasKey(HIGHWAY) && isResidentialArea(w1))) 85 return true; 80 86 if (isSubwayOrTramOrRazed(w2)) { 81 87 return true; 82 88 } … … public abstract class CrossingWays extends Test { 90 96 return isProposedOrAbandoned(w2); 91 97 } 92 98 99 private String getWayType(Way w) { 100 if (isBuilding(w)) 101 return "building"; 102 else if (w.hasKey(HIGHWAY)) 103 return "highway"; 104 else if (isResidentialArea(w)) 105 return "residential area"; 106 else if (w.hasKey(WATERWAY)) 107 return "waterway"; 108 else 109 return "way"; 110 } 111 93 112 @Override 94 113 String createMessage(Way w1, Way w2) { 95 if (isBuilding(w1)) { 96 return tr("Crossing buildings"); 97 } else if (w1.hasKey(WATERWAY) && w2.hasKey(WATERWAY)) { 98 return tr("Crossing waterways"); 99 } else if ((w1.hasKey(HIGHWAY) && w2.hasKey(WATERWAY)) 100 || (w2.hasKey(HIGHWAY) && w1.hasKey(WATERWAY))) { 101 return tr("Crossing waterway/highway"); 102 } else { 103 return tr("Crossing ways"); 104 } 114 String[] types = { getWayType(w1), getWayType(w2) }; 115 Arrays.sort(types); 116 117 if (types[0] == types[1]) 118 switch(types[0]) { 119 case "building": 120 return tr("Crossing buildings"); 121 case "highway": 122 return tr("Crossing highways"); 123 case "residential area": 124 return tr("Crossing residential areas"); 125 case "waterway": 126 return tr("Crossing waterways"); 127 default: 128 return tr("Crossing ways"); 129 } 130 else 131 switch (types[0]) { 132 case "building": 133 switch (types[1]) { 134 case "highway": 135 return tr("Crossing building/highway"); 136 case "residential area": 137 return tr("Crossing building/residential area"); 138 case "waterway": 139 return tr("Crossing building/waterway"); 140 default: 141 return tr("Crossing building/way"); 142 } 143 case "highway": 144 switch (types[1]) { 145 case "residential area": 146 return tr("Crossing highway/residential area"); 147 case "waterway": 148 return tr("Crossing highway/waterway"); 149 default: 150 return tr("Crossing highway/way"); 151 } 152 case "residential area": 153 switch (types[1]) { 154 case "waterway": 155 return tr("Crossing residential area/waterway"); 156 default: 157 return tr("Crossing residential area/way"); 158 } 159 default: 160 return tr("Crossing residential area/waterway"); 161 } 105 162 } 106 163 } 107 164 … … public abstract class CrossingWays extends Test { 235 292 } 236 293 237 294 static boolean isCoastline(OsmPrimitive w) { 238 return w.hasTag("natural", "water", "coastline") || w.hasTag( "landuse", "reservoir");295 return w.hasTag("natural", "water", "coastline") || w.hasTag(LANDUSE, "reservoir"); 239 296 } 240 297 241 298 static boolean isHighway(OsmPrimitive w) {