private <P extends Position> Geometry<P> decodeGeometry(ByteBuffer byteBuffer, CoordinateReferenceSystem<P> crs) { alignByteOrder(byteBuffer); int typeCode = readTypeCode(byteBuffer); WkbGeometryType wkbType = WkbGeometryType.parse((byte) typeCode); crs = (CoordinateReferenceSystem<P>)readCrs(byteBuffer, typeCode, crs); switch (wkbType) { case POINT: return decodePoint(byteBuffer, crs); case LINE_STRING: return decodeLineString(byteBuffer, crs); case POLYGON: return decodePolygon(byteBuffer, crs); case GEOMETRY_COLLECTION: return decodeGeometryCollection(byteBuffer, crs); case MULTI_POINT: return decodeMultiPoint(byteBuffer, crs); case MULTI_POLYGON: return decodeMultiPolygon(byteBuffer, crs); case MULTI_LINE_STRING: return decodeMultiLineString(byteBuffer,crs ); } throw new WkbDecodeException(String.format("WKBType %s is not supported.", wkbType)); }