Changeset 11837 in josm for trunk/src/org
- Timestamp:
- 2017-04-04T15:29:07+02:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
r11799 r11837 833 833 continue; 834 834 } 835 836 Node unsharedNode = getNonIntersectingNode(outerCandidate, inner); 837 if (unsharedNode != null) { 838 if (checkIfNodeIsInsidePolygon(unsharedNode, outerCandidate)) { 835 boolean useIntersectionTest = false; 836 Node unsharedOuterNode = null; 837 Node unsharedInnerNode = getNonIntersectingNode(outerCandidate, inner); 838 if (unsharedInnerNode != null) { 839 if (checkIfNodeIsInsidePolygon(unsharedInnerNode, outerCandidate)) { 839 840 innerCandidates.add(inner); 840 841 } else { 841 842 // inner is not inside outerCandidate, check if it contains outerCandidate 842 unsharedNode = getNonIntersectingNode(inner, outerCandidate); 843 if (unsharedNode != null) { 844 if (checkIfNodeIsInsidePolygon(unsharedNode, inner)) { 845 return null; 843 unsharedOuterNode = getNonIntersectingNode(inner, outerCandidate); 844 if (unsharedOuterNode != null) { 845 if (checkIfNodeIsInsidePolygon(unsharedOuterNode, inner)) { 846 return null; // outer is inside inner 846 847 } 847 848 } else { 848 return null; // polygons have only common nodes849 useIntersectionTest = true; 849 850 } 850 851 } 851 852 } else { 852 853 // all nodes of inner are also nodes of outerCandidate 853 unsharedNode = getNonIntersectingNode(inner, outerCandidate); 854 if (unsharedNode == null) { 854 unsharedOuterNode = getNonIntersectingNode(inner, outerCandidate); 855 if (unsharedOuterNode == null) { 856 return null; // all nodes shared -> same ways, maybe different direction 857 } else { 858 if (checkIfNodeIsInsidePolygon(unsharedOuterNode, inner)) { 859 return null; // outer is inside inner 860 } else { 861 useIntersectionTest = true; 862 } 863 } 864 } 865 if (useIntersectionTest) { 866 Main.warn("using complex test "); 867 PolygonIntersection res = Geometry.polygonIntersection(inner.getNodes(), outerCandidate.getNodes()); 868 if (res == PolygonIntersection.FIRST_INSIDE_SECOND) 869 innerCandidates.add(inner); 870 else if (res == PolygonIntersection.SECOND_INSIDE_FIRST) 855 871 return null; 856 } else {857 innerCandidates.add(inner);858 }859 872 } 860 873 }
Note:
See TracChangeset
for help on using the changeset viewer.