diff --git a/src/main/java/mil/nga/sf/wkb/GeometryReader.java b/src/main/java/mil/nga/sf/wkb/GeometryReader.java index 6f9bb0e..8b2d9aa 100644 --- a/src/main/java/mil/nga/sf/wkb/GeometryReader.java +++ b/src/main/java/mil/nga/sf/wkb/GeometryReader.java @@ -35,6 +35,11 @@ public class GeometryReader { */ private static final long WKB25D = Long.decode("0x80000000"); + /** + * High-Bit-Indikator for M-values + */ + private static final long WKBM = Long.decode("0x40000000"); + /** * Read a geometry from well-known bytes * @@ -355,6 +360,12 @@ public GeometryTypeInfo readGeometryType() throws IOException { unsignedGeometryTypeCode -= WKB25D; } + boolean hasM = false; + if (unsignedGeometryTypeCode > WKBM) { + hasM = true; + unsignedGeometryTypeCode -= WKBM; + } + int geometryTypeCode = (int) unsignedGeometryTypeCode; // Determine the geometry type @@ -366,7 +377,9 @@ public GeometryTypeInfo readGeometryType() throws IOException { if (!hasZ) { hasZ = GeometryCodes.hasZ(geometryTypeCode); } - boolean hasM = GeometryCodes.hasM(geometryTypeCode); + if (!hasM) { + hasM = GeometryCodes.hasM(geometryTypeCode); + } GeometryTypeInfo geometryInfo = new GeometryTypeInfo(geometryTypeCode, geometryType, hasZ, hasM);