/** * Converts a <code>MultiPolygon</code> to <MultiPolygon Text> format, * then appends it to the writer. * *@param multiPolygon the <code>MultiPolygon</code> to process *@param writer the output writer to append to */ private void appendMultiPolygonText(MultiPolygon multiPolygon, int level, Writer writer) throws IOException { if (multiPolygon.isEmpty()) { writer.write("EMPTY"); } else { int level2 = level; boolean doIndent = false; writer.write("("); for (int i = 0; i < multiPolygon.getNumGeometries(); i++) { if (i > 0) { writer.write(", "); level2 = level + 1; doIndent = true; } appendPolygonText((Polygon) multiPolygon.getGeometryN(i), level2, doIndent, writer); } writer.write(")"); } }
/** * 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)); }
public static MultiPolygon createArea(OsmEntityProvider data, OsmRelation relation) { try { RegionBuilderResult region = REGION_BUILDER.build(relation, data); MultiPolygon multiPolygon = region.getMultiPolygon(); if (multiPolygon.isEmpty()) { return null; } return multiPolygon; } catch (EntityNotFoundException e) { Terrarium.LOGGER.warn("Unable to find relation member", e); return null; } }
public static MultiPolygon createArea(OsmEntityProvider data, OsmWay way) { try { RegionBuilderResult region = REGION_BUILDER.build(way, data); MultiPolygon multiPolygon = region.getMultiPolygon(); if (multiPolygon.isEmpty()) { return null; } return multiPolygon; } catch (EntityNotFoundException e) { Terrarium.LOGGER.warn("Unable to find relation member", e); return null; } }
/** * Converts a <code>MultiPolygon</code> to <MultiPolygon Text> format, * then appends it to the writer. * *@param multiPolygon the <code>MultiPolygon</code> to process *@param writer the output writer to append to */ private void appendMultiPolygonText(MultiPolygon multiPolygon, int level, Writer writer) throws IOException { if (multiPolygon.isEmpty()) { writer.write("EMPTY"); } else { int level2 = level; boolean doIndent = false; writer.write("("); for (int i = 0; i < multiPolygon.getNumGeometries(); i++) { if (i > 0) { writer.write(", "); level2 = level + 1; doIndent = true; } appendPolygonText((Polygon) multiPolygon.getGeometryN(i), level2, doIndent, writer); } writer.write(")"); } }
@Override protected double[][][][] createCoordinates(MultiPolygon geometry) throws MarshallException { if (geometry == null) { return null; } else if (geometry.isEmpty()) { return new double[0][0][0][0]; } else { final double[][][][] coordinates = new double[geometry.getNumGeometries()][][][]; for (int index = 0; index < coordinates.length; index++) { coordinates[index] = converter.createCoordinates((Polygon) geometry.getGeometryN(index)); } return coordinates; } }
/** * 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)); }
if(mp != null && !mp.isEmpty() && mp.isValid()) { centroid = mp.getCentroid();
p = (Polygon) it.next(); pp = clipPolygon(p, (Polygon) displayGeometry, displayGeomEnv); if ((pp != null) && (!(pp.isEmpty()))) { for (int t = 0; t < pp.getNumGeometries(); t++)
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; }
for (Polygon p : polys) { MultiPolygon pp = clipPolygon(p, (Polygon) displayGeometry, displayGeomEnv); if ((pp != null) && (!(pp.isEmpty()))) { for (int t = 0; t < pp.getNumGeometries(); t++) clippedPolys.add((Polygon) pp.getGeometryN(t));
if(mended == null || !mended.isValid() || mended.isEmpty()) { log.warn("Can't mend polygon for {}.", rel.id); if(log.isDebugEnabled()) {
if(!multiPolygon.isEmpty()) { meta.put(GeoJsonWriter.FULL_GEOMETRY, GeoJsonWriter.geometryToJSON(multiPolygon.getGeometryN(0)));
if(mix != null && !mix.isEmpty()) {