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); }
@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 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 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()); } }
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); }
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 ST_MULTIPOLYGON: resultInt.set(((OGCMultiPolygon)ogcGeometry).numGeometries()); break;