Ticket #18863: 18863-detect-broken.patch
File 18863-detect-broken.patch, 3.3 KB (added by , 5 years ago) |
---|
-
src/org/openstreetmap/josm/command/SplitWayCommand.java
464 464 numberOfRelations++; 465 465 466 466 Relation c = null; 467 467 468 String type = Optional.ofNullable(r.get("type")).orElse(""); 468 469 // Known types of ordered relations. 469 470 boolean isOrderedRelation = "route".equals(type) || "multipolygon".equals(type) || "boundary".equals(type); … … 472 473 int ir = 0; 473 474 List<RelationMember> relationMembers = r.getMembers(); 474 475 for (RelationMember rm : relationMembers) { 475 if (rm. isWay() && rm.getMember() == way) {476 if (rm.getMember() == way) { 476 477 boolean insert = true; 477 478 if (relationSpecialTypes.containsKey(type) && "restriction".equals(relationSpecialTypes.get(type))) { 478 479 RelationInformation rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay); … … 492 493 if (rm.hasRole() && !nowarnroles.contains(rm.getRole())) { 493 494 warnings.add(WarningType.ROLE); 494 495 } 495 496 496 // Attempt to determine the direction the ways in the relation are ordered. 497 497 Direction direction = Direction.UNKNOWN; 498 498 if (isOrderedRelation) { … … 531 531 } else { 532 532 nextWayMemberMissing = false; 533 533 } 534 535 534 if (direction == Direction.UNKNOWN 536 535 && !previousWayMemberMissing 537 536 && !nextWayMemberMissing) { … … 541 540 // won't help in any case. 542 541 direction = Direction.IRRELEVANT; 543 542 } 543 if (direction == Direction.UNKNOWN) { 544 // check if any other complete way in the relation is connected to the way 545 // if so, the order of the relation is broken 546 for (int i = 0; i < r.getMembersCount(); i++) { 547 if (i >= ir - 1 && i <= ir + 1) 548 continue; 549 RelationMember rmTest = r.getMember(i); 550 if (rmTest.isWay() && !rmTest.getMember().isIncomplete() && 551 (way.isFirstLastNode(rmTest.getWay().firstNode()) 552 || way.isFirstLastNode(rm.getWay().lastNode()))) { 553 direction = Direction.IRRELEVANT; 554 break; 555 } 556 } 557 } 544 558 } 545 559 } else { 546 560 int k = 1;