private int calculateSize(Geometry geom, boolean includeSrid) { int size = 1 + ByteBuffer.UINT_SIZE; // size for order byte + type field if (geom.getSRID() > 0 && includeSrid) size += 4; if (geom instanceof GeometryCollection) { size += sizeOfGeometryCollection((GeometryCollection) geom); } else if (geom instanceof Polygon) { size += getPolygonSize((Polygon) geom); } else if (geom instanceof Point) { size += getPointByteSize(geom); } else if (geom instanceof PolyHedralSurface) { size += getPolyHedralSurfaceSize((PolyHedralSurface) geom); } else { size += ByteBuffer.UINT_SIZE; // to hold number of points size += getPointByteSize(geom) * geom.getNumPoints(); } return size; }