Changeset 19162 in josm


Ignore:
Timestamp:
2024-08-05T18:16:46+02:00 (4 months ago)
Author:
taylor.smock
Message:

Fix #21333: Extend SharpAngles test to railways

Location:
trunk
Files:
2 edited

Legend:

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

    r18619 r19162  
    66import java.util.Arrays;
    77import java.util.Collection;
     8import java.util.Collections;
    89import java.util.TreeSet;
    910
     
    1718import org.openstreetmap.josm.data.validation.Test;
    1819import org.openstreetmap.josm.data.validation.TestError;
     20import org.openstreetmap.josm.gui.progress.ProgressMonitor;
     21import org.openstreetmap.josm.spi.preferences.Config;
    1922import org.openstreetmap.josm.tools.Geometry;
    2023import org.openstreetmap.josm.tools.bugreport.BugReport;
     
    2831    private static final int SHARPANGLESCODE = 3800;
    2932    /** The code for a sharp angle */
    30     private static final int SHARP_ANGLES = SHARPANGLESCODE + 0;
    31     /** The maximum angle for sharp angles */
    32     private double maxAngle = 45.0; // degrees
    33     /** The length that at least one way segment must be shorter than */
    34     private double maxLength = 10.0; // meters
     33    private static final int SHARP_ANGLES = SHARPANGLESCODE;
     34    /** The maximum angle for sharp angles (degrees) */
     35    private double maxAngle;
     36    /** The length that at least one way segment must be shorter than (meters) */
     37    private double maxLength;
    3538    /** Specific highway types to ignore */
    36     private final Collection<String> ignoreHighways = new TreeSet<>(
    37             Arrays.asList("platform", "rest_area", "services", "via_ferrata"));
     39    private Collection<String> ignoreHighways = Collections.emptyList();
     40    /** Specific railway types to ignore */
     41    private Collection<String> ignoreRailway = Collections.emptyList();
    3842
    3943    /**
     
    4145     */
    4246    public SharpAngles() {
    43         super(tr("Sharp angles"), tr("Check for sharp angles on roads"));
     47        super(tr("Sharp angles"), tr("Check for sharp angles on man made transportation ways"));
     48    }
     49
     50    @Override
     51    public void startTest(ProgressMonitor progressMonitor) {
     52        super.startTest(progressMonitor);
     53        this.maxLength = Config.getPref().getDouble("validator.sharpangles.maxlength", 10.0); // meters
     54        this.maxAngle = Config.getPref().getDouble("validator.sharpangles.maxangle", 45.0); // degrees
     55        this.ignoreRailway = Collections.unmodifiableCollection(new TreeSet<>(
     56                Config.getPref().getList("validator.sharpangles.ignorerailway",
     57                        Arrays.asList("crossing_box", "loading_ramp", "platform", "roundhouse", "signal_box", "station",
     58                                "traverser", "wash", "workshop"))));
     59        // TODO make immutable when addIgnoredHighway is removed
     60        this.ignoreHighways = new TreeSet<>(
     61                Config.getPref().getList("validator.sharpangles.ignorehighway",
     62                        Arrays.asList("platform", "rest_area", "services", "via_ferrata"))
     63        );
    4464    }
    4565
     
    5777
    5878    /**
    59      * Check whether or not a way should be checked for sharp angles
     79     * Check whether a way should be checked for sharp angles
    6080     * @param way The way that needs to be checked
    6181     * @return {@code true} if the way should be checked.
    6282     */
    6383    public boolean shouldBeTestedForSharpAngles(Way way) {
    64         return (way.hasKey("highway") && !way.hasTag("area", "yes") && !way.hasKey("via_ferrata_scale") &&
    65                 !ignoreHighways.contains(way.get("highway")));
     84        return !way.hasTag("area", "yes") &&
     85                ((way.hasKey("highway") && !way.hasKey("via_ferrata_scale") && !ignoreHighways.contains(way.get("highway")))
     86                    || (way.hasKey("railway") && !ignoreRailway.contains(way.get("railway"))));
    6687    }
    6788
     
    144165     * Add a highway to ignore
    145166     * @param highway The highway type to ignore (e.g., if you want to ignore residential roads, use "residential")
     167     * @since 19162 (deprecated)
     168     * @deprecated Not known to be used. Please use config preference "validator.sharpangles.ignorehighway" instead.
    146169     */
     170    @Deprecated(since = "19162", forRemoval = true)
    147171    public void addIgnoredHighway(String highway) {
     172        // Don't forget to make ignoreHighways immutable when this method is removed
    148173        ignoreHighways.add(highway);
    149174    }
  • trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SharpAnglesTest.java

    r18853 r19162  
    1818import org.openstreetmap.josm.data.osm.Node;
    1919import org.openstreetmap.josm.data.osm.Way;
     20import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
    2021import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
    2122import org.openstreetmap.josm.testutils.annotations.Projection;
     
    3738        angles = new SharpAngles();
    3839        angles.initialize();
     40        angles.startTest(NullProgressMonitor.INSTANCE);
    3941    }
    4042
Note: See TracChangeset for help on using the changeset viewer.