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