@loaders.gl/wkt 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +6 -4
- package/dist/index.cjs +6 -4
- package/dist/lib/encode-wkb.d.ts +1 -3
- package/dist/lib/encode-wkb.d.ts.map +1 -1
- package/dist/lib/encode-wkb.js +0 -3
- package/dist/lib/encode-wkb.js.map +1 -1
- package/dist/wkb-writer.d.ts +10 -0
- package/dist/wkb-writer.d.ts.map +1 -1
- package/dist/wkb-writer.js +6 -1
- package/dist/wkb-writer.js.map +1 -1
- package/dist/wkt-worker.js +32 -24
- package/package.json +4 -4
- package/src/lib/encode-wkb.ts +1 -10
- package/src/wkb-writer.ts +19 -1
package/dist/dist.dev.js
CHANGED
|
@@ -1132,9 +1132,6 @@ var __exports__ = (() => {
|
|
|
1132
1132
|
if (geometry.type === "Feature") {
|
|
1133
1133
|
geometry = geometry.geometry;
|
|
1134
1134
|
}
|
|
1135
|
-
if ("wkb" in options) {
|
|
1136
|
-
options = options.wkb;
|
|
1137
|
-
}
|
|
1138
1135
|
switch (geometry.type) {
|
|
1139
1136
|
case "Point":
|
|
1140
1137
|
return encodePoint(geometry.coordinates, options);
|
|
@@ -1376,12 +1373,17 @@ var __exports__ = (() => {
|
|
|
1376
1373
|
module: "wkt",
|
|
1377
1374
|
version: VERSION,
|
|
1378
1375
|
extensions: ["wkb"],
|
|
1379
|
-
encodeSync: encodeWKB,
|
|
1380
1376
|
options: {
|
|
1381
1377
|
wkb: {
|
|
1382
1378
|
hasZ: false,
|
|
1383
1379
|
hasM: false
|
|
1384
1380
|
}
|
|
1381
|
+
},
|
|
1382
|
+
async encode(data, options) {
|
|
1383
|
+
return encodeWKB(data, options?.wkb);
|
|
1384
|
+
},
|
|
1385
|
+
encodeSync(data, options) {
|
|
1386
|
+
return encodeWKB(data, options?.wkb);
|
|
1385
1387
|
}
|
|
1386
1388
|
};
|
|
1387
1389
|
|
package/dist/index.cjs
CHANGED
|
@@ -986,9 +986,6 @@ function encodeWKB(geometry, options = {}) {
|
|
|
986
986
|
if (geometry.type === "Feature") {
|
|
987
987
|
geometry = geometry.geometry;
|
|
988
988
|
}
|
|
989
|
-
if ("wkb" in options) {
|
|
990
|
-
options = options.wkb;
|
|
991
|
-
}
|
|
992
989
|
switch (geometry.type) {
|
|
993
990
|
case "Point":
|
|
994
991
|
return encodePoint(geometry.coordinates, options);
|
|
@@ -1226,12 +1223,17 @@ var WKBWriter = {
|
|
|
1226
1223
|
module: "wkt",
|
|
1227
1224
|
version: VERSION,
|
|
1228
1225
|
extensions: ["wkb"],
|
|
1229
|
-
encodeSync: encodeWKB,
|
|
1230
1226
|
options: {
|
|
1231
1227
|
wkb: {
|
|
1232
1228
|
hasZ: false,
|
|
1233
1229
|
hasM: false
|
|
1234
1230
|
}
|
|
1231
|
+
},
|
|
1232
|
+
async encode(data, options) {
|
|
1233
|
+
return encodeWKB(data, options == null ? void 0 : options.wkb);
|
|
1234
|
+
},
|
|
1235
|
+
encodeSync(data, options) {
|
|
1236
|
+
return encodeWKB(data, options == null ? void 0 : options.wkb);
|
|
1235
1237
|
}
|
|
1236
1238
|
};
|
|
1237
1239
|
|
package/dist/lib/encode-wkb.d.ts
CHANGED
|
@@ -28,8 +28,6 @@ type WKBOptions = {
|
|
|
28
28
|
* @param geojson A GeoJSON Feature or Geometry
|
|
29
29
|
* @returns string
|
|
30
30
|
*/
|
|
31
|
-
export declare function encodeWKB(geometry: Geometry | Feature, options?: WKBOptions
|
|
32
|
-
wkb: WKBOptions;
|
|
33
|
-
}): ArrayBuffer;
|
|
31
|
+
export declare function encodeWKB(geometry: Geometry | Feature, options?: WKBOptions): ArrayBuffer;
|
|
34
32
|
export {};
|
|
35
33
|
//# sourceMappingURL=encode-wkb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode-wkb.d.ts","sourceRoot":"","sources":["../../src/lib/encode-wkb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAQT,MAAM,oBAAoB,CAAC;AAI5B;;;GAGG;AACH,oBAAY,GAAG;IACb,KAAK,IAAI;IACT,UAAU,IAAI;IACd,OAAO,IAAI;IACX,UAAU,IAAI;IACd,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,kBAAkB,IAAI;CACvB;AAED;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,SAAS,
|
|
1
|
+
{"version":3,"file":"encode-wkb.d.ts","sourceRoot":"","sources":["../../src/lib/encode-wkb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,OAAO,EACP,QAAQ,EAQT,MAAM,oBAAoB,CAAC;AAI5B;;;GAGG;AACH,oBAAY,GAAG;IACb,KAAK,IAAI;IACT,UAAU,IAAI;IACd,OAAO,IAAI;IACX,UAAU,IAAI;IACd,eAAe,IAAI;IACnB,YAAY,IAAI;IAChB,kBAAkB,IAAI;CACvB;AAED;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,4CAA4C;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAE,UAAe,GAAG,WAAW,CAwB7F"}
|
package/dist/lib/encode-wkb.js
CHANGED
|
@@ -14,9 +14,6 @@ export function encodeWKB(geometry) {
|
|
|
14
14
|
if (geometry.type === 'Feature') {
|
|
15
15
|
geometry = geometry.geometry;
|
|
16
16
|
}
|
|
17
|
-
if ('wkb' in options) {
|
|
18
|
-
options = options.wkb;
|
|
19
|
-
}
|
|
20
17
|
switch (geometry.type) {
|
|
21
18
|
case 'Point':
|
|
22
19
|
return encodePoint(geometry.coordinates, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode-wkb.js","names":["BinaryWriter","WKB","encodeWKB","geometry","options","arguments","length","undefined","type","wkb","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","Polygon","exteriorRing","interiorRings","interiorRing","multiPoint","points","MultiPoint","point","writeBuffer","multiLineString","lineStrings","MultiLineString","lineString","encodedLineString","multiPolygon","polygons","MultiPolygon","polygon","encodedPolygon","collection","GeometryCollection","geometries","geometryType","srid","dimensionType"],"sources":["../../src/lib/encode-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\n\nimport type {\n Feature,\n Geometry,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection\n} from '@loaders.gl/schema';\n\nimport {BinaryWriter} from './utils/binary-writer';\n\n/**\n * Integer code for geometry type\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport enum WKB {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/**\n * Options for encodeWKB\n */\ntype WKBOptions = {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n};\n\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport function encodeWKB(\n geometry: Geometry | Feature,\n options: WKBOptions | {wkb: WKBOptions} = {}\n): ArrayBuffer {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n // Options should be wrapped in a `wkb` key, but we allow top-level options here for backwards\n // compatibility\n if ('wkb' in options) {\n options = options.wkb;\n }\n\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry: Geometry, options: WKBOptions): number {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates: Point['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPointSize(options));\n\n writer.writeInt8(1);\n writeWkbType(writer, WKB.Point, options);\n\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n } else {\n writeCoordinate(writer, coordinates, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Write coordinate to buffer */\nfunction writeCoordinate(\n writer: BinaryWriter,\n coordinate: Point['coordinates'],\n options: WKBOptions\n): void {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n\n/** Get encoded size of Point geometry */\nfunction getPointSize(options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(\n coordinates: LineString['coordinates'],\n options: WKBOptions\n): ArrayBuffer {\n const size = getLineStringSize(coordinates, options);\n\n const writer = new BinaryWriter(size);\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates: LineString['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates: Polygon['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.Polygon, options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n } else {\n writer.writeUInt32LE(0);\n }\n\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates: Polygon['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n let size = 1 + 4 + 4;\n\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n\n return size;\n}\n\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint: MultiPoint, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint: MultiPoint, options: WKBOptions) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString: MultiLineString, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString: MultiLineString, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n\n return size;\n}\n\nfunction encodeMultiPolygon(multiPolygon: MultiPolygon, options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getMultiPolygonSize(multiPolygon: MultiPolygon, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n\n return size;\n}\n\nfunction encodeGeometryCollection(\n collection: GeometryCollection,\n options: WKBOptions\n): ArrayBuffer {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = encodeWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getGeometryCollectionSize(collection: GeometryCollection, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n\n return size;\n}\n\n// HELPERS\n\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer: BinaryWriter, geometryType: number, options: WKBOptions): void {\n const {hasZ, hasM, srid} = options;\n\n let dimensionType = 0;\n\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n } else if (hasZ) {\n dimensionType += 1000;\n } else if (hasM) {\n dimensionType += 2000;\n }\n } else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options: WKBOptions): number {\n let coordinateSize = 16;\n\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n\n return coordinateSize;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encode-wkb.js","names":["BinaryWriter","WKB","encodeWKB","geometry","options","arguments","length","undefined","type","encodePoint","coordinates","encodeLineString","encodePolygon","encodeMultiPoint","encodeMultiPolygon","encodeMultiLineString","encodeGeometryCollection","exhaustiveCheck","Error","getGeometrySize","getPointSize","getLineStringSize","getPolygonSize","getMultiPointSize","getMultiPolygonSize","getMultiLineStringSize","getGeometryCollectionSize","writer","writeInt8","writeWkbType","Point","writeDoubleLE","NaN","hasZ","hasM","writeCoordinate","arrayBuffer","coordinate","coordinateSize","getCoordinateSize","size","LineString","writeUInt32LE","Polygon","exteriorRing","interiorRings","interiorRing","multiPoint","points","MultiPoint","point","writeBuffer","multiLineString","lineStrings","MultiLineString","lineString","encodedLineString","multiPolygon","polygons","MultiPolygon","polygon","encodedPolygon","collection","GeometryCollection","geometries","geometryType","srid","dimensionType"],"sources":["../../src/lib/encode-wkb.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\n\nimport type {\n Feature,\n Geometry,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection\n} from '@loaders.gl/schema';\n\nimport {BinaryWriter} from './utils/binary-writer';\n\n/**\n * Integer code for geometry type\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport enum WKB {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/**\n * Options for encodeWKB\n */\ntype WKBOptions = {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n};\n\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport function encodeWKB(geometry: Geometry | Feature, options: WKBOptions = {}): ArrayBuffer {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry: Geometry, options: WKBOptions): number {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates: Point['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPointSize(options));\n\n writer.writeInt8(1);\n writeWkbType(writer, WKB.Point, options);\n\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n } else {\n writeCoordinate(writer, coordinates, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Write coordinate to buffer */\nfunction writeCoordinate(\n writer: BinaryWriter,\n coordinate: Point['coordinates'],\n options: WKBOptions\n): void {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n\n/** Get encoded size of Point geometry */\nfunction getPointSize(options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(\n coordinates: LineString['coordinates'],\n options: WKBOptions\n): ArrayBuffer {\n const size = getLineStringSize(coordinates, options);\n\n const writer = new BinaryWriter(size);\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates: LineString['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates: Polygon['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.Polygon, options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n } else {\n writer.writeUInt32LE(0);\n }\n\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates: Polygon['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing, ...interiorRings] = coordinates;\n\n let size = 1 + 4 + 4;\n\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n\n return size;\n}\n\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint: MultiPoint, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint: MultiPoint, options: WKBOptions) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString: MultiLineString, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString: MultiLineString, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n\n return size;\n}\n\nfunction encodeMultiPolygon(multiPolygon: MultiPolygon, options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getMultiPolygonSize(multiPolygon: MultiPolygon, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n\n return size;\n}\n\nfunction encodeGeometryCollection(\n collection: GeometryCollection,\n options: WKBOptions\n): ArrayBuffer {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKB.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = encodeWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getGeometryCollectionSize(collection: GeometryCollection, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n\n return size;\n}\n\n// HELPERS\n\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer: BinaryWriter, geometryType: number, options: WKBOptions): void {\n const {hasZ, hasM, srid} = options;\n\n let dimensionType = 0;\n\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n } else if (hasZ) {\n dimensionType += 1000;\n } else if (hasM) {\n dimensionType += 2000;\n }\n } else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options: WKBOptions): number {\n let coordinateSize = 16;\n\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n\n return coordinateSize;\n}\n"],"mappings":"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"}
|
package/dist/wkb-writer.d.ts
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import type { Writer, WriterOptions } from '@loaders.gl/loader-utils';
|
|
2
2
|
import type { Geometry, Feature } from '@loaders.gl/schema';
|
|
3
|
+
export type WKBWriterOptions = WriterOptions & {
|
|
4
|
+
wkb?: {
|
|
5
|
+
/** Does the GeoJSON input have Z values? */
|
|
6
|
+
hasZ?: boolean;
|
|
7
|
+
/** Does the GeoJSON input have M values? */
|
|
8
|
+
hasM?: boolean;
|
|
9
|
+
/** Spatial reference for input GeoJSON */
|
|
10
|
+
srid?: any;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
3
13
|
/**
|
|
4
14
|
* WKB exporter
|
|
5
15
|
*/
|
package/dist/wkb-writer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wkb-writer.d.ts","sourceRoot":"","sources":["../src/wkb-writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"wkb-writer.d.ts","sourceRoot":"","sources":["../src/wkb-writer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAC,QAAQ,EAAE,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,GAAG,CAAC,EAAE;QACJ,4CAA4C;QAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;QAEf,4CAA4C;QAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;QAEf,0CAA0C;QAC1C,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,CAkBtE,CAAC"}
|
package/dist/wkb-writer.js
CHANGED
|
@@ -6,12 +6,17 @@ export const WKBWriter = {
|
|
|
6
6
|
module: 'wkt',
|
|
7
7
|
version: VERSION,
|
|
8
8
|
extensions: ['wkb'],
|
|
9
|
-
encodeSync: encodeWKB,
|
|
10
9
|
options: {
|
|
11
10
|
wkb: {
|
|
12
11
|
hasZ: false,
|
|
13
12
|
hasM: false
|
|
14
13
|
}
|
|
14
|
+
},
|
|
15
|
+
async encode(data, options) {
|
|
16
|
+
return encodeWKB(data, options === null || options === void 0 ? void 0 : options.wkb);
|
|
17
|
+
},
|
|
18
|
+
encodeSync(data, options) {
|
|
19
|
+
return encodeWKB(data, options === null || options === void 0 ? void 0 : options.wkb);
|
|
15
20
|
}
|
|
16
21
|
};
|
|
17
22
|
//# sourceMappingURL=wkb-writer.js.map
|
package/dist/wkb-writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wkb-writer.js","names":["VERSION","encodeWKB","WKBWriter","name","id","module","version","extensions","
|
|
1
|
+
{"version":3,"file":"wkb-writer.js","names":["VERSION","encodeWKB","WKBWriter","name","id","module","version","extensions","options","wkb","hasZ","hasM","encode","data","encodeSync"],"sources":["../src/wkb-writer.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {Writer, WriterOptions} from '@loaders.gl/loader-utils';\nimport {VERSION} from './lib/utils/version';\nimport {encodeWKB} from './lib/encode-wkb';\nimport type {Geometry, Feature} from '@loaders.gl/schema';\n\nexport type WKBWriterOptions = WriterOptions & {\n wkb?: {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n };\n};\n\n/**\n * WKB exporter\n */\nexport const WKBWriter: Writer<Geometry | Feature, never, WriterOptions> = {\n name: 'WKB (Well Known Binary)',\n id: 'wkb',\n module: 'wkt',\n version: VERSION,\n extensions: ['wkb'],\n options: {\n wkb: {\n hasZ: false,\n hasM: false\n }\n },\n async encode(data: Geometry | Feature, options?: WriterOptions): Promise<ArrayBuffer> {\n return encodeWKB(data, options?.wkb);\n },\n encodeSync(data: Geometry | Feature, options?: WriterOptions): ArrayBuffer {\n return encodeWKB(data, options?.wkb);\n }\n};\n"],"mappings":"SAIQA,OAAO;AAAA,SACPC,SAAS;AAmBjB,OAAO,MAAMC,SAA2D,GAAG;EACzEC,IAAI,EAAE,yBAAyB;EAC/BC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEN,OAAO;EAChBO,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,IAAI,EAAE,KAAK;MACXC,IAAI,EAAE;IACR;EACF,CAAC;EACD,MAAMC,MAAMA,CAACC,IAAwB,EAAEL,OAAuB,EAAwB;IACpF,OAAOP,SAAS,CAACY,IAAI,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EACtC,CAAC;EACDK,UAAUA,CAACD,IAAwB,EAAEL,OAAuB,EAAe;IACzE,OAAOP,SAAS,CAACY,IAAI,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EACtC;AACF,CAAC"}
|
package/dist/wkt-worker.js
CHANGED
|
@@ -36,61 +36,69 @@
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// ../worker-utils/src/lib/worker-farm/worker-body.ts
|
|
39
|
-
function getParentPort() {
|
|
39
|
+
async function getParentPort() {
|
|
40
40
|
let parentPort;
|
|
41
41
|
try {
|
|
42
42
|
eval("globalThis.parentPort = require('worker_threads').parentPort");
|
|
43
43
|
parentPort = globalThis.parentPort;
|
|
44
44
|
} catch {
|
|
45
|
+
try {
|
|
46
|
+
eval("globalThis.workerThreadsPromise = import('worker_threads')");
|
|
47
|
+
const workerThreads = await globalThis.workerThreadsPromise;
|
|
48
|
+
parentPort = workerThreads.parentPort;
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error(error.message);
|
|
51
|
+
}
|
|
45
52
|
}
|
|
46
53
|
return parentPort;
|
|
47
54
|
}
|
|
48
55
|
var onMessageWrapperMap = /* @__PURE__ */ new Map();
|
|
49
56
|
var WorkerBody = class {
|
|
50
57
|
/** Check that we are actually in a worker thread */
|
|
51
|
-
static inWorkerThread() {
|
|
52
|
-
return typeof self !== "undefined" || Boolean(getParentPort());
|
|
58
|
+
static async inWorkerThread() {
|
|
59
|
+
return typeof self !== "undefined" || Boolean(await getParentPort());
|
|
53
60
|
}
|
|
54
61
|
/*
|
|
55
62
|
* (type: WorkerMessageType, payload: WorkerMessagePayload) => any
|
|
56
63
|
*/
|
|
57
64
|
static set onmessage(onMessage) {
|
|
58
|
-
function handleMessage(message) {
|
|
59
|
-
const
|
|
60
|
-
const { type, payload } =
|
|
65
|
+
async function handleMessage(message) {
|
|
66
|
+
const parentPort2 = await getParentPort();
|
|
67
|
+
const { type, payload } = parentPort2 ? message : message.data;
|
|
61
68
|
onMessage(type, payload);
|
|
62
69
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
getParentPort().then((parentPort2) => {
|
|
71
|
+
if (parentPort2) {
|
|
72
|
+
parentPort2.on("message", handleMessage);
|
|
73
|
+
parentPort2.on("exit", () => console.debug("Node worker closing"));
|
|
74
|
+
} else {
|
|
75
|
+
globalThis.onmessage = handleMessage;
|
|
76
|
+
}
|
|
77
|
+
});
|
|
70
78
|
}
|
|
71
|
-
static addEventListener(onMessage) {
|
|
79
|
+
static async addEventListener(onMessage) {
|
|
72
80
|
let onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
73
81
|
if (!onMessageWrapper) {
|
|
74
|
-
onMessageWrapper = (message) => {
|
|
82
|
+
onMessageWrapper = async (message) => {
|
|
75
83
|
if (!isKnownMessage(message)) {
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
78
|
-
const parentPort3 = getParentPort();
|
|
86
|
+
const parentPort3 = await getParentPort();
|
|
79
87
|
const { type, payload } = parentPort3 ? message : message.data;
|
|
80
88
|
onMessage(type, payload);
|
|
81
89
|
};
|
|
82
90
|
}
|
|
83
|
-
const parentPort2 = getParentPort();
|
|
91
|
+
const parentPort2 = await getParentPort();
|
|
84
92
|
if (parentPort2) {
|
|
85
93
|
console.error("not implemented");
|
|
86
94
|
} else {
|
|
87
95
|
globalThis.addEventListener("message", onMessageWrapper);
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
|
-
static removeEventListener(onMessage) {
|
|
98
|
+
static async removeEventListener(onMessage) {
|
|
91
99
|
const onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
92
100
|
onMessageWrapperMap.delete(onMessage);
|
|
93
|
-
const parentPort2 = getParentPort();
|
|
101
|
+
const parentPort2 = await getParentPort();
|
|
94
102
|
if (parentPort2) {
|
|
95
103
|
console.error("not implemented");
|
|
96
104
|
} else {
|
|
@@ -102,10 +110,10 @@
|
|
|
102
110
|
* @param type
|
|
103
111
|
* @param payload
|
|
104
112
|
*/
|
|
105
|
-
static postMessage(type, payload) {
|
|
113
|
+
static async postMessage(type, payload) {
|
|
106
114
|
const data = { source: "loaders.gl", type, payload };
|
|
107
115
|
const transferList = getTransferList(payload);
|
|
108
|
-
const parentPort2 = getParentPort();
|
|
116
|
+
const parentPort2 = await getParentPort();
|
|
109
117
|
if (parentPort2) {
|
|
110
118
|
parentPort2.postMessage(data, transferList);
|
|
111
119
|
} else {
|
|
@@ -120,8 +128,8 @@
|
|
|
120
128
|
|
|
121
129
|
// ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
|
|
122
130
|
var requestId = 0;
|
|
123
|
-
function createLoaderWorker(loader) {
|
|
124
|
-
if (!WorkerBody.inWorkerThread()) {
|
|
131
|
+
async function createLoaderWorker(loader) {
|
|
132
|
+
if (!await WorkerBody.inWorkerThread()) {
|
|
125
133
|
return;
|
|
126
134
|
}
|
|
127
135
|
WorkerBody.onmessage = async (type, payload) => {
|
|
@@ -200,7 +208,7 @@
|
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
// src/lib/utils/version.ts
|
|
203
|
-
var VERSION = true ? "4.0.
|
|
211
|
+
var VERSION = true ? "4.0.2" : "latest";
|
|
204
212
|
|
|
205
213
|
// src/lib/parse-wkt.ts
|
|
206
214
|
var numberRegexp = /[-+]?([0-9]*\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/wkt",
|
|
3
3
|
"description": "Loader and Writer for the WKT (Well Known Text) Format",
|
|
4
|
-
"version": "4.0.
|
|
4
|
+
"version": "4.0.2",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"publishConfig": {
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"fuzzer": "^0.2.1"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@loaders.gl/loader-utils": "4.0.
|
|
47
|
-
"@loaders.gl/schema": "4.0.
|
|
46
|
+
"@loaders.gl/loader-utils": "4.0.2",
|
|
47
|
+
"@loaders.gl/schema": "4.0.2"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "471058d109d5652f28c32c1f296fd632f9a5c806"
|
|
50
50
|
}
|
package/src/lib/encode-wkb.ts
CHANGED
|
@@ -50,20 +50,11 @@ type WKBOptions = {
|
|
|
50
50
|
* @param geojson A GeoJSON Feature or Geometry
|
|
51
51
|
* @returns string
|
|
52
52
|
*/
|
|
53
|
-
export function encodeWKB(
|
|
54
|
-
geometry: Geometry | Feature,
|
|
55
|
-
options: WKBOptions | {wkb: WKBOptions} = {}
|
|
56
|
-
): ArrayBuffer {
|
|
53
|
+
export function encodeWKB(geometry: Geometry | Feature, options: WKBOptions = {}): ArrayBuffer {
|
|
57
54
|
if (geometry.type === 'Feature') {
|
|
58
55
|
geometry = geometry.geometry;
|
|
59
56
|
}
|
|
60
57
|
|
|
61
|
-
// Options should be wrapped in a `wkb` key, but we allow top-level options here for backwards
|
|
62
|
-
// compatibility
|
|
63
|
-
if ('wkb' in options) {
|
|
64
|
-
options = options.wkb;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
58
|
switch (geometry.type) {
|
|
68
59
|
case 'Point':
|
|
69
60
|
return encodePoint(geometry.coordinates, options);
|
package/src/wkb-writer.ts
CHANGED
|
@@ -6,6 +6,19 @@ import {VERSION} from './lib/utils/version';
|
|
|
6
6
|
import {encodeWKB} from './lib/encode-wkb';
|
|
7
7
|
import type {Geometry, Feature} from '@loaders.gl/schema';
|
|
8
8
|
|
|
9
|
+
export type WKBWriterOptions = WriterOptions & {
|
|
10
|
+
wkb?: {
|
|
11
|
+
/** Does the GeoJSON input have Z values? */
|
|
12
|
+
hasZ?: boolean;
|
|
13
|
+
|
|
14
|
+
/** Does the GeoJSON input have M values? */
|
|
15
|
+
hasM?: boolean;
|
|
16
|
+
|
|
17
|
+
/** Spatial reference for input GeoJSON */
|
|
18
|
+
srid?: any;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
9
22
|
/**
|
|
10
23
|
* WKB exporter
|
|
11
24
|
*/
|
|
@@ -15,11 +28,16 @@ export const WKBWriter: Writer<Geometry | Feature, never, WriterOptions> = {
|
|
|
15
28
|
module: 'wkt',
|
|
16
29
|
version: VERSION,
|
|
17
30
|
extensions: ['wkb'],
|
|
18
|
-
encodeSync: encodeWKB,
|
|
19
31
|
options: {
|
|
20
32
|
wkb: {
|
|
21
33
|
hasZ: false,
|
|
22
34
|
hasM: false
|
|
23
35
|
}
|
|
36
|
+
},
|
|
37
|
+
async encode(data: Geometry | Feature, options?: WriterOptions): Promise<ArrayBuffer> {
|
|
38
|
+
return encodeWKB(data, options?.wkb);
|
|
39
|
+
},
|
|
40
|
+
encodeSync(data: Geometry | Feature, options?: WriterOptions): ArrayBuffer {
|
|
41
|
+
return encodeWKB(data, options?.wkb);
|
|
24
42
|
}
|
|
25
43
|
};
|