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;
 }