Files
openlayers/test/browser/spec/ol/format/wkb.test.js
2021-04-28 09:23:33 -07:00

1451 lines
65 KiB
JavaScript

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
);
});
});
});