Revision: 5391
          http://sourceforge.net/p/jump-pilot/code/5391
Author:   michaudm
Date:     2017-03-20 22:53:10 +0000 (Mon, 20 Mar 2017)
Log Message:
-----------
Fix a robustess problem in MakeValidOp

Modified Paths:
--------------
    core/trunk/ChangeLog
    core/trunk/src/com/vividsolutions/jump/geom/MakeValidOp.java

Modified: core/trunk/ChangeLog
===================================================================
--- core/trunk/ChangeLog        2017-03-20 16:20:28 UTC (rev 5390)
+++ core/trunk/ChangeLog        2017-03-20 22:53:10 UTC (rev 5391)
@@ -3,6 +3,9 @@
 # 2. make sure that lines break at 80 chars for constricted display situations
 #<-------------------------------- 80 chars 
---------------------------------->#
 
+2017-03-20 mmichaud <m.michael.mich...@orange.fr>
+  * Fix a robustess problem in MakeValidOp
+
 2017-03-19 ede
   * fix WFS in PLUS not working due too i18n error
 

Modified: core/trunk/src/com/vividsolutions/jump/geom/MakeValidOp.java
===================================================================
--- core/trunk/src/com/vividsolutions/jump/geom/MakeValidOp.java        
2017-03-20 16:20:28 UTC (rev 5390)
+++ core/trunk/src/com/vividsolutions/jump/geom/MakeValidOp.java        
2017-03-20 22:53:10 UTC (rev 5391)
@@ -24,6 +24,7 @@
 import com.vividsolutions.jts.algorithm.RobustLineIntersector;
 import com.vividsolutions.jts.geom.*;
 import com.vividsolutions.jts.geom.impl.PackedCoordinateSequenceFactory;
+import com.vividsolutions.jts.geom.util.PolygonExtracter;
 import com.vividsolutions.jts.io.ParseException;
 import com.vividsolutions.jts.io.WKTReader;
 import com.vividsolutions.jts.noding.IntersectionAdder;
@@ -421,10 +422,18 @@
     private Geometry nodePolygon(Polygon polygon) {
         LinearRing exteriorRing = (LinearRing)polygon.getExteriorRing();
         Geometry geom = getArealGeometryFromLinearRing(exteriorRing);
+        // geom can be a GeometryCollection
+        // extract polygonal areas because symDifference cannot process 
GeometryCollections
+        List<Geometry> list = new ArrayList<>();
+        geom.apply(new PolygonExtracter(list));
+        geom = geom.getFactory().buildGeometry(list);
         for (int i = 0 ; i < polygon.getNumInteriorRing() ; i++) {
             LinearRing interiorRing = (LinearRing)polygon.getInteriorRingN(i);
+            // extract polygonal areas because symDifference cannot process 
GeometryCollections
+            list.clear();
+            getArealGeometryFromLinearRing(interiorRing).apply(new 
PolygonExtracter(list));
             // TODO avoid the use of difference operator
-            geom = 
geom.symDifference(getArealGeometryFromLinearRing(interiorRing));
+            geom = geom.symDifference(geom.getFactory().buildGeometry(list));
         }
         return geom;
     }
@@ -446,7 +455,7 @@
         else {
             Polygonizer polygonizer = new Polygonizer();
             polygonizer.add(nodeLineString(ring.getCoordinates(), 
ring.getFactory()));
-            Collection<Geometry> geoms = new ArrayList<Geometry>();
+            Collection<Geometry> geoms = new ArrayList<>();
             geoms.addAll(polygonizer.getPolygons());
             geoms.addAll(polygonizer.getCutEdges());
             geoms.addAll(polygonizer.getDangles());


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to