Class WKBReader


  • public class WKBReader
    extends java.lang.Object
    Reads a Geometryfrom a byte stream in Well-Known Binary format. Supports use of an InStream, which allows easy use with arbitrary byte stream sources.

    This class reads the format describe in WKBWriter. It also partially handles the Extended WKB format used by PostGIS, by parsing and storing SRID values. The reader repairs structurally-invalid input (specifically, LineStrings and LinearRings which contain too few points have vertices added, and non-closed rings are closed).

    This class is designed to support reuse of a single instance to read multiple geometries. This class is not thread-safe; each thread should create its own instance.

    As of version 1.15, the reader can read geometries following OGC 06-103r4 speification used by Spatialite/Geopackage.

    The difference between PostGIS EWKB format and the new OGC specification is that Z and M coordinates are detected with a bit mask on the higher byte in the former case (0x80 for Z and 0x40 for M) while new OGC specification use specif int ranges for 2D gemetries, Z geometries (2D code+1000), M geometries (2D code+2000) and ZM geometries (2D code+3000).

    Note that the WKBWriter is not changed and still write PostGIS WKB geometries

    See Also:
    for a formal format specification
    • Constructor Detail

      • WKBReader

        public WKBReader()
    • Method Detail

      • hexToBytes

        public static byte[] hexToBytes​(java.lang.String hex)
        Converts a hexadecimal string to a byte array. The hexadecimal digit symbols are case-insensitive.
        Parameters:
        hex - a string containing hex digits
        Returns:
        an array of bytes with the value of the hex string
      • read

        public Geometry read​(byte[] bytes)
                      throws ParseException
        Reads a single Geometry in WKB format from a byte array.
        Parameters:
        bytes - the byte array to read from
        Returns:
        the geometry read
        Throws:
        ParseException - if the WKB is ill-formed
      • read

        public Geometry read​(InStream is)
                      throws java.io.IOException,
                             ParseException
        Reads a Geometry in binary WKB format from an InStream.
        Parameters:
        is - the stream to read from
        Returns:
        the Geometry read
        Throws:
        java.io.IOException - if the underlying stream creates an error
        ParseException - if the WKB is ill-formed