private static Point computeMultiPolygonCentroid(OGCMultiPolygon multiPolygon) { double xSum = 0; double ySum = 0; double weightSum = 0; for (int i = 0; i < multiPolygon.numGeometries(); i++) { Point centroid = computePolygonCentroid((Polygon) multiPolygon.geometryN(i).getEsriGeometry()); Polygon polygon = (Polygon) multiPolygon.geometryN(i).getEsriGeometry(); double weight = polygon.calculateArea2D(); weightSum += weight; xSum += centroid.getX() * weight; ySum += centroid.getY() * weight; } return new Point(xSum / weightSum, ySum / weightSum); }
return new OGCPolygon((Polygon) geometry, null); return new OGCMultiPolygon((Polygon) geometry, null);
break; case ST_MULTIPOLYGON: ogcGeom = ((OGCMultiPolygon)ogcGeometry).geometryN(idx); break;
break; case ST_MULTIPOLYGON: resultInt.set(((OGCMultiPolygon)ogcGeometry).numGeometries()); break;
@Override public String asText() { return GeometryEngine.geometryToWkt(getEsriGeometry(), WktExportFlags.wktExportMultiPolygon); }
@Override public String asText() { return GeometryEngine.geometryToWkt(getEsriGeometry(), WktExportFlags.wktExportMultiPolygon); }
@Override protected Object evaluateOGCGeometry(OGCGeometry geometry) throws HyracksDataException { if (geometry instanceof OGCPolygon) { return ((OGCPolygon) geometry).numInteriorRing() + 1; } else if (geometry instanceof OGCMultiPolygon) { OGCMultiPolygon polygon = (OGCMultiPolygon) geometry; int numGeometries = polygon.numGeometries(); int count = 0; for (int i = 1; i < numGeometries + 1; i++) { if (polygon.geometryN(i) instanceof OGCPolygon) { count += ((OGCPolygon) polygon.geometryN(i)).numInteriorRing() + 1; } } return count; } else { throw new UnsupportedOperationException( "The operation " + getIdentifier() + " is not supported for the type " + geometry.geometryType()); } }
@Override public OGCGeometry convertToMulti() { return new OGCMultiPolygon(polygon, esriSR); }
@Override public String asGeoJson() { OperatorExportToGeoJson op = (OperatorExportToGeoJson) OperatorFactoryLocal .getInstance().getOperator(Operator.Type.ExportToGeoJson); return op.execute(GeoJsonExportFlags.geoJsonExportPreferMultiGeometry, null, getEsriGeometry()); } @Override
@Override public OGCGeometry reduceFromMulti() { int n = numGeometries(); if (n == 0) { return new OGCPolygon(new Polygon(polygon.getDescription()), 0, esriSR); } if (n == 1) { return geometryN(0); } return this; }
@Override public OGCGeometry convertToMulti() { return new OGCMultiPolygon(polygon, esriSR); }
@Override public ByteBuffer asBinary() { OperatorExportToWkb op = (OperatorExportToWkb) OperatorFactoryLocal .getInstance().getOperator(Operator.Type.ExportToWkb); return op.execute(WkbExportFlags.wkbExportMultiPolygon, getEsriGeometry(), null); } @Override
@Override public OGCGeometry reduceFromMulti() { int n = numGeometries(); if (n == 0) { return new OGCPolygon(new Polygon(polygon.getDescription()), 0, esriSR); } if (n == 1) { return geometryN(0); } return this; }
break; case 6: g = new OGCMultiPolygon( (Polygon) lastStructure.m_structures.get(i).m_geometry, sr);
@Override public String asGeoJson() { OperatorExportToGeoJson op = (OperatorExportToGeoJson) OperatorFactoryLocal .getInstance().getOperator(Operator.Type.ExportToGeoJson); return op.execute(GeoJsonExportFlags.geoJsonExportPreferMultiGeometry, null, getEsriGeometry()); } @Override
private static Point computeMultiPolygonCentroid(OGCMultiPolygon multiPolygon) { double xSum = 0; double ySum = 0; double weightSum = 0; for (int i = 0; i < multiPolygon.numGeometries(); i++) { Point centroid = computePolygonCentroid((Polygon) multiPolygon.geometryN(i).getEsriGeometry()); Polygon polygon = (Polygon) multiPolygon.geometryN(i).getEsriGeometry(); double weight = polygon.calculateArea2D(); weightSum += weight; xSum += centroid.getX() * weight; ySum += centroid.getY() * weight; } return new Point(xSum / weightSum, ySum / weightSum); }
break; case 6: g = new OGCMultiPolygon( (Polygon) lastStructure.m_structures.get(i).m_geometry, sr);
@Override public ByteBuffer asBinary() { OperatorExportToWkb op = (OperatorExportToWkb) OperatorFactoryLocal .getInstance().getOperator(Operator.Type.ExportToWkb); return op.execute(WkbExportFlags.wkbExportMultiPolygon, getEsriGeometry(), null); } @Override
private static Point computeMultiPolygonCentroid(OGCMultiPolygon multiPolygon) { double xSum = 0; double ySum = 0; double weightSum = 0; for (int i = 0; i < multiPolygon.numGeometries(); i++) { Point centroid = computePolygonCentroid((Polygon) multiPolygon.geometryN(i).getEsriGeometry()); Polygon polygon = (Polygon) multiPolygon.geometryN(i).getEsriGeometry(); double weight = polygon.calculateArea2D(); weightSum += weight; xSum += centroid.getX() * weight; ySum += centroid.getY() * weight; } return new Point(xSum / weightSum, ySum / weightSum); }
Geometry g = unionedPolygons.next(); if (!g.isEmpty()) { list.add(new OGCMultiPolygon((Polygon)g, esriSR));