public MultiPolygon toJTSMultiPolygon() { if (jtsMultiPolygon == null) { List<Polygon> polygons = new ArrayList<Polygon>(); for (Ring ring : outermostRings) { polygons.add(ring.toJtsPolygon()); } jtsMultiPolygon = GeometryUtils.getGeometryFactory().createMultiPolygon( polygons.toArray(new Polygon[0])); if (!jtsMultiPolygon.isValid()) { throw new AreaConstructionException(); } } return jtsMultiPolygon; }
if(array.length > 1 && !mp.isValid()) { Geometry g = mp.buffer(0); if(g instanceof Polygon) {
if(mp != null && !mp.isEmpty() && mp.isValid()) { centroid = mp.getCentroid();
if(mp != null && !mp.isEmpty() && mp.isValid()) { centroid = mp.getCentroid();
private static MultiPolygon substract(MultiPolygon outer, MultiPolygon inner) { List<Polygon> polygons = new ArrayList<Polygon>(); if(inner != null && !inner.isEmpty()) { for(int j = 0; j < outer.getNumGeometries(); j++) { Polygon outerN = (Polygon) outer.getGeometryN(j); for(int i = 0; i < inner.getNumGeometries(); i++) { Polygon innerN = (Polygon) inner.getGeometryN(i); if(outerN.intersects(innerN)) { outerN = (Polygon) outerN.difference(innerN); } } if(!outerN.isEmpty()) { polygons.add(outerN); } } } Polygon[] ps = polygons.toArray(new Polygon[polygons.size()]); MultiPolygon mp = geometryFactory.createMultiPolygon(ps); if(mp.isValid()) { return mp; } return null; }
if(mended == null || !mended.isValid() || mended.isEmpty()) { log.warn("Can't mend polygon for {}.", rel.id); if(log.isDebugEnabled()) {
public Geometry remove() throws TopologyException { MultiPolygon mp = (MultiPolygon) geometry; Polygon[] polygons = new Polygon[mp.getNumGeometries()]; int vIndex = vertexIndex; for (int i = 0; i < polygons.length; i++) { if (i == polygonIndex) { PolygonHandler handler = new PolygonHandler((Polygon) mp .getGeometryN(i), holeIndex, vIndex, null, geomIndex); polygons[i] = (Polygon) handler.removeVertex(); } else { polygons[i] = (Polygon) mp.getGeometryN(i); } } mp = gf.createMultiPolygon(polygons); if (!mp.isValid()) { throw new TopologyException(I18N.tr("Invalid multipolygon")); } return mp; } }
public Geometry moveTo(double x, double y) throws CannotChangeGeometryException { MultiPolygon mp = (MultiPolygon) geometry.clone(); Polygon[] polygons = new Polygon[mp.getNumGeometries()]; for (int i = 0; i < polygons.length; i++) { if (i == polygonIndex) { PolygonHandler handler = new PolygonHandler((Polygon) mp .getGeometryN(i), holeIndex, vertexIndex, null, geomIndex); polygons[i] = handler.moveJTSTo(x, y); } else { polygons[i] = (Polygon) mp.getGeometryN(i); } } mp = gf.createMultiPolygon(polygons); if (!mp.isValid()) { throw new CannotChangeGeometryException(I18N.tr("Invalid multipolygon")); } return mp; }