Ignore:
Timestamp:
2013-12-31T10:56:23+01:00 (10 years ago)
Author:
simon04
Message:

fix #9043 - Validator: Verify links on highways

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java

    r6482 r6573  
    2222import org.openstreetmap.josm.data.validation.Test;
    2323import org.openstreetmap.josm.data.validation.TestError;
     24import org.openstreetmap.josm.tools.Predicate;
    2425import org.openstreetmap.josm.tools.Utils;
    2526
     
    3637    protected static final int SOURCE_MAXSPEED_CONTEXT_MISMATCH_VS_MAXSPEED = 2705;
    3738    protected static final int SOURCE_MAXSPEED_CONTEXT_MISMATCH_VS_HIGHWAY = 2706;
     39    protected static final int SOURCE_WRONG_LINK = 2707;
    3840
    3941    /**
     
    104106                testSourceMaxspeed(w, true);
    105107            }
     108            testHighwayLink(w);
    106109        }
    107110    }
     
    140143    }
    141144
     145    public static boolean isHighwayLinkOkay(final Way way) {
     146        final String highway = way.get("highway");
     147        if (highway == null || !highway.endsWith("_link")) {
     148            return true;
     149        }
     150
     151        final HashSet<OsmPrimitive> referrers = new HashSet<OsmPrimitive>();
     152        referrers.addAll(way.firstNode().getReferrers());
     153        referrers.addAll(way.lastNode().getReferrers());
     154
     155        return Utils.exists(Utils.filteredCollection(referrers, Way.class), new Predicate<Way>() {
     156            @Override
     157            public boolean evaluate(final Way otherWay) {
     158                return !way.equals(otherWay) && otherWay.hasTag("highway", highway, highway.replaceAll("_link$", ""));
     159            }
     160        });
     161    }
     162
     163    private void testHighwayLink(final Way way) {
     164        if (!isHighwayLinkOkay(way)) {
     165            errors.add(new TestError(this, Severity.WARNING,
     166                    tr("Highway link is not linked to adequate highway/link"), SOURCE_WRONG_LINK, way));
     167        }
     168    }
     169
    142170    private void testMissingPedestrianCrossing(Node n) {
    143171        leftByPedestrians = false;
Note: See TracChangeset for help on using the changeset viewer.