@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 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
 
@@ -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,CACvB,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAC5B,OAAO,GAAE,UAAU,GAAG;IAAC,GAAG,EAAE,UAAU,CAAA;CAAM,GAC3C,WAAW,CA8Bb"}
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"}
@@ -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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"}
@@ -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
  */
@@ -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,CAatE,CAAC"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"wkb-writer.js","names":["VERSION","encodeWKB","WKBWriter","name","id","module","version","extensions","encodeSync","options","wkb","hasZ","hasM"],"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\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 encodeSync: encodeWKB,\n options: {\n wkb: {\n hasZ: false,\n hasM: false\n }\n }\n};\n"],"mappings":"SAIQA,OAAO;AAAA,SACPC,SAAS;AAMjB,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,UAAU,EAAEP,SAAS;EACrBQ,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,IAAI,EAAE,KAAK;MACXC,IAAI,EAAE;IACR;EACF;AACF,CAAC"}
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"}
@@ -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 parentPort3 = getParentPort();
60
- const { type, payload } = parentPort3 ? message : message.data;
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
- const parentPort2 = getParentPort();
64
- if (parentPort2) {
65
- parentPort2.on("message", handleMessage);
66
- parentPort2.on("exit", () => console.debug("Node worker closing"));
67
- } else {
68
- globalThis.onmessage = handleMessage;
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.1" : "latest";
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.1",
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.1",
47
- "@loaders.gl/schema": "4.0.1"
46
+ "@loaders.gl/loader-utils": "4.0.2",
47
+ "@loaders.gl/schema": "4.0.2"
48
48
  },
49
- "gitHead": "765e5a26a6bf3f2cc02cabffc4a1e3665ec92a53"
49
+ "gitHead": "471058d109d5652f28c32c1f296fd632f9a5c806"
50
50
  }
@@ -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
  };