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 <[email protected]>
+ * 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel