public void fromBytes ( byte [ ] bytes ) { this . bytes = bytes ; ByteReader reader = new ByteReader ( bytes ) ; // Get 2 bytes as the magic number and validate String magic = null ; try { magic = reader . readString ( 2 ) ; } catch ( UnsupportedEncodingException e ) { throw new GeoPackageException ( "Unexpected GeoPackage Geometry magic number character encoding: Expected: " + GeoPackageConstants . GEO_PACKAGE_GEOMETRY_MAGIC_NUMBER ) ; } if ( ! magic . equals ( GeoPackageConstants . GEO_PACKAGE_GEOMETRY_MAGIC_NUMBER ) ) { throw new GeoPackageException ( "Unexpected GeoPackage Geometry magic number: " + magic + ", Expected: " + GeoPackageConstants . GEO_PACKAGE_GEOMETRY_MAGIC_NUMBER ) ; } // Get a byte as the version and validate, value of 0 = version 1 byte version = reader . readByte ( ) ; if ( version != GeoPackageConstants . GEO_PACKAGE_GEOMETRY_VERSION_1 ) { throw new GeoPackageException ( "Unexpected GeoPackage Geometry version: " + version + ", Expected: " + GeoPackageConstants . GEO_PACKAGE_GEOMETRY_VERSION_1 ) ; } // Get a flags byte and then read the flag values byte flags = reader . readByte ( ) ; int envelopeIndicator = readFlags ( flags ) ; reader . setByteOrder ( byteOrder ) ; // Read the 5th - 8th bytes as the srs id srsId = reader . readInt ( ) ; // Read the envelope envelope = readEnvelope ( envelopeIndicator , reader ) ; // Save off where the WKB bytes start wkbGeometryIndex = reader . getNextByte ( ) ; // Read the Well-Known Binary Geometry if not marked as empty if ( ! empty ) { geometry = GeometryReader . readGeometry ( reader ) ; } }
Populate the geometry data from the bytes