private static ByteBuffer addCrsId(byte[] wkb, byte orderByte, int typeCode, int crsId) { ByteBuffer buffer = ByteBuffer.allocate( wkb.length + 4 ); // original capacity + 4 bytes for the CRS ID buffer.setByteOrder( ByteOrder.valueOf( orderByte ) ); buffer.put( orderByte ); // write byte order buffer.putUInt( typeCode | POSTGIS_SRID_FLAG ); // set SRID flag buffer.putInt( crsId ); // write CRS ID // write remaining data for ( int i = 5; i < wkb.length; i++ ) { buffer.put( wkb[i] ); } buffer.rewind(); return buffer; }
@Override protected void writeTypeCodeAndSrid(Geometry<P> geometry, ByteBuffer output) { int typeCode = getGeometryType(geometry); CoordinateReferenceSystem<P> crs = geometry.getCoordinateReferenceSystem(); if (!this.hasWrittenSrid) { typeCode |= PostgisWkbTypeMasks.SRID_FLAG; } if (hasMeasureAxis(crs)) { typeCode |= PostgisWkbTypeMasks.M_FLAG; } if (hasVerticalAxis(crs)) { typeCode |= PostgisWkbTypeMasks.Z_FLAG; } output.putUInt(typeCode); if (!this.hasWrittenSrid) { int srid = geometry.getSRID(); // Write the SRID, the HANA default SRID is 0 output.putInt(srid < 0 ? 0 : srid); this.hasWrittenSrid = true; } }
@Override public <P extends Position> ByteBuffer encode(Geometry<P> geometry, ByteOrder byteOrder) { if (geometry == null || hasEmpty(geometry)) return null; //size is size for WKB + 4 bytes for the SRID ByteBuffer output = ByteBuffer.allocate(calculateSize(geometry, false) + 4); if (byteOrder != null) { output.setByteOrder(byteOrder); } output.putInt(geometry.getSRID() == -1 ? 0 : geometry.getSRID()); writeGeometry(geometry, output); output.rewind(); return output; }
protected void writeTypeCodeAndSrid(Geometry<P> geometry, ByteBuffer output) { int typeCode = getGeometryType(geometry); boolean hasSrid = (geometry.getSRID() > 0); CoordinateReferenceSystem<P> crs = geometry.getCoordinateReferenceSystem(); if (hasSrid && !hasWrittenSrid) { typeCode |= PostgisWkbTypeMasks.SRID_FLAG; } if (hasMeasureAxis(crs)) { typeCode |= PostgisWkbTypeMasks.M_FLAG; } if (hasVerticalAxis(crs)) { typeCode |= PostgisWkbTypeMasks.Z_FLAG; } output.putUInt(typeCode); if (hasSrid && !hasWrittenSrid) { output.putInt(geometry.getSRID()); hasWrittenSrid = true; } }