Changeset 15704 in josm for trunk


Ignore:
Timestamp:
2020-01-13T23:28:16+01:00 (5 years ago)
Author:
GerdP
Message:

fix #9836: crossing barrier and highway is not reported (regressin of r6581)

  • detect crossings between barrier/building, barrier/highway, barrier/railway, and barrier/waterway
  • remove CrossingWays.Barrier class and add check barrier in standard test CrossingWays.Ways
Location:
trunk
Files:
3 edited

Legend:

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

    r15603 r15704  
    118118        CrossingWays.Ways.class, // ID  601 ..  699
    119119        CrossingWays.Boundaries.class, // ID  601 ..  699
    120         CrossingWays.Barrier.class, // ID  601 ..  699
    121120        CrossingWays.SelfCrossing.class, // ID  601 ..  699
    122121        SimilarNamedWays.class, // ID  701 ..  799
  • trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java

    r15691 r15704  
    3535public abstract class CrossingWays extends Test {
    3636
     37    static final String BARRIER = "barrier";
    3738    static final String HIGHWAY = "highway";
    3839    static final String RAILWAY = "railway";
     
    5455     */
    5556    private enum WayType {
    56         BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
     57        BARRIER, BUILDING, HIGHWAY, RAILWAY, RESIDENTIAL_AREA, WATERWAY, WAY;
    5758
    5859        static WayType of(Way w) {
     60            if (w.hasKey(CrossingWays.BARRIER))
     61                return BARRIER;
    5962            if (isBuilding(w))
    6063                return BUILDING;
     
    102105                    || isCoastline(w)
    103106                    || isBuilding(w)
     107                    || w.hasKey(BARRIER)
    104108                    || isResidentialArea(w));
    105109        }
     
    115119                return true;
    116120            }
    117             if ((w1.hasKey(HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2))
    118              || (w2.hasKey(HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1)))
     121            if ((w1.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w2))
     122             || (w2.hasKey(BARRIER, HIGHWAY, RAILWAY, WATERWAY) && isResidentialArea(w1)))
    119123                return true;
    120124            if (isSubwayOrTramOrRazed(w2)) {
     
    137141
    138142            if (types[0] == types[1]) {
    139                 switch(types[0]) {
    140                     case BUILDING:
    141                         return new MessageHelper(tr("Crossing buildings"), 610);
    142                     case HIGHWAY:
    143                         return new MessageHelper(tr("Crossing highways"), 620);
    144                     case RAILWAY:
    145                         return new MessageHelper(tr("Crossing railways"), 630);
    146                     case RESIDENTIAL_AREA:
    147                         return new MessageHelper(tr("Crossing residential areas"), 640);
    148                     case WATERWAY:
    149                         return new MessageHelper(tr("Crossing waterways"), 650);
    150                     case WAY:
    151                     default:
    152                         return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS);
     143                switch (types[0]) {
     144                case BARRIER:
     145                    return new MessageHelper(tr("Crossing barriers"), 603);
     146                case BUILDING:
     147                    return new MessageHelper(tr("Crossing buildings"), 610);
     148                case HIGHWAY:
     149                    return new MessageHelper(tr("Crossing highways"), 620);
     150                case RAILWAY:
     151                    return new MessageHelper(tr("Crossing railways"), 630);
     152                case RESIDENTIAL_AREA:
     153                    return new MessageHelper(tr("Crossing residential areas"), 640);
     154                case WATERWAY:
     155                    return new MessageHelper(tr("Crossing waterways"), 650);
     156                case WAY:
     157                default:
     158                    return new MessageHelper(tr("Crossing ways"), CROSSING_WAYS);
    153159                }
    154160            } else {
    155161                switch (types[0]) {
     162                case BARRIER:
     163                    switch (types[1]) {
    156164                    case BUILDING:
    157                         switch (types[1]) {
    158                             case HIGHWAY:
    159                                 return new MessageHelper(tr("Crossing building/highway"), 612);
    160                             case RAILWAY:
    161                                 return new MessageHelper(tr("Crossing building/railway"), 613);
    162                             case RESIDENTIAL_AREA:
    163                                 return new MessageHelper(tr("Crossing building/residential area"), 614);
    164                             case WATERWAY:
    165                                 return new MessageHelper(tr("Crossing building/waterway"), 615);
    166                             case WAY:
    167                             default:
    168                                 return new MessageHelper(tr("Crossing building/way"), 611);
    169                         }
     165                        return new MessageHelper(tr("Crossing barrier/building"), 661);
    170166                    case HIGHWAY:
    171                         switch (types[1]) {
    172                             case RAILWAY:
    173                                 return new MessageHelper(tr("Crossing highway/railway"), 622);
    174                             case WATERWAY:
    175                                 return new MessageHelper(tr("Crossing highway/waterway"), 623);
    176                             case WAY:
    177                             default:
    178                                 return new MessageHelper(tr("Crossing highway/way"), 621);
    179                         }
     167                        return new MessageHelper(tr("Crossing barrier/highway"), 662);
    180168                    case RAILWAY:
    181                         switch (types[1]) {
    182                             case WATERWAY:
    183                                 return new MessageHelper(tr("Crossing railway/waterway"), 632);
    184                             case WAY:
    185                             default:
    186                                 return new MessageHelper(tr("Crossing railway/way"), 631);
    187                         }
     169                        return new MessageHelper(tr("Crossing barrier/railway"), 663);
     170                    case WATERWAY:
     171                        return new MessageHelper(tr("Crossing barrier/waterway"), 664);
     172                    case WAY:
     173                    default:
     174                        return new MessageHelper(tr("Crossing barrier/way"), 665);
     175                    }
     176                case BUILDING:
     177                    switch (types[1]) {
     178                    case HIGHWAY:
     179                        return new MessageHelper(tr("Crossing building/highway"), 612);
     180                    case RAILWAY:
     181                        return new MessageHelper(tr("Crossing building/railway"), 613);
    188182                    case RESIDENTIAL_AREA:
    189                         switch (types[1]) {
    190                             case WAY:
    191                             default:
    192                                 return new MessageHelper(tr("Crossing residential area/way"), 641);
    193                         }
     183                        return new MessageHelper(tr("Crossing building/residential area"), 614);
    194184                    case WATERWAY:
     185                        return new MessageHelper(tr("Crossing building/waterway"), 615);
     186                    case WAY:
    195187                    default:
    196                         return new MessageHelper(tr("Crossing waterway/way"), 651);
     188                        return new MessageHelper(tr("Crossing building/way"), 611);
     189                    }
     190                case HIGHWAY:
     191                    switch (types[1]) {
     192                    case RAILWAY:
     193                        return new MessageHelper(tr("Crossing highway/railway"), 622);
     194                    case WATERWAY:
     195                        return new MessageHelper(tr("Crossing highway/waterway"), 623);
     196                    case WAY:
     197                    default:
     198                        return new MessageHelper(tr("Crossing highway/way"), 621);
     199                    }
     200                case RAILWAY:
     201                    switch (types[1]) {
     202                    case WATERWAY:
     203                        return new MessageHelper(tr("Crossing railway/waterway"), 632);
     204                    case WAY:
     205                    default:
     206                        return new MessageHelper(tr("Crossing railway/way"), 631);
     207                    }
     208                case RESIDENTIAL_AREA:
     209                    switch (types[1]) {
     210                    case WAY:
     211                    default:
     212                        return new MessageHelper(tr("Crossing residential area/way"), 641);
     213                    }
     214                case WATERWAY:
     215                default:
     216                    return new MessageHelper(tr("Crossing waterway/way"), 651);
    197217                }
    198218            }
     
    258278
    259279    /**
    260      * Crossing barriers ways test.
    261      */
    262     public static class Barrier extends CrossingWays {
    263 
    264         protected static final int CROSSING_BARRIERS = 603;
    265 
    266         /**
    267          * Constructs a new crossing {@code Barrier} test.
    268          */
    269         public Barrier() {
    270             super(tr("Crossing barriers"), CROSSING_BARRIERS);
    271         }
    272 
    273         @Override
    274         public boolean isPrimitiveUsable(OsmPrimitive p) {
    275             return super.isPrimitiveUsable(p) && p.hasKey("barrier");
    276         }
    277 
    278         @Override
    279         boolean ignoreWaySegmentCombination(Way w1, Way w2) {
    280             return areLayerOrLevelDifferent(w1, w2);
    281         }
    282     }
    283 
    284     /**
    285280     * Self crossing ways test (for all the rest)
    286281     */
     
    290285
    291286        CrossingWays.Ways normalTest = new Ways();
    292         CrossingWays.Barrier barrierTest = new Barrier();
    293287        CrossingWays.Boundaries boundariesTest = new Boundaries();
    294288
     
    302296        @Override
    303297        public boolean isPrimitiveUsable(OsmPrimitive p) {
    304             return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p) || barrierTest.isPrimitiveUsable(p)
     298            return super.isPrimitiveUsable(p) && !(normalTest.isPrimitiveUsable(p)
    305299                    || boundariesTest.isPrimitiveUsable(p));
    306300        }
  • trunk/test/unit/org/openstreetmap/josm/data/validation/tests/CrossingWaysTest.java

    r14813 r15704  
    1717import org.openstreetmap.josm.data.osm.Way;
    1818import org.openstreetmap.josm.data.osm.WaySegment;
    19 import org.openstreetmap.josm.data.validation.tests.CrossingWays.Barrier;
    2019import org.openstreetmap.josm.data.validation.tests.CrossingWays.Boundaries;
    2120import org.openstreetmap.josm.data.validation.tests.CrossingWays.SelfCrossing;
     
    144143        testMessage(650, test, "waterway=river", "waterway=river");
    145144        testMessage(651, test, "waterway=river", "amenity=restaurant");
     145        testMessage(603, test, "barrier=hedge", "barrier=yes");
     146        testMessage(661, test, "barrier=hedge", "building=yes");
     147        testMessage(662, test, "barrier=hedge", "highway=road");
     148        testMessage(663, test, "barrier=hedge", "railway=rail");
     149        testMessage(664, test, "barrier=hedge", "waterway=river");
     150
     151        assertFalse(test.isPrimitiveUsable(newUsableWay("amenity=restaurant")));
     152        assertFalse(test.isPrimitiveUsable(TestUtils.newWay("barrier=yes"))); // Unusable (0 node)
     153        assertTrue(test.isPrimitiveUsable(newUsableWay("barrier=yes"))); // Usable (2 nodes)
     154
    146155    }
    147156
     
    161170
    162171    /**
    163      * Unit test of {@link CrossingWays.Barrier}
    164      */
    165     @Test
    166     public void testBarrier() {
    167         Barrier test = new CrossingWays.Barrier();
    168         // isPrimitiveUsable
    169         assertFalse(test.isPrimitiveUsable(newUsableWay("amenity=restaurant")));
    170         assertFalse(test.isPrimitiveUsable(TestUtils.newWay("barrier=yes"))); // Unusable (0 node)
    171         assertTrue(test.isPrimitiveUsable(newUsableWay("barrier=yes"))); // Usable (2 nodes)
    172     }
    173 
    174     /**
    175172     * Unit test of {@link CrossingWays.SelfCrossing}
    176173     */
Note: See TracChangeset for help on using the changeset viewer.