Changeset 32783 in osm for applications/editors


Ignore:
Timestamp:
2016-08-08T18:48:10+02:00 (8 years ago)
Author:
xamanu
Message:

Stop area relation validation tests added

Location:
applications/editors/josm/plugins/pt_assistant
Files:
9 added
5 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/ProceedDialog.java

    r32540 r32783  
    6060
    6161                radioButtonFixAutomatically = new JRadioButton("Fix all errors automatically and proceed");
    62                 radioButtonFixManually = new JRadioButton("I will fix the erros manually and click the button to proceed");
     62                radioButtonFixManually = new JRadioButton("I will fix the errors manually and click the button to proceed");
    6363                radioButtonDontFix = new JRadioButton("Do not fix anything and proceed with further tests", true);
    6464                ButtonGroup fixOptionButtonGroup = new ButtonGroup();
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/NodeChecker.java

    r32650 r32783  
    66import java.util.ArrayList;
    77import java.util.List;
     8import java.util.Set;
     9import java.util.LinkedList;
     10import java.util.Collection;
     11import java.util.HashMap;
     12import java.util.Collections;
    813
    914import javax.swing.JOptionPane;
     
    1823import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    1924import org.openstreetmap.josm.data.osm.Way;
     25import org.openstreetmap.josm.data.osm.Relation;
     26import org.openstreetmap.josm.data.osm.RelationMember;
    2027import org.openstreetmap.josm.data.validation.Severity;
    2128import org.openstreetmap.josm.data.validation.Test;
    2229import org.openstreetmap.josm.data.validation.TestError;
    2330import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
     31import org.openstreetmap.josm.plugins.pt_assistant.utils.StopUtils;
    2432
    2533public class NodeChecker extends Checker {
     
    8189                }
    8290        }
     91       
     92        /**
     93         * Checks if the given stop_position node belongs to any stop_area relation
     94         *
     95         * @param n
     96         */
     97        protected void performNodePartOfStopAreaTest() {
     98                               
     99                if (!StopUtils.verifyIfMemberOfStopArea(node)) {
     100               
     101                        List<OsmPrimitive> primitives = new ArrayList<>(1);
     102                        primitives.add(node);
     103                        TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop position or platform is not part of a stop area relation"),
     104                                        PTAssistantValidatorTest.ERROR_CODE_NODE_PART_OF_STOP_AREA, primitives);
     105                        errors.add(e);
     106                }
     107        }
     108       
     109        /**
     110         * Checks if the given stop_position belongs to the same route relations as it's related platform(s).    *
     111         * @param n
     112         */
     113        protected void performStopPositionComparePlatformRelations() {
     114
     115                HashMap<Long, Long> stopPositionRelationIds = new HashMap<>();
     116                HashMap<Long, Long> platformRelationIds = new HashMap<>();
     117
     118                // Loop through all referrer relations
     119                for (Relation referrer : OsmPrimitive.getFilteredList(node.getReferrers(), Relation.class)) {
     120
     121                        // Create list of relations the stop position belongs to
     122                        if (referrer.get("type") == "route") {
     123                                stopPositionRelationIds.put(referrer.getId(), referrer.getId());
     124                        }
     125                       
     126                        // Create list of relations the related platform(s) belongs to
     127                        else if (referrer.get("public_transport") == "stop_area") {
     128                                for (RelationMember stopAreaMember : referrer.getMembers()) {
     129                                        Node stopAreaMemberFoo = stopAreaMember.getNode();
     130                                        if (stopAreaMemberFoo.get("public_transport") == "platform") {
     131                                                for (Relation stopAreaMemberReferrer : OsmPrimitive.getFilteredList(stopAreaMemberFoo.getReferrers(), Relation.class)) {
     132                                                        if (stopAreaMemberReferrer.get("type") == "route") {
     133                                                                platformRelationIds.put(stopAreaMemberReferrer.getId(), stopAreaMemberReferrer.getId());
     134                                                        }
     135                                                }
     136                                        }
     137                                }
     138                        }
     139                }
     140
     141                // Check if route relation lists are identical
     142                if (stopPositionRelationIds.equals(platformRelationIds)) {
     143                        return;
     144                }
     145               
     146                List<OsmPrimitive> primitives = new ArrayList<>(1);
     147                primitives.add(node);
     148                TestError e = new TestError(this.test, Severity.WARNING, tr("PT: Stop position and it's related platform(s) have different route relations"),
     149                                PTAssistantValidatorTest.ERROR_CODE_STOP_POSITION_COMPARE_RELATIONS, primitives);
     150                errors.add(e);
     151        }
     152       
    83153
    84154        /**
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java

    r32776 r32783  
    55import java.lang.reflect.InvocationTargetException;
    66import java.util.ArrayList;
     7import java.util.Collection;
     8import java.util.LinkedList;
    79import java.util.List;
     10import java.util.Set;
    811
    912import javax.swing.JOptionPane;
     
    1417import org.openstreetmap.josm.data.osm.DataSet;
    1518import org.openstreetmap.josm.data.osm.Node;
     19import org.openstreetmap.josm.data.osm.OsmPrimitive;
    1620import org.openstreetmap.josm.data.osm.Relation;
    1721import org.openstreetmap.josm.data.osm.Way;
     
    2933import org.openstreetmap.josm.plugins.pt_assistant.gui.ProceedDialog;
    3034import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
     35import org.openstreetmap.josm.plugins.pt_assistant.utils.StopUtils;
    3136import org.openstreetmap.josm.plugins.pt_assistant.utils.StopToWayAssigner;
    3237
     
    4449        public static final int ERROR_CODE_STOP_NOT_SERVED = 3753;
    4550        public static final int ERROR_CODE_STOP_BY_STOP = 3754;
     51        public static final int ERROR_CODE_STOP_POSITION_COMPARE_RELATIONS = 3755;
     52        public static final int ERROR_CODE_NODE_PART_OF_STOP_AREA = 3761;
     53        public static final int ERROR_CODE_STOP_AREA_MEMBERS_EXCESS = 3762;
     54        public static final int ERROR_CODE_STOP_AREA_STOP_POSITION = 3763;
     55        public static final int ERROR_CODE_STOP_AREA_PLATFORM = 3764;
     56        public static final int ERROR_CODE_STOP_AREA_NO_STOPS = 3765;
     57        public static final int ERROR_CODE_STOP_AREA_MANY_STOPS = 3765;
     58        public static final int ERROR_CODE_STOP_AREA_NO_PLATFORM = 3766;
     59        public static final int ERROR_CODE_STOP_AREA_MANY_PLATFORMS = 3767;
     60        public static final int ERROR_CODE_STOP_AREA_MEMBERS_RELATIONS = 3768;
     61
    4662
    4763        private PTAssistantLayer layer;
     
    6581                NodeChecker nodeChecker = new NodeChecker(n, this);
    6682
    67                 // check for solitary stop positions:
     83                // select only stop_positions
    6884                if (n.hasTag("public_transport", "stop_position")) {
     85                       
     86                        // check if stop positions are on a way:
    6987                        nodeChecker.performSolitaryStopPositionTest();
    70                 }
    71 
    72                 // check that platforms are not part of any way:
     88                       
     89                        // check if stop positions are in any stop_area relation:
     90                        nodeChecker.performNodePartOfStopAreaTest();
     91                       
     92                        // Check if stop positions belong the same route relation as related platform(s)
     93                        nodeChecker.performStopPositionComparePlatformRelations();
     94                }
     95
     96                // select only platforms
    7397                if (n.hasTag("public_transport", "platform")) {
     98                       
     99                        // check that platforms are not part of any way:
    74100                        nodeChecker.performPlatformPartOfWayTest();
    75                 }
    76 
     101                       
     102                        // check if platforms are in any stop_area relation:
     103                        nodeChecker.performNodePartOfStopAreaTest();
     104                }
     105               
    77106                this.errors.addAll(nodeChecker.getErrors());
    78107
     
    81110        @Override
    82111        public void visit(Relation r) {
     112               
     113                // Do some testing on stop area relations
     114                if (StopUtils.isStopArea(r)) {
     115
     116                        StopChecker stopChecker = new StopChecker(r, this);
     117                       
     118                        // Check if stop area relation has one stop position.
     119                        stopChecker.performStopAreaStopPositionTest();
     120                       
     121                        // Check if stop area relation has more than one stop position.
     122                        stopChecker.performStopAreaMultiStopPositionTest();
     123
     124                        // Check if stop area relation has one platform.
     125                        stopChecker.performStopAreaPlatformTest();
     126
     127                        // Check if stop area relation has more than one platform.
     128                        stopChecker.performStopAreaMultiPlatformTest();
     129
     130                        // Attach thrown errors
     131                        this.errors.addAll(stopChecker.getErrors());
     132                }
    83133
    84134                if (!RouteUtils.isTwoDirectionRoute(r)) {
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java

    r32656 r32783  
    230230
    231231        /**
    232          * Checks if the current way touches its neighboring was correctly
     232         * Checks if the current way touches its neighbouring was correctly
    233233         *
    234234         * @param prev
  • applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/AbstractTest.java

    r32707 r32783  
    4646 
    4747 public static final String PATH_TO_SOLITARY_STOP_POSITION = "test/data/solitary-stop-position.osm";
     48
     49 public static final String PATH_TO_STOP_AREA_MEMBERS = "test/data/stop-area-members.osm";
     50 public static final String PATH_TO_STOP_AREA_RELATIONS = "test/data/stop-area-relations.osm";
     51 public static final String PATH_TO_STOP_AREA_NO_STOPS = "test/data/stop-area-no-stops.osm";
     52 public static final String PATH_TO_STOP_AREA_MANY_STOPS = "test/data/stop-area-many-stops.osm";
     53 public static final String PATH_TO_STOP_AREA_NO_PLATFORMS = "test/data/stop-area-no-platform.osm";
     54 public static final String PATH_TO_STOP_AREA_MANY_PLATFORMS = "test/data/stop-area-many-platforms.osm";
     55
    4856 
    4957 public static final String PATH_TO_SEGMENT_TEST = "test/data/segment-test.osm";
Note: See TracChangeset for help on using the changeset viewer.