Changeset 12986 in josm


Ignore:
Timestamp:
2017-10-11T20:42:06+02:00 (8 days ago)
Author:
Don-vip
Message:

fix #14132 - MapCSS crossing operator must check layer attribute first

Location:
trunk/src/org/openstreetmap/josm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/OsmUtils.java

    r12187 r12986  
    139139        return p;
    140140    }
     141
     142    /**
     143     * Returns the layer value of primitive (null for layer 0).
     144     * @param w OSM primitive
     145     * @return the value of "layer" key, or null if absent or set to 0 (default value)
     146     * @since 12986
     147     */
     148    public static String getLayer(OsmPrimitive w) {
     149        String layer1 = w.get("layer");
     150        if ("0".equals(layer1)) {
     151            layer1 = null; // 0 is default value for layer.
     152        }
     153        return layer1;
     154    }
    141155}
  • trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java

    r12958 r12986  
    1313import org.openstreetmap.josm.data.coor.EastNorth;
    1414import org.openstreetmap.josm.data.osm.OsmPrimitive;
     15import org.openstreetmap.josm.data.osm.OsmUtils;
    1516import org.openstreetmap.josm.data.osm.Relation;
    1617import org.openstreetmap.josm.data.osm.Way;
     
    7172            if (w1 == w2)
    7273                return false;
    73             if (!Objects.equals(getLayer(w1), getLayer(w2))) {
     74            if (!Objects.equals(OsmUtils.getLayer(w1), OsmUtils.getLayer(w2))) {
    7475                return true;
    7576            }
     
    164165        @Override
    165166        boolean ignoreWaySegmentCombination(Way w1, Way w2) {
    166             return !Objects.equals(getLayer(w1), getLayer(w2));
     167            return !Objects.equals(OsmUtils.getLayer(w1), OsmUtils.getLayer(w2));
    167168        }
    168169
     
    232233        cellSegments.clear();
    233234        seenWays.clear();
    234     }
    235 
    236     static String getLayer(OsmPrimitive w) {
    237         String layer1 = w.get("layer");
    238         if ("0".equals(layer1)) {
    239             layer1 = null; // 0 is default value for layer.
    240         }
    241         return layer1;
    242235    }
    243236
  • trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java

    r12809 r12986  
    88import java.util.List;
    99import java.util.NoSuchElementException;
     10import java.util.Objects;
    1011import java.util.Set;
    1112import java.util.function.IntFunction;
     
    1617import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1718import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     19import org.openstreetmap.josm.data.osm.OsmUtils;
    1820import org.openstreetmap.josm.data.osm.Relation;
    1921import org.openstreetmap.josm.data.osm.RelationMember;
     
    258260
    259261        private final class CrossingFinder extends AbstractFinder {
     262
     263            private final String layer;
     264
    260265            private CrossingFinder(Environment e) {
    261266                super(e);
    262267                CheckParameterUtil.ensureThat(e.osm instanceof Way, "Only ways are supported");
     268                layer = OsmUtils.getLayer(e.osm);
    263269            }
    264270
    265271            @Override
    266272            public void visit(Way w) {
    267                 if (e.child == null && left.matches(new Environment(w).withParent(e.osm))
     273                if (e.child == null && Objects.equals(layer, OsmUtils.getLayer(w))
     274                    && left.matches(new Environment(w).withParent(e.osm))
    268275                    && e.osm instanceof Way && Geometry.PolygonIntersection.CROSSING.equals(
    269276                            Geometry.polygonIntersection(w.getNodes(), ((Way) e.osm).getNodes()))) {
Note: See TracChangeset for help on using the changeset viewer.