Changeset 11149 in josm


Ignore:
Timestamp:
2016-10-20T11:14:10+02:00 (8 years ago)
Author:
bastiK
Message:

applied #13086 - changed self-intersecting ways detection (patch by Gerd Petermann, minor javadoc changes)

Location:
trunk
Files:
2 edited

Legend:

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

    r11136 r11149  
    3232    public void visit(Way w) {
    3333        Set<Node> nodes = new HashSet<>();
    34         int last = w.getNodesCount();
    35         if (last < 2)
    36             return;
    37         if (w.firstNode() == w.lastNode())
    38             last--; // closed way, ignore last node
    39         nodes.add(w.firstNode());
    40         for (int i = 1; i < last; i++) {
     34        for (int i = 1; i < w.getNodesCount() - 1; i++) {
    4135            Node n = w.getNode(i);
    4236            if (nodes.contains(n)) {
  • trunk/test/unit/org/openstreetmap/josm/data/validation/tests/SelfIntersectingWayTest.java

    r11136 r11149  
    4141    }
    4242
    43 
    4443    /**
    45      * Self-Intersection at first (+ last) node of closed way
    46      */
    47     @Test
    48     public void TestClosedWay() {
    49         List<Node> nodes = createNodes();
    50 
    51         Way w = (Way) OsmUtils.createPrimitive("way ");
    52         List<Node> wayNodes = new ArrayList<>();
    53         wayNodes.add(nodes.get(0));
    54         wayNodes.add(nodes.get(1));
    55         wayNodes.add(nodes.get(2));
    56         wayNodes.add(nodes.get(0)); // problem
    57         wayNodes.add(nodes.get(3));
    58         wayNodes.add(nodes.get(4));
    59         wayNodes.add(nodes.get(0));
    60         w.setNodes(wayNodes);
    61         SelfIntersectingWay test = new SelfIntersectingWay();
    62         test.visit(w);
    63         Assert.assertEquals(1, test.getErrors().size());
    64         Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(0)));
    65     }
    66 
    67     /**
    68      * Self-Intersection at first node of unclosed way
    69      */
    70     @Test
    71     public void TestUnclosedWayFirst() {
    72         List<Node> nodes = createNodes();
    73 
    74         Way w = (Way) OsmUtils.createPrimitive("way ");
    75         List<Node> wayNodes = new ArrayList<>();
    76         wayNodes.add(nodes.get(0));
    77         wayNodes.add(nodes.get(1));
    78         wayNodes.add(nodes.get(2));
    79         wayNodes.add(nodes.get(0)); // problem
    80         wayNodes.add(nodes.get(3));
    81         wayNodes.add(nodes.get(4));
    82         w.setNodes(wayNodes);
    83         SelfIntersectingWay test = new SelfIntersectingWay();
    84         test.visit(w);
    85         Assert.assertEquals(1, test.getErrors().size());
    86         Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(0)));
    87     }
    88 
    89     /**
    90      * Self-Intersection at first node of unclosed way
    91      */
    92     @Test
    93     public void TestUnclosedWayLast() {
    94         List<Node> nodes = createNodes();
    95 
    96         Way w = (Way) OsmUtils.createPrimitive("way ");
    97         List<Node> wayNodes = new ArrayList<>();
    98         wayNodes.add(nodes.get(0));
    99         wayNodes.add(nodes.get(1)); // problem
    100         wayNodes.add(nodes.get(2));
    101         wayNodes.add(nodes.get(3));
    102         wayNodes.add(nodes.get(4));
    103         wayNodes.add(nodes.get(1));
    104         w.setNodes(wayNodes);
    105         SelfIntersectingWay test = new SelfIntersectingWay();
    106         test.visit(w);
    107         Assert.assertEquals(1, test.getErrors().size());
    108         Assert.assertTrue(test.getErrors().iterator().next().getHighlighted().contains(nodes.get(1)));
    109     }
    110 
    111     /**
    112      * Self-Intersection at normal node (not first / last)
     44     * Self-Intersection at inner node (not first / last).
    11345     */
    11446    @Test
     
    13163    }
    13264
     65    /**
     66     * First node is identical to an inner node ("P"-Shape).
     67     * This is considered okay.
     68     */
     69    @Test
     70    public void TestUnclosedWayFirst() {
     71        List<Node> nodes = createNodes();
     72
     73        Way w = (Way) OsmUtils.createPrimitive("way ");
     74        List<Node> wayNodes = new ArrayList<>();
     75        wayNodes.add(nodes.get(0));
     76        wayNodes.add(nodes.get(1));
     77        wayNodes.add(nodes.get(2));
     78        wayNodes.add(nodes.get(0)); // problem
     79        wayNodes.add(nodes.get(3));
     80        wayNodes.add(nodes.get(4));
     81        w.setNodes(wayNodes);
     82        SelfIntersectingWay test = new SelfIntersectingWay();
     83        test.visit(w);
     84        Assert.assertEquals(0, test.getErrors().size());
     85    }
     86
     87    /**
     88     * Last node is identical to an inner node ("b"-Shape).
     89     * This is considered okay.
     90     */
     91    @Test
     92    public void TestUnclosedWayLast() {
     93        List<Node> nodes = createNodes();
     94
     95        Way w = (Way) OsmUtils.createPrimitive("way ");
     96        List<Node> wayNodes = new ArrayList<>();
     97        wayNodes.add(nodes.get(0));
     98        wayNodes.add(nodes.get(1)); // problem node
     99        wayNodes.add(nodes.get(2));
     100        wayNodes.add(nodes.get(3));
     101        wayNodes.add(nodes.get(4));
     102        wayNodes.add(nodes.get(1));
     103        w.setNodes(wayNodes);
     104        SelfIntersectingWay test = new SelfIntersectingWay();
     105        test.visit(w);
     106        Assert.assertEquals(0, test.getErrors().size());
     107    }
     108
     109    /**
     110     * Both endpoints join at one inner node ("8"-shape).
     111     * This is considered okay.
     112     */
     113    @Test
     114    public void TestClosedWay() {
     115        List<Node> nodes = createNodes();
     116
     117        Way w = (Way) OsmUtils.createPrimitive("way ");
     118        List<Node> wayNodes = new ArrayList<>();
     119        wayNodes.add(nodes.get(0));
     120        wayNodes.add(nodes.get(1));
     121        wayNodes.add(nodes.get(2));
     122        wayNodes.add(nodes.get(0)); // problem
     123        wayNodes.add(nodes.get(3));
     124        wayNodes.add(nodes.get(4));
     125        wayNodes.add(nodes.get(0));
     126        w.setNodes(wayNodes);
     127        SelfIntersectingWay test = new SelfIntersectingWay();
     128        test.visit(w);
     129        Assert.assertEquals(0, test.getErrors().size());
     130    }
     131
    133132}
Note: See TracChangeset for help on using the changeset viewer.