/** * Creates a {@link MultiPolygon} with * every component reversed. * The order of the components in the collection are not reversed. * * @return a MultiPolygon in the reverse order */ public Geometry reverse() { int n = geometries.length; Polygon[] revGeoms = new Polygon[n]; for (int i = 0; i < geometries.length; i++) { revGeoms[i] = (Polygon) geometries[i].reverse(); } return getFactory().createMultiPolygon(revGeoms); } }
/** * Computes the boundary of this geometry * * @return a lineal geometry (which may be empty) * @see Geometry#getBoundary */ public Geometry getBoundary() { if (isEmpty()) { return getFactory().createMultiLineString(null); } ArrayList allRings = new ArrayList(); for (int i = 0; i < geometries.length; i++) { Polygon polygon = (Polygon) geometries[i]; Geometry rings = polygon.getBoundary(); for (int j = 0; j < rings.getNumGeometries(); j++) { allRings.add(rings.getGeometryN(j)); } } LineString[] allRingsArray = new LineString[allRings.size()]; return getFactory().createMultiLineString((LineString[]) allRings.toArray(allRingsArray)); }
/** * Creates a {@link MultiPolygon} with * every component reversed. * The order of the components in the collection are not reversed. * * @return a MultiPolygon in the reverse order */ public Geometry reverse() { int n = geometries.length; Polygon[] revGeoms = new Polygon[n]; for (int i = 0; i < geometries.length; i++) { revGeoms[i] = (Polygon) geometries[i].reverse(); } return getFactory().createMultiPolygon(revGeoms); } }
/** * Computes the boundary of this geometry * * @return a lineal geometry (which may be empty) * @see Geometry#getBoundary */ public Geometry getBoundary() { if (isEmpty()) { return getFactory().createMultiLineString(null); } ArrayList allRings = new ArrayList(); for (int i = 0; i < geometries.length; i++) { Polygon polygon = (Polygon) geometries[i]; Geometry rings = polygon.getBoundary(); for (int j = 0; j < rings.getNumGeometries(); j++) { allRings.add(rings.getGeometryN(j)); } } LineString[] allRingsArray = new LineString[allRings.size()]; return getFactory().createMultiLineString((LineString[]) allRings.toArray(allRingsArray)); }
protected static Geometry transformMultiPolygon(CoordinateTransform ct, MultiPolygon multiPolygon) { Polygon[] polygon = new Polygon[multiPolygon.getNumGeometries()]; for (int i = 0; i < polygon.length; ++i) { polygon[i] = multiPolygon.getFactory() .createPolygon(transformCoordinates(ct, multiPolygon.getGeometryN(i).getCoordinates())); } return multiPolygon.getFactory().createMultiPolygon(polygon); }
protected static Geometry transformMultiPolygon(CoordinateTransform ct, MultiPolygon multiPolygon) { Polygon[] polygon = new Polygon[multiPolygon.getNumGeometries()]; for (int i = 0; i < polygon.length; ++i) { polygon[i] = multiPolygon.getFactory() .createPolygon(transformCoordinates(ct, multiPolygon.getGeometryN(i).getCoordinates())); } return multiPolygon.getFactory().createMultiPolygon(polygon); }
protected static Geometry transformMultiPolygon(CoordinateTransform ct, MultiPolygon multiPolygon) { Polygon[] polygon = new Polygon[multiPolygon.getNumGeometries()]; for (int i = 0; i < polygon.length; ++i) { polygon[i] = multiPolygon.getFactory() .createPolygon(transformCoordinates(ct, multiPolygon.getGeometryN(i).getCoordinates())); } return multiPolygon.getFactory().createMultiPolygon(polygon); }
/** * Create a new multiPolygon without hole. * * @param multiPolygon * @return */ public static MultiPolygon removeHolesMultiPolygon(MultiPolygon multiPolygon) { int num = multiPolygon.getNumGeometries(); Polygon[] polygons = new Polygon[num]; for (int i = 0; i < num; i++) { polygons[i] = removeHolesPolygon((Polygon) multiPolygon.getGeometryN(i)); } return multiPolygon.getFactory().createMultiPolygon(polygons); }
/** * Create a new multiPolygon without hole. * * @param multiPolygon * @return */ public static MultiPolygon removeHolesMultiPolygon(MultiPolygon multiPolygon) { int num = multiPolygon.getNumGeometries(); Polygon[] polygons = new Polygon[num]; for (int i = 0; i < num; i++) { polygons[i] = removeHolesPolygon((Polygon) multiPolygon.getGeometryN(i)); } return multiPolygon.getFactory().createMultiPolygon(polygons); }
/** * Create a new multiPolygon without hole. * * @param multiPolygon * @return */ public static MultiPolygon removeHoleMultiPolygon(MultiPolygon multiPolygon) { int num = multiPolygon.getNumGeometries(); Polygon[] polygons = new Polygon[num]; for (int i = 0; i < num; i++) { polygons[i] = removeHolePolygon((Polygon) multiPolygon.getGeometryN(i)); } return multiPolygon.getFactory().createMultiPolygon(polygons); }
/** * Like makeGoodShapePolygon, but applied towards a multi polygon. * * @param mp * The MultiPolygon to "niceify". * @return The "nicified" MultiPolygon. */ public static final MultiPolygon makeGoodShapeMultiPolygon(MultiPolygon mp) { MultiPolygon result; Polygon[] ps = new Polygon[mp.getNumGeometries()]; // check each sub-polygon for (int t = 0; t < mp.getNumGeometries(); t++) { ps[t] = makeGoodShapePolygon((Polygon) mp.getGeometryN(t)); } result = mp.getFactory().createMultiPolygon(ps); return result; }
mp = new MultiPolygon(p,mp.getFactory()); f.setDefaultGeometry(mp);
mp = new MultiPolygon(p,mp.getFactory()); f.setDefaultGeometry(mp);
/** * Like makeGoodShapePolygon, but applied towards a multi polygon. * * @param mp * The MultiPolygon to "niceify". * @return The "nicified" MultiPolygon. */ public static final MultiPolygon makeGoodShapeMultiPolygon(MultiPolygon mp) { MultiPolygon result; Polygon[] ps = new Polygon[mp.getNumGeometries()]; // check each sub-polygon for (int t = 0; t < mp.getNumGeometries(); t++) { ps[t] = makeGoodShapePolygon((Polygon) mp.getGeometryN(t)); } result = mp.getFactory().createMultiPolygon(ps); return result; }
/** * Convert MultiPolygons to Geometry collections as MySQL does not seem to like them. */ private Geometry fixUpGeometry(Geometry geometry) { if(geometry instanceof MultiPolygon) { MultiPolygon multiPolygon = (MultiPolygon) geometry; if(multiPolygon.getNumGeometries() == 1) { return multiPolygon.getGeometryN(0); } else { Geometry[] polygons = new Geometry[multiPolygon.getNumGeometries()]; for (int i = 0; i < polygons.length; i++) { polygons[i] = multiPolygon.getGeometryN(i); } return new GeometryCollection(polygons, multiPolygon.getFactory()); } } return geometry; }
/** * Drape a multilinestring to a set of triangles * @param polygons * @param triangles * @param sTRtree * @return */ public static Geometry drapeMultiPolygon(MultiPolygon polygons, Geometry triangles, STRtree sTRtree) { GeometryFactory factory = polygons.getFactory(); //Split the triangles in lines to perform all intersections Geometry triangleLines = LinearComponentExtracter.getGeometry(triangles, true); int nbPolygons = polygons.getNumGeometries(); Polygon[] polygonsDiff = new Polygon[nbPolygons]; for (int i = 0; i < nbPolygons; i++) { polygonsDiff[i] = processPolygon((Polygon) polygons.getGeometryN(i), triangleLines, factory); } Geometry diffExt = factory.createMultiPolygon(polygonsDiff); CoordinateSequenceFilter drapeFilter = new DrapeFilter(sTRtree); diffExt.apply(drapeFilter); return diffExt; }