Class WKBWriter
- java.lang.Object
-
- org.locationtech.jts.io.WKBWriter
-
public class WKBWriter extends java.lang.Object
Writes aGeometry
into Well-Known Binary format. Supports use of anOutStream
, which allows easy use with arbitrary byte stream sinks.The WKB format is specified in the OGC Simple Features for SQL specification (section 3.3.2.6).
There are a few cases which are not specified in the standard. The implementation uses a representation which is compatible with other common spatial systems (notably, PostGIS).
LinearRing
s are written asLineString
s- Empty geometries are output as follows:
- Point: a
WKBPoint
withNaN
ordinate values - LineString: a
WKBLineString
with zero points - Polygon: a
WKBPolygon
with zero rings - Multigeometries: a
WKBMulti
geometry of appropriate type with zero elements - GeometryCollections: a
WKBGeometryCollection
with zero elements
- Point: a
This implementation supports the Extended WKB standard. Extended WKB allows writing 3-dimensional coordinates and the geometry SRID value. The presence of 3D coordinates is indicated by setting the high bit of the wkbType word. The presence of a SRID is indicated by setting the third bit of the wkbType word. EWKB format is upward-compatible with the original SFS WKB format.
SRID output is optimized, if specified. Only the top-level geometry has the SRID included. This assumes that all geometries in a collection have the same SRID as the collection (which is the JTS convention).
This class supports reuse of a single instance to read multiple geometries. This class is not thread-safe; each thread should create its own instance.
Syntax
The following syntax specification describes the version of Well-Known Binary supported by JTS.The specification uses a syntax language similar to that used in the C language. Bitfields are specified from high-order to low-order bits.
byte = 1 byte uint32 = 32 bit unsigned integer (4 bytes) double = double precision number (8 bytes) abstract Point { } Point2D extends Point { double x; double y; } Point3D extends Point { double x; double y; double z; } LinearRing { uint32 numPoints; Point points[numPoints]; } enum wkbGeometryType { wkbPoint = 1, wkbLineString = 2, wkbPolygon = 3, wkbMultiPoint = 4, wkbMultiLineString = 5, wkbMultiPolygon = 6, wkbGeometryCollection = 7 } enum byteOrder { wkbXDR = 0, // Big Endian wkbNDR = 1 // Little Endian } WKBType { uint32 wkbGeometryType : 8; // values from enum wkbGeometryType } EWKBType { uint32 is3D : 1; // 0 = 2D, 1 = 3D uint32 noData1 : 1; uint32 hasSRID : 1; // 0, no, 1 = yes uint32 noData2 : 21; uint32 wkbGeometryType : 8; // values from enum wkbGeometryType } abstract WKBGeometry { byte byteOrder; // values from enum byteOrder EWKBType wkbType [ uint32 srid; ] // only if hasSRID = yes } WKBPoint extends WKBGeometry { Point point; } WKBLineString extends WKBGeometry { uint32 numCoords; Point points[numCoords]; } WKBPolygon extends WKBGeometry { uint32 numRings; LinearRing rings[numRings]; } WKBMultiPoint extends WKBGeometry { uint32 numElems; WKBPoint elems[numElems]; } WKBMultiLineString extends WKBGeometry { uint32 numElems; WKBLineString elems[numElems]; } wkbMultiPolygon extends WKBGeometry { uint32 numElems; WKBPolygon elems[numElems]; } WKBGeometryCollection extends WKBGeometry { uint32 numElems; WKBGeometry elems[numElems]; }
- See Also:
WKBReader
-
-
Constructor Summary
Constructors Constructor Description WKBWriter()
Creates a writer that writesGeometry
s with output dimension = 2 and BIG_ENDIAN byte orderWKBWriter(int outputDimension)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates andByteOrderValues.BIG_ENDIAN
byte order.WKBWriter(int outputDimension, boolean includeSRID)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates andByteOrderValues.BIG_ENDIAN
byte order.WKBWriter(int outputDimension, int byteOrder)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates and byte order If the input geometry has a small coordinate dimension, coordinates will be padded withCoordinate.NULL_ORDINATE
.WKBWriter(int outputDimension, int byteOrder, boolean includeSRID)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates and byte order.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static java.lang.String
bytesToHex(byte[] bytes)
Deprecated.static java.lang.String
toHex(byte[] bytes)
Converts a byte array to a hexadecimal string.byte[]
write(Geometry geom)
Writes aGeometry
into a byte array.void
write(Geometry geom, OutStream os)
-
-
-
Constructor Detail
-
WKBWriter
public WKBWriter()
Creates a writer that writesGeometry
s with output dimension = 2 and BIG_ENDIAN byte order
-
WKBWriter
public WKBWriter(int outputDimension)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates andByteOrderValues.BIG_ENDIAN
byte order. If the input geometry has a small coordinate dimension, coordinates will be padded withCoordinate.NULL_ORDINATE
.- Parameters:
outputDimension
- the coordinate dimension to output (2 or 3)
-
WKBWriter
public WKBWriter(int outputDimension, boolean includeSRID)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates andByteOrderValues.BIG_ENDIAN
byte order. This constructor also takes a flag to control whether srid information will be written. If the input geometry has a smaller coordinate dimension, coordinates will be padded withCoordinate.NULL_ORDINATE
.- Parameters:
outputDimension
- the coordinate dimension to output (2 or 3)includeSRID
- indicates whether SRID should be written
-
WKBWriter
public WKBWriter(int outputDimension, int byteOrder)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates and byte order If the input geometry has a small coordinate dimension, coordinates will be padded withCoordinate.NULL_ORDINATE
.- Parameters:
outputDimension
- the coordinate dimension to output (2 or 3)byteOrder
- the byte ordering to use
-
WKBWriter
public WKBWriter(int outputDimension, int byteOrder, boolean includeSRID)
Creates a writer that writesGeometry
s with the given dimension (2 or 3) for output coordinates and byte order. This constructor also takes a flag to control whether srid information will be written. If the input geometry has a small coordinate dimension, coordinates will be padded withCoordinate.NULL_ORDINATE
.- Parameters:
outputDimension
- the coordinate dimension to output (2 or 3)byteOrder
- the byte ordering to useincludeSRID
- indicates whether SRID should be written
-
-
Method Detail
-
bytesToHex
public static java.lang.String bytesToHex(byte[] bytes)
Deprecated.Converts a byte array to a hexadecimal string.- Parameters:
bytes
-- Returns:
- a string of hexadecimal digits
-
toHex
public static java.lang.String toHex(byte[] bytes)
Converts a byte array to a hexadecimal string.- Parameters:
bytes
- a byte array- Returns:
- a string of hexadecimal digits
-
write
public byte[] write(Geometry geom)
Writes aGeometry
into a byte array.- Parameters:
geom
- the geometry to write- Returns:
- the byte array containing the WKB
-
-