private MultiPolygon createNull() {
return geometryFactory.createMultiPolygon(null);
}
public void write(ByteBuffer buffer, Object geometry) {
MultiPolygon multi;
if (geometry instanceof MultiPolygon) {
multi = (MultiPolygon) geometry;
} else {
multi = geometryFactory.createMultiPolygon(new Polygon[] { (Polygon) geometry });
}
Envelope box = multi.getEnvelopeInternal();
buffer.putDouble(box.getMinX());
buffer.putDouble(box.getMinY());
buffer.putDouble(box.getMaxX());
buffer.putDouble(box.getMaxY());
//need to find the total number of rings and points
final int nrings;
final CoordinateSequence []coordinates;
{
List allCoords = new ArrayList();
for (int t = 0; t < multi.getNumGeometries(); t++) {
Polygon p;
p = (Polygon) multi.getGeometryN(t);
allCoords.add(p.getExteriorRing().getCoordinateSequence());
for(int ringN = 0; ringN < p.getNumInteriorRing(); ringN++){
allCoords.add(p.getInteriorRingN(ringN).getCoordinateSequence());
}
}
coordinates = (CoordinateSequence[])allCoords.toArray(new CoordinateSequence[allCoords.size()]);
nrings = coordinates.length;
}
final int npoints = multi.getNumPoints();
buffer.putInt(nrings);
buffer.putInt(npoints);
int count = 0;