@Override public void visit(LineString<P> geom) { writeByteOrder(output); writeTypeCodeAndSrid(geom, output); if (geom.isEmpty()) { output.putUInt(0); } else { output.putUInt(geom.getNumPositions()); writePoints(geom.getPositions(), geom.getCoordinateDimension(), output); } }
@Override public void visit(GeometryCollection geom) { writeByteOrder(output); DimensionalFlag dimension = DimensionalFlag.valueOf(geom.is3D(), geom.isMeasured()); writeTypeCodeAndSrid(geom, dimension, output); output.putUInt(geom.getNumGeometries()); }
@Override public void visit(LineString geom) { writeByteOrder(output); DimensionalFlag dimension = DimensionalFlag.valueOf(geom.is3D(), geom.isMeasured()); writeTypeCodeAndSrid(geom, dimension, output); output.putUInt(geom.getNumPoints()); writePoints(geom.getPoints(), geom.getCoordinateDimension(), output); }
@Override public void visit(PolyHedralSurface geom) { writeByteOrder(output); DimensionalFlag dimension = DimensionalFlag.valueOf(geom.is3D(), geom.isMeasured()); writeTypeCodeAndSrid(geom, dimension, output); output.putUInt(geom.getNumPatches()); for (Polygon pg : geom) { pg.accept(this); } }
protected void writeTypeCodeAndSrid( Geometry geometry, DimensionalFlag dimension, ByteBuffer output) { int typeCode = getGeometryType(geometry); boolean hasSrid = (geometry.getSRID() > 0); if (hasSrid && !hasWrittenSrid) typeCode |= PostgisWkbTypeMasks.SRID_FLAG; if (dimension.isMeasured()) typeCode |= PostgisWkbTypeMasks.M_FLAG; if (dimension.is3D()) typeCode |= PostgisWkbTypeMasks.Z_FLAG; output.putUInt(typeCode); if (hasSrid && !hasWrittenSrid) { output.putInt(geometry.getSRID()); hasWrittenSrid = true; } }
@Override public void visit(Polygon<P> geom) { writeByteOrder(output); writeTypeCodeAndSrid(geom, output); if (geom.isEmpty()) { output.putUInt(0); } else { writeNumRings(geom, output); for (LinearRing<P> ring : geom) { writeRing(ring); } } }
private void writeNumRings(Polygon geom, ByteBuffer byteBuffer) { byteBuffer.putUInt(geom.isEmpty() ? 0 : geom.getNumInteriorRing() + 1); }
private void writeRing(LinearRing geom) { output.putUInt(geom.getNumPoints()); writePoints(geom.getPoints(), geom.getCoordinateDimension(), output); }
protected void writeNumRings(Polygon<P> geom, ByteBuffer byteBuffer) { byteBuffer.putUInt(geom.isEmpty() ? 0 : geom.getNumInteriorRing() + 1); }
protected void writeRing(LinearRing<P> geom) { output.putUInt(geom.getNumPositions()); writePoints(geom.getPositions(), geom.getCoordinateDimension(), output); }
@Override public <G extends Geometry<P>> void visit(GeometryCollection<P, G> geom) { writeByteOrder(output); writeTypeCodeAndSrid(geom, output); output.putUInt(geom.getNumGeometries()); }
protected void writeTypeCodeAndSrid(Geometry<P> geometry, ByteBuffer output) { int typeCode = getGeometryType(geometry); output.putUInt(typeCode); }