Ticket #18863: 18863-detect-broken.patch

File 18863-detect-broken.patch, 3.3 KB (added by GerdP, 5 years ago)
  • src/org/openstreetmap/josm/command/SplitWayCommand.java

     
    464464            numberOfRelations++;
    465465
    466466            Relation c = null;
     467
    467468            String type = Optional.ofNullable(r.get("type")).orElse("");
    468469            // Known types of ordered relations.
    469470            boolean isOrderedRelation = "route".equals(type) || "multipolygon".equals(type) || "boundary".equals(type);
     
    472473            int ir = 0;
    473474            List<RelationMember> relationMembers = r.getMembers();
    474475            for (RelationMember rm : relationMembers) {
    475                 if (rm.isWay() && rm.getMember() == way) {
     476                if (rm.getMember() == way) {
    476477                    boolean insert = true;
    477478                    if (relationSpecialTypes.containsKey(type) && "restriction".equals(relationSpecialTypes.get(type))) {
    478479                        RelationInformation rValue = treatAsRestriction(r, rm, c, newWays, way, changedWay);
     
    492493                        if (rm.hasRole() && !nowarnroles.contains(rm.getRole())) {
    493494                            warnings.add(WarningType.ROLE);
    494495                        }
    495 
    496496                        // Attempt to determine the direction the ways in the relation are ordered.
    497497                        Direction direction = Direction.UNKNOWN;
    498498                        if (isOrderedRelation) {
     
    531531                                } else {
    532532                                    nextWayMemberMissing = false;
    533533                                }
    534 
    535534                                if (direction == Direction.UNKNOWN
    536535                                        && !previousWayMemberMissing
    537536                                        && !nextWayMemberMissing) {
     
    541540                                    // won't help in any case.
    542541                                    direction = Direction.IRRELEVANT;
    543542                                }
     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                                }
    544558                            }
    545559                        } else {
    546560                            int k = 1;