import Feature from '../../../../../src/ol/Feature.js'; import GeometryCollection from '../../../../../src/ol/geom/GeometryCollection.js'; import Point from '../../../../../src/ol/geom/Point.js'; import SimpleGeometry from '../../../../../src/ol/geom/SimpleGeometry.js'; import WKB from '../../../../../src/ol/format/WKB.js'; import WKT from '../../../../../src/ol/format/WKT.js'; import {transform} from '../../../../../src/ol/proj.js'; const patterns = [ [ '010100000000000000000024400000000000002440', 'POINT(10 10)', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000140240000000000004024000000000000', 'POINT(10 10)', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '01020000000300000000000000000024400000000000002440000000000000344000000000000034400000000000003e400000000000004440', 'LINESTRING(10 10,20 20,30 40)', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '0000000002000000034024000000000000402400000000000040340000000000004034000000000000403e0000000000004044000000000000', 'LINESTRING(10 10,20 20,30 40)', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '0103000000010000000500000000000000000024400000000000002440000000000000244000000000000034400000000000003440000000000000344000000000000034400000000000002e4000000000000024400000000000002440', 'POLYGON((10 10,10 20,20 20,20 15,10 10))', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000300000001000000054024000000000000402400000000000040240000000000004034000000000000403400000000000040340000000000004034000000000000402e00000000000040240000000000004024000000000000', 'POLYGON((10 10,10 20,20 20,20 15,10 10))', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010400000002000000010100000000000000000024400000000000002440010100000000000000000034400000000000003440', 'MULTIPOINT(10 10,20 20)', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000400000002000000000140240000000000004024000000000000000000000140340000000000004034000000000000', 'MULTIPOINT(10 10,20 20)', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '01050000000200000001020000000200000000000000000024400000000000002440000000000000344000000000000034400102000000020000000000000000002e400000000000002e400000000000003e400000000000002e40', 'MULTILINESTRING((10 10,20 20),(15 15,30 15))', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '0000000005000000020000000002000000024024000000000000402400000000000040340000000000004034000000000000000000000200000002402e000000000000402e000000000000403e000000000000402e000000000000', 'MULTILINESTRING((10 10,20 20),(15 15,30 15))', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '0106000000020000000103000000010000000500000000000000000024400000000000002440000000000000244000000000000034400000000000003440000000000000344000000000000034400000000000002e4000000000000024400000000000002440010300000001000000040000000000000000004e400000000000004e400000000000805140000000000080514000000000000054400000000000004e400000000000004e400000000000004e40', 'MULTIPOLYGON(((10 10,10 20,20 20,20 15,10 10)),((60 60,70 70,80 60,60 60)))', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000600000002000000000300000001000000054024000000000000402400000000000040240000000000004034000000000000403400000000000040340000000000004034000000000000402e0000000000004024000000000000402400000000000000000000030000000100000004404e000000000000404e000000000000405180000000000040518000000000004054000000000000404e000000000000404e000000000000404e000000000000', 'MULTIPOLYGON(((10 10,10 20,20 20,20 15,10 10)),((60 60,70 70,80 60,60 60)))', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '01070000000300000001010000000000000000002440000000000000244001010000000000000000003e400000000000003e400102000000020000000000000000002e400000000000002e4000000000000034400000000000003440', 'GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '0000000007000000030000000001402400000000000040240000000000000000000001403e000000000000403e000000000000000000000200000002402e000000000000402e00000000000040340000000000004034000000000000', 'GEOMETRYCOLLECTION(POINT(10 10),POINT(30 30),LINESTRING(15 15,20 20))', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '01e9030000000000000000244000000000000024400000000000001440', 'POINT Z (10 10 5)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003e9402400000000000040240000000000004014000000000000', 'POINT Z (10 10 5)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0101000080000000000000244000000000000024400000000000001440', 'POINT Z (10 10 5)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '0080000001402400000000000040240000000000004014000000000000', 'POINT Z (10 10 5)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ea030000030000000000000000002440000000000000244000000000000014400000000000003440000000000000344000000000000010400000000000003e4000000000000044400000000000000840', 'LINESTRING Z (10 10 5,20 20 4,30 40 3)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ea00000003402400000000000040240000000000004014000000000000403400000000000040340000000000004010000000000000403e00000000000040440000000000004008000000000000', 'LINESTRING Z (10 10 5,20 20 4,30 40 3)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0102000080030000000000000000002440000000000000244000000000000014400000000000003440000000000000344000000000000010400000000000003e4000000000000044400000000000000840', 'LINESTRING Z (10 10 5,20 20 4,30 40 3)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000200000003402400000000000040240000000000004014000000000000403400000000000040340000000000004010000000000000403e00000000000040440000000000004008000000000000', 'LINESTRING Z (10 10 5,20 20 4,30 40 3)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01eb030000010000000500000000000000000024400000000000002440000000000000144000000000000024400000000000003440000000000000104000000000000034400000000000003440000000000000084000000000000034400000000000002e40000000000000004000000000000024400000000000002440000000000000f03f', 'POLYGON Z ((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003eb00000001000000054024000000000000402400000000000040140000000000004024000000000000403400000000000040100000000000004034000000000000403400000000000040080000000000004034000000000000402e0000000000004000000000000000402400000000000040240000000000003ff0000000000000', 'POLYGON Z ((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0103000080010000000500000000000000000024400000000000002440000000000000144000000000000024400000000000003440000000000000104000000000000034400000000000003440000000000000084000000000000034400000000000002e40000000000000004000000000000024400000000000002440000000000000f03f', 'POLYGON Z ((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000300000001000000054024000000000000402400000000000040140000000000004024000000000000403400000000000040100000000000004034000000000000403400000000000040080000000000004034000000000000402e0000000000004000000000000000402400000000000040240000000000003ff0000000000000', 'POLYGON Z ((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ec0300000200000001e903000000000000000024400000000000002440000000000000144001e9030000000000000000344000000000000034400000000000001440', 'MULTIPOINT Z (10 10 5,20 20 5)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ec0000000200000003e940240000000000004024000000000000401400000000000000000003e9403400000000000040340000000000004014000000000000', 'MULTIPOINT Z (10 10 5,20 20 5)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '01040000800200000001010000800000000000002440000000000000244000000000000014400101000080000000000000344000000000000034400000000000001440', 'MULTIPOINT Z (10 10 5,20 20 5)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '00800000040000000200800000014024000000000000402400000000000040140000000000000080000001403400000000000040340000000000004014000000000000', 'MULTIPOINT Z (10 10 5,20 20 5)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ed0300000200000001ea0300000200000000000000000024400000000000002440000000000000144000000000000034400000000000003440000000000000104001ea030000020000000000000000002e400000000000002e4000000000000008400000000000003e400000000000002e400000000000000040', 'MULTILINESTRING Z ((10 10 5,20 20 4),(15 15 3,30 15 2))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ed0000000200000003ea0000000240240000000000004024000000000000401400000000000040340000000000004034000000000000401000000000000000000003ea00000002402e000000000000402e0000000000004008000000000000403e000000000000402e0000000000004000000000000000', 'MULTILINESTRING Z ((10 10 5,20 20 4),(15 15 3,30 15 2))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0105000080020000000102000080020000000000000000002440000000000000244000000000000014400000000000003440000000000000344000000000000010400102000080020000000000000000002e400000000000002e4000000000000008400000000000003e400000000000002e400000000000000040', 'MULTILINESTRING Z ((10 10 5,20 20 4),(15 15 3,30 15 2))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000500000002008000000200000002402400000000000040240000000000004014000000000000403400000000000040340000000000004010000000000000008000000200000002402e000000000000402e0000000000004008000000000000403e000000000000402e0000000000004000000000000000', 'MULTILINESTRING Z ((10 10 5,20 20 4),(15 15 3,30 15 2))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ee0300000200000001eb030000010000000500000000000000000024400000000000002440000000000000144000000000000024400000000000003440000000000000104000000000000034400000000000003440000000000000084000000000000034400000000000002e40000000000000004000000000000024400000000000002440000000000000f03f01eb03000001000000040000000000000000004e400000000000004e40000000000000144000000000008051400000000000805140000000000000104000000000000054400000000000004e4000000000000008400000000000004e400000000000004e400000000000000040', 'MULTIPOLYGON Z (((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1)),((60 60 5,70 70 4,80 60 3,60 60 2)))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ee0000000200000003eb00000001000000054024000000000000402400000000000040140000000000004024000000000000403400000000000040100000000000004034000000000000403400000000000040080000000000004034000000000000402e0000000000004000000000000000402400000000000040240000000000003ff000000000000000000003eb0000000100000004404e000000000000404e00000000000040140000000000004051800000000000405180000000000040100000000000004054000000000000404e0000000000004008000000000000404e000000000000404e0000000000004000000000000000', 'MULTIPOLYGON Z (((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1)),((60 60 5,70 70 4,80 60 3,60 60 2)))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0106000080020000000103000080010000000500000000000000000024400000000000002440000000000000144000000000000024400000000000003440000000000000104000000000000034400000000000003440000000000000084000000000000034400000000000002e40000000000000004000000000000024400000000000002440000000000000f03f010300008001000000040000000000000000004e400000000000004e40000000000000144000000000008051400000000000805140000000000000104000000000000054400000000000004e4000000000000008400000000000004e400000000000004e400000000000000040', 'MULTIPOLYGON Z (((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1)),((60 60 5,70 70 4,80 60 3,60 60 2)))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000600000002008000000300000001000000054024000000000000402400000000000040140000000000004024000000000000403400000000000040100000000000004034000000000000403400000000000040080000000000004034000000000000402e0000000000004000000000000000402400000000000040240000000000003ff000000000000000800000030000000100000004404e000000000000404e00000000000040140000000000004051800000000000405180000000000040100000000000004054000000000000404e0000000000004008000000000000404e000000000000404e0000000000004000000000000000', 'MULTIPOLYGON Z (((10 10 5,10 20 4,20 20 3,20 15 2,10 10 1)),((60 60 5,70 70 4,80 60 3,60 60 2)))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ef0300000300000001e903000000000000000024400000000000002440000000000000144001e90300000000000000003e400000000000003e40000000000000144001ea030000020000000000000000002e400000000000002e400000000000001440000000000000344000000000000034400000000000001440', 'GEOMETRYCOLLECTION Z (POINT Z (10 10 5),POINT Z (30 30 5),LINESTRING Z (15 15 5,20 20 5))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ef0000000300000003e940240000000000004024000000000000401400000000000000000003e9403e000000000000403e000000000000401400000000000000000003ea00000002402e000000000000402e0000000000004014000000000000403400000000000040340000000000004014000000000000', 'GEOMETRYCOLLECTION Z (POINT Z (10 10 5),POINT Z (30 30 5),LINESTRING Z (15 15 5,20 20 5))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010700008003000000010100008000000000000024400000000000002440000000000000144001010000800000000000003e400000000000003e4000000000000014400102000080020000000000000000002e400000000000002e400000000000001440000000000000344000000000000034400000000000001440', 'GEOMETRYCOLLECTION Z (POINT Z (10 10 5),POINT Z (30 30 5),LINESTRING Z (15 15 5,20 20 5))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '00800000070000000300800000014024000000000000402400000000000040140000000000000080000001403e000000000000403e0000000000004014000000000000008000000200000002402e000000000000402e0000000000004014000000000000403400000000000040340000000000004014000000000000', 'GEOMETRYCOLLECTION Z (POINT Z (10 10 5),POINT Z (30 30 5),LINESTRING Z (15 15 5,20 20 5))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01d1070000000000000000244000000000000024400000000000804640', 'POINT M (10 10 45)', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d1402400000000000040240000000000004046800000000000', 'POINT M (10 10 45)', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0101000040000000000000244000000000000024400000000000804640', 'POINT M (10 10 45)', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '0040000001402400000000000040240000000000004046800000000000', 'POINT M (10 10 45)', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d2070000030000000000000000002440000000000000244000000000008046400000000000003440000000000000344000000000000046400000000000003e4000000000000044400000000000804540', 'LINESTRING M (10 10 45,20 20 44,30 40 43)', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d200000003402400000000000040240000000000004046800000000000403400000000000040340000000000004046000000000000403e00000000000040440000000000004045800000000000', 'LINESTRING M (10 10 45,20 20 44,30 40 43)', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0102000040030000000000000000002440000000000000244000000000008046400000000000003440000000000000344000000000000046400000000000003e4000000000000044400000000000804540', 'LINESTRING M (10 10 45,20 20 44,30 40 43)', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000200000003402400000000000040240000000000004046800000000000403400000000000040340000000000004046000000000000403e00000000000040440000000000004045800000000000', 'LINESTRING M (10 10 45,20 20 44,30 40 43)', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d3070000010000000500000000000000000024400000000000002440000000000080464000000000000024400000000000003440000000000000464000000000000034400000000000003440000000000080454000000000000034400000000000002e400000000000004540000000000000244000000000000024400000000000804440', 'POLYGON M ((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41))', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d300000001000000054024000000000000402400000000000040468000000000004024000000000000403400000000000040460000000000004034000000000000403400000000000040458000000000004034000000000000402e0000000000004045000000000000402400000000000040240000000000004044800000000000', 'POLYGON M ((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41))', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0103000040010000000500000000000000000024400000000000002440000000000080464000000000000024400000000000003440000000000000464000000000000034400000000000003440000000000080454000000000000034400000000000002e400000000000004540000000000000244000000000000024400000000000804440', 'POLYGON M ((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41))', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000300000001000000054024000000000000402400000000000040468000000000004024000000000000403400000000000040460000000000004034000000000000403400000000000040458000000000004034000000000000402e0000000000004045000000000000402400000000000040240000000000004044800000000000', 'POLYGON M ((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41))', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d40700000200000001d107000000000000000024400000000000002440000000000080464001d1070000000000000000344000000000000034400000000000804640', 'MULTIPOINT M (10 10 45,20 20 45)', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d40000000200000007d140240000000000004024000000000000404680000000000000000007d1403400000000000040340000000000004046800000000000', 'MULTIPOINT M (10 10 45,20 20 45)', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '01040000400200000001010000400000000000002440000000000000244000000000008046400101000040000000000000344000000000000034400000000000804640', 'MULTIPOINT M (10 10 45,20 20 45)', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '00400000040000000200400000014024000000000000402400000000000040468000000000000040000001403400000000000040340000000000004046800000000000', 'MULTIPOINT M (10 10 45,20 20 45)', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d50700000200000001d20700000200000000000000000024400000000000002440000000000080464000000000000034400000000000003440000000000000464001d2070000020000000000000000002e400000000000002e4000000000008045400000000000003e400000000000002e400000000000004540', 'MULTILINESTRING M ((10 10 45,20 20 44),(15 15 43,30 15 42))', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d50000000200000007d20000000240240000000000004024000000000000404680000000000040340000000000004034000000000000404600000000000000000007d200000002402e000000000000402e0000000000004045800000000000403e000000000000402e0000000000004045000000000000', 'MULTILINESTRING M ((10 10 45,20 20 44),(15 15 43,30 15 42))', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0105000040020000000102000040020000000000000000002440000000000000244000000000008046400000000000003440000000000000344000000000000046400102000040020000000000000000002e400000000000002e4000000000008045400000000000003e400000000000002e400000000000004540', 'MULTILINESTRING M ((10 10 45,20 20 44),(15 15 43,30 15 42))', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000500000002004000000200000002402400000000000040240000000000004046800000000000403400000000000040340000000000004046000000000000004000000200000002402e000000000000402e0000000000004045800000000000403e000000000000402e0000000000004045000000000000', 'MULTILINESTRING M ((10 10 45,20 20 44),(15 15 43,30 15 42))', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d60700000200000001d3070000010000000500000000000000000024400000000000002440000000000080464000000000000024400000000000003440000000000000464000000000000034400000000000003440000000000080454000000000000034400000000000002e40000000000000454000000000000024400000000000002440000000000080444001d307000001000000040000000000000000004e400000000000004e40000000000080464000000000008051400000000000805140000000000000464000000000000054400000000000004e4000000000008045400000000000004e400000000000004e400000000000004540', 'MULTIPOLYGON M (((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41)),((60 60 45,70 70 44,80 60 43,60 60 42)))', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d60000000200000007d300000001000000054024000000000000402400000000000040468000000000004024000000000000403400000000000040460000000000004034000000000000403400000000000040458000000000004034000000000000402e000000000000404500000000000040240000000000004024000000000000404480000000000000000007d30000000100000004404e000000000000404e00000000000040468000000000004051800000000000405180000000000040460000000000004054000000000000404e0000000000004045800000000000404e000000000000404e0000000000004045000000000000', 'MULTIPOLYGON M (((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41)),((60 60 45,70 70 44,80 60 43,60 60 42)))', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0106000040020000000103000040010000000500000000000000000024400000000000002440000000000080464000000000000024400000000000003440000000000000464000000000000034400000000000003440000000000080454000000000000034400000000000002e400000000000004540000000000000244000000000000024400000000000804440010300004001000000040000000000000000004e400000000000004e40000000000080464000000000008051400000000000805140000000000000464000000000000054400000000000004e4000000000008045400000000000004e400000000000004e400000000000004540', 'MULTIPOLYGON M (((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41)),((60 60 45,70 70 44,80 60 43,60 60 42)))', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000600000002004000000300000001000000054024000000000000402400000000000040468000000000004024000000000000403400000000000040460000000000004034000000000000403400000000000040458000000000004034000000000000402e000000000000404500000000000040240000000000004024000000000000404480000000000000400000030000000100000004404e000000000000404e00000000000040468000000000004051800000000000405180000000000040460000000000004054000000000000404e0000000000004045800000000000404e000000000000404e0000000000004045000000000000', 'MULTIPOLYGON M (((10 10 45,10 20 44,20 20 43,20 15 42,10 10 41)),((60 60 45,70 70 44,80 60 43,60 60 42)))', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d70700000300000001d107000000000000000024400000000000002440000000000080464001d10700000000000000003e400000000000003e40000000000080464001d2070000020000000000000000002e400000000000002e400000000000804640000000000000344000000000000034400000000000804640', 'GEOMETRYCOLLECTION M (POINT M (10 10 45),POINT M (30 30 45),LINESTRING M (15 15 45,20 20 45))', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d70000000300000007d140240000000000004024000000000000404680000000000000000007d1403e000000000000403e000000000000404680000000000000000007d200000002402e000000000000402e0000000000004046800000000000403400000000000040340000000000004046800000000000', 'GEOMETRYCOLLECTION M (POINT M (10 10 45),POINT M (30 30 45),LINESTRING M (15 15 45,20 20 45))', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010700004003000000010100004000000000000024400000000000002440000000000080464001010000400000000000003e400000000000003e4000000000008046400102000040020000000000000000002e400000000000002e400000000000804640000000000000344000000000000034400000000000804640', 'GEOMETRYCOLLECTION M (POINT M (10 10 45),POINT M (30 30 45),LINESTRING M (15 15 45,20 20 45))', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '00400000070000000300400000014024000000000000402400000000000040468000000000000040000001403e000000000000403e0000000000004046800000000000004000000200000002402e000000000000402e0000000000004046800000000000403400000000000040340000000000004046800000000000', 'GEOMETRYCOLLECTION M (POINT M (10 10 45),POINT M (30 30 45),LINESTRING M (15 15 45,20 20 45))', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01b90b00000000000000002440000000000000244000000000000014400000000000804640', 'POINT ZM (10 10 5 45)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bb94024000000000000402400000000000040140000000000004046800000000000', 'POINT ZM (10 10 5 45)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01010000c00000000000002440000000000000244000000000000014400000000000804640', 'POINT ZM (10 10 5 45)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000014024000000000000402400000000000040140000000000004046800000000000', 'POINT ZM (10 10 5 45)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01ba0b000003000000000000000000244000000000000024400000000000001440000000000080464000000000000034400000000000003440000000000000104000000000000046400000000000003e40000000000000444000000000000008400000000000804540', 'LINESTRING ZM (10 10 5 45,20 20 4 44,30 40 3 43)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bba0000000340240000000000004024000000000000401400000000000040468000000000004034000000000000403400000000000040100000000000004046000000000000403e000000000000404400000000000040080000000000004045800000000000', 'LINESTRING ZM (10 10 5 45,20 20 4 44,30 40 3 43)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01020000c003000000000000000000244000000000000024400000000000001440000000000080464000000000000034400000000000003440000000000000104000000000000046400000000000003e40000000000000444000000000000008400000000000804540', 'LINESTRING ZM (10 10 5 45,20 20 4 44,30 40 3 43)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000020000000340240000000000004024000000000000401400000000000040468000000000004034000000000000403400000000000040100000000000004046000000000000403e000000000000404400000000000040080000000000004045800000000000', 'LINESTRING ZM (10 10 5 45,20 20 4 44,30 40 3 43)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bb0b0000010000000500000000000000000024400000000000002440000000000000144000000000008046400000000000002440000000000000344000000000000010400000000000004640000000000000344000000000000034400000000000000840000000000080454000000000000034400000000000002e400000000000000040000000000000454000000000000024400000000000002440000000000000f03f0000000000804440', 'POLYGON ZM ((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbb00000001000000054024000000000000402400000000000040140000000000004046800000000000402400000000000040340000000000004010000000000000404600000000000040340000000000004034000000000000400800000000000040458000000000004034000000000000402e00000000000040000000000000004045000000000000402400000000000040240000000000003ff00000000000004044800000000000', 'POLYGON ZM ((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01030000c0010000000500000000000000000024400000000000002440000000000000144000000000008046400000000000002440000000000000344000000000000010400000000000004640000000000000344000000000000034400000000000000840000000000080454000000000000034400000000000002e400000000000000040000000000000454000000000000024400000000000002440000000000000f03f0000000000804440', 'POLYGON ZM ((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000300000001000000054024000000000000402400000000000040140000000000004046800000000000402400000000000040340000000000004010000000000000404600000000000040340000000000004034000000000000400800000000000040458000000000004034000000000000402e00000000000040000000000000004045000000000000402400000000000040240000000000003ff00000000000004044800000000000', 'POLYGON ZM ((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bc0b00000200000001b90b0000000000000000244000000000000024400000000000001440000000000080464001b90b00000000000000003440000000000000344000000000000014400000000000804640', 'MULTIPOINT ZM (10 10 5 45,20 20 5 45)', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbc000000020000000bb940240000000000004024000000000000401400000000000040468000000000000000000bb94034000000000000403400000000000040140000000000004046800000000000', 'MULTIPOINT ZM (10 10 5 45,20 20 5 45)', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01040000c00200000001010000c0000000000000244000000000000024400000000000001440000000000080464001010000c00000000000003440000000000000344000000000000014400000000000804640', 'MULTIPOINT ZM (10 10 5 45,20 20 5 45)', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000040000000200c0000001402400000000000040240000000000004014000000000000404680000000000000c00000014034000000000000403400000000000040140000000000004046800000000000', 'MULTIPOINT ZM (10 10 5 45,20 20 5 45)', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bd0b00000200000001ba0b0000020000000000000000002440000000000000244000000000000014400000000000804640000000000000344000000000000034400000000000001040000000000000464001ba0b0000020000000000000000002e400000000000002e40000000000000084000000000008045400000000000003e400000000000002e4000000000000000400000000000004540', 'MULTILINESTRING ZM ((10 10 5 45,20 20 4 44),(15 15 3 43,30 15 2 42))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbd000000020000000bba00000002402400000000000040240000000000004014000000000000404680000000000040340000000000004034000000000000401000000000000040460000000000000000000bba00000002402e000000000000402e00000000000040080000000000004045800000000000403e000000000000402e00000000000040000000000000004045000000000000', 'MULTILINESTRING ZM ((10 10 5 45,20 20 4 44),(15 15 3 43,30 15 2 42))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01050000c00200000001020000c0020000000000000000002440000000000000244000000000000014400000000000804640000000000000344000000000000034400000000000001040000000000000464001020000c0020000000000000000002e400000000000002e40000000000000084000000000008045400000000000003e400000000000002e4000000000000000400000000000004540', 'MULTILINESTRING ZM ((10 10 5 45,20 20 4 44),(15 15 3 43,30 15 2 42))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000050000000200c0000002000000024024000000000000402400000000000040140000000000004046800000000000403400000000000040340000000000004010000000000000404600000000000000c000000200000002402e000000000000402e00000000000040080000000000004045800000000000403e000000000000402e00000000000040000000000000004045000000000000', 'MULTILINESTRING ZM ((10 10 5 45,20 20 4 44),(15 15 3 43,30 15 2 42))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01be0b00000200000001bb0b0000010000000500000000000000000024400000000000002440000000000000144000000000008046400000000000002440000000000000344000000000000010400000000000004640000000000000344000000000000034400000000000000840000000000080454000000000000034400000000000002e400000000000000040000000000000454000000000000024400000000000002440000000000000f03f000000000080444001bb0b000001000000040000000000000000004e400000000000004e4000000000000014400000000000804640000000000080514000000000008051400000000000001040000000000000464000000000000054400000000000004e40000000000000084000000000008045400000000000004e400000000000004e4000000000000000400000000000004540', 'MULTIPOLYGON ZM (((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41)),((60 60 5 45,70 70 4 44,80 60 3 43,60 60 2 42)))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbe000000020000000bbb00000001000000054024000000000000402400000000000040140000000000004046800000000000402400000000000040340000000000004010000000000000404600000000000040340000000000004034000000000000400800000000000040458000000000004034000000000000402e00000000000040000000000000004045000000000000402400000000000040240000000000003ff000000000000040448000000000000000000bbb0000000100000004404e000000000000404e0000000000004014000000000000404680000000000040518000000000004051800000000000401000000000000040460000000000004054000000000000404e00000000000040080000000000004045800000000000404e000000000000404e00000000000040000000000000004045000000000000', 'MULTIPOLYGON ZM (((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41)),((60 60 5 45,70 70 4 44,80 60 3 43,60 60 2 42)))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01060000c00200000001030000c0010000000500000000000000000024400000000000002440000000000000144000000000008046400000000000002440000000000000344000000000000010400000000000004640000000000000344000000000000034400000000000000840000000000080454000000000000034400000000000002e400000000000000040000000000000454000000000000024400000000000002440000000000000f03f000000000080444001030000c001000000040000000000000000004e400000000000004e4000000000000014400000000000804640000000000080514000000000008051400000000000001040000000000000464000000000000054400000000000004e40000000000000084000000000008045400000000000004e400000000000004e4000000000000000400000000000004540', 'MULTIPOLYGON ZM (((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41)),((60 60 5 45,70 70 4 44,80 60 3 43,60 60 2 42)))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000060000000200c000000300000001000000054024000000000000402400000000000040140000000000004046800000000000402400000000000040340000000000004010000000000000404600000000000040340000000000004034000000000000400800000000000040458000000000004034000000000000402e00000000000040000000000000004045000000000000402400000000000040240000000000003ff0000000000000404480000000000000c00000030000000100000004404e000000000000404e0000000000004014000000000000404680000000000040518000000000004051800000000000401000000000000040460000000000004054000000000000404e00000000000040080000000000004045800000000000404e000000000000404e00000000000040000000000000004045000000000000', 'MULTIPOLYGON ZM (((10 10 5 45,10 20 4 44,20 20 3 43,20 15 2 42,10 10 1 41)),((60 60 5 45,70 70 4 44,80 60 3 43,60 60 2 42)))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bf0b00000300000001b90b0000000000000000244000000000000024400000000000001440000000000080464001b90b00000000000000003e400000000000003e400000000000001440000000000080464001ba0b0000020000000000000000002e400000000000002e40000000000000144000000000008046400000000000003440000000000000344000000000000014400000000000804640', 'GEOMETRYCOLLECTION ZM (POINT ZM (10 10 5 45),POINT ZM (30 30 5 45),LINESTRING ZM (15 15 5 45,20 20 5 45))', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbf000000030000000bb940240000000000004024000000000000401400000000000040468000000000000000000bb9403e000000000000403e000000000000401400000000000040468000000000000000000bba00000002402e000000000000402e000000000000401400000000000040468000000000004034000000000000403400000000000040140000000000004046800000000000', 'GEOMETRYCOLLECTION ZM (POINT ZM (10 10 5 45),POINT ZM (30 30 5 45),LINESTRING ZM (15 15 5 45,20 20 5 45))', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01070000c00300000001010000c0000000000000244000000000000024400000000000001440000000000080464001010000c00000000000003e400000000000003e400000000000001440000000000080464001020000c0020000000000000000002e400000000000002e40000000000000144000000000008046400000000000003440000000000000344000000000000014400000000000804640', 'GEOMETRYCOLLECTION ZM (POINT ZM (10 10 5 45),POINT ZM (30 30 5 45),LINESTRING ZM (15 15 5 45,20 20 5 45))', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000070000000300c0000001402400000000000040240000000000004014000000000000404680000000000000c0000001403e000000000000403e0000000000004014000000000000404680000000000000c000000200000002402e000000000000402e000000000000401400000000000040468000000000004034000000000000403400000000000040140000000000004046800000000000', 'GEOMETRYCOLLECTION ZM (POINT ZM (10 10 5 45),POINT ZM (30 30 5 45),LINESTRING ZM (15 15 5 45,20 20 5 45))', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '0101000000000000000000f87f000000000000f87f', 'POINT EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '00000000017ff80000000000007ff8000000000000', 'POINT EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010200000000000000', 'LINESTRING EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000200000000', 'LINESTRING EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010300000000000000', 'POLYGON EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000300000000', 'POLYGON EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010400000000000000', 'MULTIPOINT EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000400000000', 'MULTIPOINT EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010500000000000000', 'MULTILINESTRING EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000500000000', 'MULTILINESTRING EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010600000000000000', 'MULTIPOLYGON EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000600000000', 'MULTIPOLYGON EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], [ '010700000000000000', 'GEOMETRYCOLLECTION EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XY'}, ], [ '000000000700000000', 'GEOMETRYCOLLECTION EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XY'}, ], /* // XXX: These doesn't work since WKT parser returns 2D geometry instead of 3D/4D ['01e9030000000000000000f87f000000000000f87f000000000000f87f', 'POINT Z EMPTY', { littleEndian: true, ewkb: false, geometryLayout: 'XYZ' }], ['00000003e97ff80000000000007ff80000000000007ff8000000000000', 'POINT Z EMPTY', { littleEndian: false, ewkb: false, geometryLayout: 'XYZ' }], ['0101000080000000000000f87f000000000000f87f000000000000f87f', 'POINT Z EMPTY', { littleEndian: true, ewkb: true, geometryLayout: 'XYZ' }], ['00800000017ff80000000000007ff80000000000007ff8000000000000', 'POINT Z EMPTY', { littleEndian: false, ewkb: true, geometryLayout: 'XYZ' }], */ [ '01ea03000000000000', 'LINESTRING Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ea00000000', 'LINESTRING Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010200008000000000', 'LINESTRING Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000200000000', 'LINESTRING Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01eb03000000000000', 'POLYGON Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003eb00000000', 'POLYGON Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010300008000000000', 'POLYGON Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000300000000', 'POLYGON Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ec03000000000000', 'MULTIPOINT Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ec00000000', 'MULTIPOINT Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010400008000000000', 'MULTIPOINT Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000400000000', 'MULTIPOINT Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ed03000000000000', 'MULTILINESTRING Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ed00000000', 'MULTILINESTRING Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010500008000000000', 'MULTILINESTRING Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000500000000', 'MULTILINESTRING Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ee03000000000000', 'MULTIPOLYGON Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ee00000000', 'MULTIPOLYGON Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010600008000000000', 'MULTIPOLYGON Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000600000000', 'MULTIPOLYGON Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01ef03000000000000', 'GEOMETRYCOLLECTION Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003ef00000000', 'GEOMETRYCOLLECTION Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '010700008000000000', 'GEOMETRYCOLLECTION Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '008000000700000000', 'GEOMETRYCOLLECTION Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], /* // XXX: These doesn't work since WKT parser returns 2D geometry instead of 3D/4D ['01d1070000000000000000f87f000000000000f87f000000000000f87f', 'POINT M EMPTY', { littleEndian: true, ewkb: false, geometryLayout: 'XYM' }], ['00000007d17ff80000000000007ff80000000000007ff8000000000000', 'POINT M EMPTY', { littleEndian: false, ewkb: false, geometryLayout: 'XYM' }], ['0101000040000000000000f87f000000000000f87f000000000000f87f', 'POINT M EMPTY', { littleEndian: true, ewkb: true, geometryLayout: 'XYM' }], ['00400000017ff80000000000007ff80000000000007ff8000000000000', 'POINT M EMPTY', { littleEndian: false, ewkb: true, geometryLayout: 'XYM' }], */ [ '01d207000000000000', 'LINESTRING M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d200000000', 'LINESTRING M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010200004000000000', 'LINESTRING M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000200000000', 'LINESTRING M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d307000000000000', 'POLYGON M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d300000000', 'POLYGON M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010300004000000000', 'POLYGON M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000300000000', 'POLYGON M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d407000000000000', 'MULTIPOINT M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d400000000', 'MULTIPOINT M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010400004000000000', 'MULTIPOINT M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000400000000', 'MULTIPOINT M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d507000000000000', 'MULTILINESTRING M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d500000000', 'MULTILINESTRING M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010500004000000000', 'MULTILINESTRING M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000500000000', 'MULTILINESTRING M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d607000000000000', 'MULTIPOLYGON M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d600000000', 'MULTIPOLYGON M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010600004000000000', 'MULTIPOLYGON M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000600000000', 'MULTIPOLYGON M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01d707000000000000', 'GEOMETRYCOLLECTION M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d700000000', 'GEOMETRYCOLLECTION M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '010700004000000000', 'GEOMETRYCOLLECTION M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '004000000700000000', 'GEOMETRYCOLLECTION M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], /* // XXX: These doesn't work since WKT parser returns 2D geometry instead of 3D/4D ['01b90b0000000000000000f87f000000000000f87f000000000000f87f000000000000f87f', 'POINT ZM EMPTY', { littleEndian: true, ewkb: false, geometryLayout: 'XYZM' }], ['0000000bb97ff80000000000007ff80000000000007ff80000000000007ff8000000000000', 'POINT ZM EMPTY', { littleEndian: false, ewkb: false, geometryLayout: 'XYZM' }], ['01010000c0000000000000f87f000000000000f87f000000000000f87f000000000000f87f', 'POINT ZM EMPTY', { littleEndian: true, ewkb: true, geometryLayout: 'XYZM' }], ['00c00000017ff80000000000007ff80000000000007ff80000000000007ff8000000000000', 'POINT ZM EMPTY', { littleEndian: false, ewkb: true, geometryLayout: 'XYZM' }], */ [ '01ba0b000000000000', 'LINESTRING ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bba00000000', 'LINESTRING ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01020000c000000000', 'LINESTRING ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000200000000', 'LINESTRING ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bb0b000000000000', 'POLYGON ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbb00000000', 'POLYGON ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01030000c000000000', 'POLYGON ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000300000000', 'POLYGON ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bc0b000000000000', 'MULTIPOINT ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbc00000000', 'MULTIPOINT ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01040000c000000000', 'MULTIPOINT ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000400000000', 'MULTIPOINT ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bd0b000000000000', 'MULTILINESTRING ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbd00000000', 'MULTILINESTRING ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01050000c000000000', 'MULTILINESTRING ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000500000000', 'MULTILINESTRING ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01be0b000000000000', 'MULTIPOLYGON ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbe00000000', 'MULTIPOLYGON ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01060000c000000000', 'MULTIPOLYGON ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000600000000', 'MULTIPOLYGON ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], [ '01bf0b000000000000', 'GEOMETRYCOLLECTION ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bbf00000000', 'GEOMETRYCOLLECTION ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01070000c000000000', 'GEOMETRYCOLLECTION ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c000000700000000', 'GEOMETRYCOLLECTION ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], ]; describe('ol.format.WKB', function () { const format = new WKB(); describe('#readProjection(string)', function () { it('returns the default projection', function () { const wkb = '0101000000000000000000F03F0000000000000040'; // POINT(1 2) const projection = format.readProjection(wkb); expect(projection).to.be(undefined); }); it('returns an embed projection', function () { const wkb = '0101000020E6100000000000000000F03F0000000000000040'; // SRID=4326;POINT(1 2) const projection = format.readProjection(wkb); expect(projection.getCode()).to.be('EPSG:4326'); }); }); describe('#readProjection(Uint8Array)', function () { it('returns the default projection', function () { const wkb = new Uint8Array([ // POINT(1 2) 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, ]); const projection = format.readProjection(wkb); expect(projection).to.be(undefined); }); it('returns an embed projection', function () { const wkb = new Uint8Array([ // SRID=4326;POINT(1 2) 0x01, 0x01, 0x00, 0x00, 0x20, 0xe6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, ]); const projection = format.readProjection(wkb); expect(projection.getCode()).to.be('EPSG:4326'); }); }); describe('#readGeometry(string)', function () { it('transforms with dataProjection and featureProjection', function () { const wkb = '0101000000000000000000F03F0000000000000040'; // POINT(1 2) const geom = format.readGeometry(wkb, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); expect(geom.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); }); it('transforms with auto detection of dataProjection', function () { const wkb = '0101000020E6100000000000000000F03F0000000000000040'; // SRID=4326;POINT(1 2) const geom = format.readGeometry(wkb, { featureProjection: 'EPSG:3857', }); expect(geom.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); }); }); describe('#readGeometry(Uint8Array)', function () { it('transforms with dataProjection and featureProjection', function () { const wkb = new Uint8Array([ // POINT(1 2) 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, ]); const geom = format.readGeometry(wkb, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); expect(geom.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); }); it('transforms with auto detection of dataProjection', function () { const wkb = new Uint8Array([ // SRID=4326;POINT(1 2) 0x01, 0x01, 0x00, 0x00, 0x20, 0xe6, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, ]); const geom = format.readGeometry(wkb, { featureProjection: 'EPSG:3857', }); expect(geom.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); }); }); describe('#readGeometry(string)', function () { function compareGeometries(a, b) { expect(a.getType()).to.eql(b.getType()); if (a instanceof GeometryCollection || b instanceof GeometryCollection) { expect(a).to.be.a(GeometryCollection); expect(b).to.be.a(GeometryCollection); const aGeoms = a.getGeometries(); const bGeoms = b.getGeometries(); expect(aGeoms.length).to.eql(bGeoms.length); for (let i = 0; i < aGeoms.length; i++) { compareGeometries(aGeoms[i], bGeoms[i]); } return; } expect(a).to.be.a(SimpleGeometry); expect(b).to.be.a(SimpleGeometry); expect(a.getLayout()).to.eql(b.getLayout()); const aCoords = a.getCoordinates(); const bCoords = b.getCoordinates(); expect(aCoords.length).to.eql(bCoords.length); expect(JSON.stringify(aCoords)).to.eql(JSON.stringify(bCoords)); // compare arrays } // tests for several patterns for (const pair of patterns) { const wkb = pair[0]; const wkt = pair[1]; it('works on ' + wkb + ' (' + wkt + ')', function () { const wkb_result = new WKB().readGeometry(wkb); const wkt_result = new WKT().readGeometry(wkt); compareGeometries(wkb_result, wkt_result); }); } }); describe('#writeGeometry()', function () { it('transforms with dataProjection and featureProjection', function () { const geom = new Point([1, 2]).transform('EPSG:4326', 'EPSG:3857'); const wkb = format.writeGeometry(geom, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); const got = format.readGeometry(wkb).getCoordinates(); expect(got[0]).to.roughlyEqual(1, 1e-6); expect(got[1]).to.roughlyEqual(2, 1e-6); }); // tests for several patterns for (const item of patterns) { const wkb = item[0]; const wkt = item[1]; const opts = item[2]; it('for ' + wkt + ' with opt ' + JSON.stringify(opts), function () { const wkt_result = new WKT().readGeometry(wkt); const wkb_result = new WKB(opts).writeGeometry(wkt_result); expect(wkb_result.toLowerCase()).to.eql(wkb); }); } // XXX: Additional tests for empty POINT Z/M/ZM since WKT parser returns 2D geometry instead of 3D/4D it('returns proper representation for 3D/4D point', function () { const testPatterns = [ [ '01e9030000000000000000f87f000000000000f87f000000000000f87f', 'POINT Z EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZ'}, ], [ '00000003e97ff80000000000007ff80000000000007ff8000000000000', 'POINT Z EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZ'}, ], [ '0101000080000000000000f87f000000000000f87f000000000000f87f', 'POINT Z EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZ'}, ], [ '00800000017ff80000000000007ff80000000000007ff8000000000000', 'POINT Z EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZ'}, ], [ '01d1070000000000000000f87f000000000000f87f000000000000f87f', 'POINT M EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYM'}, ], [ '00000007d17ff80000000000007ff80000000000007ff8000000000000', 'POINT M EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYM'}, ], [ '0101000040000000000000f87f000000000000f87f000000000000f87f', 'POINT M EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYM'}, ], [ '00400000017ff80000000000007ff80000000000007ff8000000000000', 'POINT M EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYM'}, ], [ '01b90b0000000000000000f87f000000000000f87f000000000000f87f000000000000f87f', 'POINT ZM EMPTY', {littleEndian: true, ewkb: false, geometryLayout: 'XYZM'}, ], [ '0000000bb97ff80000000000007ff80000000000007ff80000000000007ff8000000000000', 'POINT ZM EMPTY', {littleEndian: false, ewkb: false, geometryLayout: 'XYZM'}, ], [ '01010000c0000000000000f87f000000000000f87f000000000000f87f000000000000f87f', 'POINT ZM EMPTY', {littleEndian: true, ewkb: true, geometryLayout: 'XYZM'}, ], [ '00c00000017ff80000000000007ff80000000000007ff80000000000007ff8000000000000', 'POINT ZM EMPTY', {littleEndian: false, ewkb: true, geometryLayout: 'XYZM'}, ], ]; for (const item of testPatterns) { const wkb = item[0]; const opts = item[2]; const geom = new Point([], opts.geometryLayout); expect(new WKB(opts).writeGeometry(geom).toLowerCase()).to.eql(wkb); } }); it('detects geometry dimension automatically (common case)', function () { const geom = new GeometryCollection([ new Point([1, 2, 3], 'XYZ'), new Point([1, 2, 4], 'XYZM'), new Point([1, 2, 3, 4], 'XYZM'), ]); const wkb = new WKB().writeGeometry(geom); const geoms = new WKB().readGeometry(wkb).getGeometries(); for (let i = 0; i < geoms.length; i++) { expect(geoms[i].getLayout()).to.eql('XYZ'); } }); it('detects geometry dimension automatically (incompatible case)', function () { const geom = new GeometryCollection([ new Point([1, 2, 3], 'XYZ'), new Point([1, 2, 4], 'XYM'), new Point([1, 2, 3, 4], 'XYZM'), ]); const wkb = new WKB().writeGeometry(geom); const geoms = new WKB().readGeometry(wkb).getGeometries(); for (let i = 0; i < geoms.length; i++) { expect(geoms[i].getLayout()).to.eql('XY'); } }); it('interpolates missing Z value', function () { const geom = new GeometryCollection([ new Point([1, 2, 3], 'XY'), // 3rd coord is intentional new Point([1, 2, 4], 'XYM'), new Point([1, 2, 3, 4], 'XYZM'), ]); const wkb = new WKB({nodataZ: 98, geometryLayout: 'XYZ'}).writeGeometry( geom ); // GEOMETRYCOLLECTION Z (POINT Z (1 2 98),POINT Z (1 2 98),POINT Z (1 2 3)) expect(wkb).to.eql( '0107000080030000000101000080000000000000F03F000000000000004000000000008058400101000080000000000000F03F000000000000004000000000008058400101000080000000000000F03F00000000000000400000000000000840' ); }); it('interpolates missing M value', function () { const geom = new GeometryCollection([ new Point([1, 2, 3], 'XY'), // 3rd coord is intentional new Point([1, 2, 4], 'XYM'), new Point([1, 2, 3, 4], 'XYZM'), ]); const wkb = new WKB({nodataM: 99, geometryLayout: 'XYM'}).writeGeometry( geom ); // GEOMETRYCOLLECTION M (POINT M (1 2 99),POINT M (1 2 4),POINT M (1 2 4)) expect(wkb).to.eql( '0107000040030000000101000040000000000000F03F00000000000000400000000000C058400101000040000000000000F03F000000000000004000000000000010400101000040000000000000F03F00000000000000400000000000001040' ); }); it('interpolates missing Z and M value', function () { const geom = new GeometryCollection([ new Point([1, 2, 3], 'XY'), // 3rd coord is intentional new Point([1, 2, 4], 'XYM'), new Point([1, 2, 3, 4], 'XYZM'), ]); const wkb = new WKB({ nodataZ: 98, nodataM: 99, geometryLayout: 'XYZM', }).writeGeometry(geom); // GEOMETRYCOLLECTION ZM (POINT ZM (1 2 98 99),POINT ZM (1 2 98 4),POINT ZM (1 2 3 4)) expect(wkb).to.eql( '01070000C00300000001010000C0000000000000F03F000000000000004000000000008058400000000000C0584001010000C0000000000000F03F00000000000000400000000000805840000000000000104001010000C0000000000000F03F000000000000004000000000000008400000000000001040' ); }); }); describe('#readFeature()', function () { it('transforms with dataProjection and featureProjection', function () { const wkb = '0101000000000000000000F03F0000000000000040'; // POINT(1 2) const feature = format.readFeature(wkb, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); const geom = feature.getGeometry(); expect(geom.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); }); }); describe('#writeFeature()', function () { it('transforms with dataProjection and featureProjection', function () { const feature = new Feature( new Point([1, 2]).transform('EPSG:4326', 'EPSG:3857') ); const wkt = format.writeFeature(feature, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); const gotFeature = format.readFeature(wkt); expect(gotFeature).to.be.a(Feature); const got = gotFeature.getGeometry().getCoordinates(); expect(got[0]).to.roughlyEqual(1, 1e-6); expect(got[1]).to.roughlyEqual(2, 1e-6); }); }); describe('#readFeatures()', function () { const format = new WKB({splitCollection: true}); it('transforms with dataProjection and featureProjection', function () { const wkb = '0107000000020000000101000000000000000000F03F0000000000000040010100000000000000000010400000000000001440'; // GEOMETRYCOLLECTION(POINT(1 2),POINT(4 5)) const features = format.readFeatures(wkb, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); expect(features.length).to.eql(2); const point1 = features[0].getGeometry(); const point2 = features[1].getGeometry(); expect(point1.getType()).to.eql('Point'); expect(point2.getType()).to.eql('Point'); expect(point1.getCoordinates()).to.eql( transform([1, 2], 'EPSG:4326', 'EPSG:3857') ); expect(point2.getCoordinates()).to.eql( transform([4, 5], 'EPSG:4326', 'EPSG:3857') ); }); }); describe('#writeFeatures()', function () { const format = new WKB({splitCollection: true}); it('transforms with dataProjection and featureProjection', function () { const features = [ new Feature(new Point([1, 2]).transform('EPSG:4326', 'EPSG:3857')), new Feature(new Point([4, 5]).transform('EPSG:4326', 'EPSG:3857')), ]; const wkt = format.writeFeatures(features, { dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857', }); const gotFeatures = format.readFeatures(wkt); expect(gotFeatures).to.have.length(2); expect(gotFeatures[0].getGeometry().getCoordinates()[0]).to.roughlyEqual( 1, 1e-6 ); expect(gotFeatures[0].getGeometry().getCoordinates()[1]).to.roughlyEqual( 2, 1e-6 ); expect(gotFeatures[1].getGeometry().getCoordinates()[0]).to.roughlyEqual( 4, 1e-6 ); expect(gotFeatures[1].getGeometry().getCoordinates()[1]).to.roughlyEqual( 5, 1e-6 ); }); }); });