code: 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);
  		}
  
  	}
docs: Populate the geometry data from the bytes
  
  @param bytes
  geometry bytes