Ticket #799: CrossingWays.diff
| File CrossingWays.diff, 3.1 KB (added by , 18 years ago) |
|---|
-
CrossingWays.java
22 22 Map<Point2D,List<ExtendedSegment>> cellSegments; 23 23 /** The already detected errors */ 24 24 HashSet<WaySegment> errorSegments; 25 /** The already detected ways in error */ 26 Map<List<Way>, List<WaySegment>> ways_seen; 27 25 28 26 29 /** 27 30 * Constructor … … 38 41 { 39 42 cellSegments = new HashMap<Point2D,List<ExtendedSegment>>(1000); 40 43 errorSegments = new HashSet<WaySegment>(); 44 ways_seen = new HashMap<List<Way>, List<WaySegment>>(50); 45 41 46 } 42 47 43 48 @Override … … 45 50 { 46 51 cellSegments = null; 47 52 errorSegments = null; 53 ways_seen = null; 48 54 } 49 55 50 56 @Override … … 57 63 boolean isCoastline1 = coastline1 != null && (coastline1.equals("water") || coastline1.equals("coastline")); 58 64 String railway1 = w.get("railway"); 59 65 boolean isSubway1 = railway1 != null && railway1.equals("subway"); 60 if( w.get("highway") == null && w.get("waterway") == null && !isSubway1&& !isCoastline1)66 if( w.get("highway") == null && w.get("waterway") == null && (railway1 == null || isSubway1) && !isCoastline1) 61 67 return; 62 68 63 69 String layer1 = w.get("layer"); … … 71 77 { 72 78 for( ExtendedSegment es2 : segments) 73 79 { 74 if (errorSegments.contains(ws) && errorSegments.contains(es2.ws)) 80 List<Way> prims; 81 List<WaySegment> highlight; 82 83 if (errorSegments.contains(ws) && errorSegments.contains(es2.ws)) 75 84 continue; 76 85 77 86 String layer2 = es2.layer; 78 87 String railway2 = es2.railway; 79 88 String coastline2 = es2.coastline; 80 if (layer1 == null ? layer2 != null : !layer1.equals(layer2))89 if (layer1 == null ? layer2 != null : !layer1.equals(layer2)) 81 90 continue; 82 91 83 92 if( !es1.intersects(es2) ) continue; 84 if( isSubway1 && "subway".equals(railway2)) continue;93 if( isSubway1 && "subway".equals(railway2)) continue; 85 94 86 95 boolean isCoastline2 = coastline2 != null && (coastline2.equals("water") || coastline2.equals("coastline")); 87 96 if( isCoastline1 != isCoastline2 ) continue; 88 97 89 errors.add(new TestError(this, Severity.WARNING, tr("Crossing ways"), 90 Arrays.asList(es1.ws.way, es2.ws.way), 91 Arrays.asList(es1.ws, es2.ws))); 98 prims = Arrays.asList(es1.ws.way, es2.ws.way); 99 if ((highlight = ways_seen.get(prims)) == null) 100 { 101 102 highlight = new ArrayList<WaySegment>(); 103 highlight.add(es1.ws); 104 highlight.add(es2.ws); 105 106 errors.add(new TestError(this, Severity.WARNING, tr("Crossing ways"), 107 prims, 108 highlight )); 109 ways_seen.put(prims, highlight); 110 } 111 else 112 { 113 highlight.add(es1.ws); 114 highlight.add(es2.ws); 115 } 92 116 } 93 117 segments.add(es1); 94 118 }
