Changeset 8510 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
- Timestamp:
- 2015-06-20T23:42:21+02:00 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
r8470 r8510 35 35 public final Map<Integer, Set<Node>> ways = new TreeMap<>(); 36 36 public final boolean oneWay; 37 public NodesWays(boolean oneWay){ 37 38 public NodesWays(boolean oneWay) { 38 39 this.oneWay = oneWay; 39 40 } … … 62 63 63 64 public static Node firstOnewayNode(RelationMember m) { 64 if (!m.isWay()) return null;65 if ("backward".equals(m.getRole())) {65 if (!m.isWay()) return null; 66 if ("backward".equals(m.getRole())) { 66 67 return m.getWay().lastNode(); 67 68 } … … 70 71 71 72 public static Node lastOnewayNode(RelationMember m) { 72 if (!m.isWay()) return null;73 if ("backward".equals(m.getRole())) {73 if (!m.isWay()) return null; 74 if ("backward".equals(m.getRole())) { 74 75 return m.getWay().firstNode(); 75 76 } … … 90 91 addPair(nd, i); 91 92 } 92 } else if (RelationSortUtils.isOneway(m)) {93 } else if (RelationSortUtils.isOneway(m)) { 93 94 addNodeWayMap(firstOnewayNode(m), i); 94 95 addWayNodeMap(lastOnewayNode(m), i); … … 180 181 if (firstOneway != null) return popForwardOnewayPart(way); 181 182 182 if (map.ways.containsKey(way)) {183 if (map.ways.containsKey(way)) { 183 184 for (Node n : map.ways.get(way)) { 184 185 Integer i = deleteAndGetAdjacentNode(map, n); 185 if (i != null) return i;186 if (i != null) return i; 186 187 187 188 Integer j = deleteAndGetAdjacentNode(onewayMap, n); 188 if (j != null) {189 if (j != null) { 189 190 firstOneway = j; 190 191 return j; … … 198 199 199 200 private Integer popForwardOnewayPart(Integer way) { 200 if (onewayMap.ways.containsKey(way)) {201 if (onewayMap.ways.containsKey(way)) { 201 202 for (Node n : onewayMap.ways.get(way)) { 202 203 Integer i = findAdjacentWay(onewayMap, n); 203 if (i == null) {204 if (i == null) { 204 205 continue; 205 206 } 206 207 207 208 lastOnewayNode = processBackwardIfEndOfLoopReached(i); 208 if (lastOnewayNode != null)209 if (lastOnewayNode != null) 209 210 return popBackwardOnewayPart(firstOneway); 210 211 … … 221 222 if (onewayReverseMap.ways.containsKey(way)) { 222 223 for (Node n : onewayReverseMap.ways.get(way)) { 223 if ((map.nodes.containsKey(n))224 if ((map.nodes.containsKey(n)) 224 225 || (onewayMap.nodes.containsKey(n) && onewayMap.nodes.get(n).size() > 1)) 225 226 return n; 226 if (firstCircular != null && firstCircular == n)227 if (firstCircular != null && firstCircular == n) 227 228 return firstCircular; 228 229 } … … 231 232 } 232 233 233 private Integer popBackwardOnewayPart(int way) {234 private Integer popBackwardOnewayPart(int way) { 234 235 if (lastOnewayNode != null) { 235 236 Set<Node> nodes = new TreeSet<>(); … … 241 242 } 242 243 for (Node n : nodes) { 243 if (n == lastOnewayNode) { //if oneway part ends244 if (n == lastOnewayNode) { //if oneway part ends 244 245 firstOneway = null; 245 246 lastOnewayNode = null; 246 247 Integer j = deleteAndGetAdjacentNode(map, n); 247 if (j != null) return j;248 if (j != null) return j; 248 249 249 250 Integer k = deleteAndGetAdjacentNode(onewayMap, n); 250 if (k != null) {251 if (k != null) { 251 252 firstOneway = k; 252 253 return k; … … 255 256 256 257 Integer j = deleteAndGetAdjacentNode(onewayReverseMap, n); 257 if (j != null) return j;258 if (j != null) return j; 258 259 } 259 260 } … … 273 274 private Integer deleteAndGetAdjacentNode(NodesWays nw, Node n) { 274 275 Integer j = findAdjacentWay(nw, n); 275 if (j == null) return null;276 if (j == null) return null; 276 277 deleteWayNode(nw, j, n); 277 278 return j; … … 285 286 286 287 private void deleteWayNode(NodesWays nw, Integer way, Node n) { 287 if (nw.oneWay) {288 if (nw.oneWay) { 288 289 doneOneway(way); 289 290 } else { … … 298 299 */ 299 300 public Integer pop() { 300 if (!remaining.isEmpty()) {301 if (!remaining.isEmpty()) { 301 302 Integer i = remaining.iterator().next(); 302 303 done(i); … … 305 306 306 307 if (remainingOneway.isEmpty()) return null; 307 for (Integer i :remainingOneway.keySet()){ //find oneway, which is connected to more than one way (is between two oneway loops)308 for (Node n : onewayReverseMap.ways.get(i)){309 if (onewayReverseMap.nodes.containsKey(n) && onewayReverseMap.nodes.get(n).size() > 1) {308 for (Integer i :remainingOneway.keySet()) { //find oneway, which is connected to more than one way (is between two oneway loops) 309 for (Node n : onewayReverseMap.ways.get(i)) { 310 if (onewayReverseMap.nodes.containsKey(n) && onewayReverseMap.nodes.get(n).size() > 1) { 310 311 doneOneway(i); 311 312 firstCircular = n; … … 327 328 Set<Node> nodesForward = remainingOneway.get(i); 328 329 for (Node n : nodesForward) { 329 if (onewayMap.nodes.containsKey(n)) {330 if (onewayMap.nodes.containsKey(n)) { 330 331 onewayMap.nodes.get(n).remove(i); 331 332 } 332 if (onewayReverseMap.nodes.containsKey(n)) {333 if (onewayReverseMap.nodes.containsKey(n)) { 333 334 onewayReverseMap.nodes.get(n).remove(i); 334 335 }
Note:
See TracChangeset
for help on using the changeset viewer.