@loaders.gl/wkt 4.2.0-alpha.4 → 4.2.0-alpha.5

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.
Files changed (73) hide show
  1. package/dist/dist.dev.js +133 -220
  2. package/dist/dist.min.js +10 -0
  3. package/dist/hex-wkb-loader.d.ts +1 -1
  4. package/dist/hex-wkb-loader.d.ts.map +1 -1
  5. package/dist/hex-wkb-loader.js +44 -28
  6. package/dist/index.cjs +77 -58
  7. package/dist/index.cjs.map +7 -0
  8. package/dist/index.d.ts +14 -14
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +4 -1
  11. package/dist/lib/encode-twkb.js +158 -143
  12. package/dist/lib/encode-wkb.js +247 -211
  13. package/dist/lib/encode-wkt-crs.d.ts +1 -1
  14. package/dist/lib/encode-wkt-crs.d.ts.map +1 -1
  15. package/dist/lib/encode-wkt-crs.js +32 -18
  16. package/dist/lib/encode-wkt.js +35 -27
  17. package/dist/lib/parse-hex-wkb.js +1 -2
  18. package/dist/lib/parse-twkb.js +215 -218
  19. package/dist/lib/parse-wkb-header.js +124 -95
  20. package/dist/lib/parse-wkb.d.ts +1 -1
  21. package/dist/lib/parse-wkb.d.ts.map +1 -1
  22. package/dist/lib/parse-wkb.js +210 -235
  23. package/dist/lib/parse-wkt-crs.js +110 -86
  24. package/dist/lib/parse-wkt.js +251 -185
  25. package/dist/lib/utils/base64-encoder.js +151 -5
  26. package/dist/lib/utils/binary-reader.js +63 -64
  27. package/dist/lib/utils/binary-writer.js +115 -109
  28. package/dist/lib/utils/hex-encoder.js +46 -32
  29. package/dist/lib/utils/hex-transcoder.js +40 -24
  30. package/dist/lib/utils/version.js +6 -1
  31. package/dist/twkb-loader.js +26 -17
  32. package/dist/twkb-writer.js +18 -13
  33. package/dist/wkb-loader.js +26 -17
  34. package/dist/wkb-writer.js +22 -17
  35. package/dist/wkt-crs-loader.d.ts +1 -1
  36. package/dist/wkt-crs-loader.d.ts.map +1 -1
  37. package/dist/wkt-crs-loader.js +22 -15
  38. package/dist/wkt-crs-writer.d.ts +2 -2
  39. package/dist/wkt-crs-writer.d.ts.map +1 -1
  40. package/dist/wkt-crs-writer.js +23 -15
  41. package/dist/wkt-loader.js +28 -20
  42. package/dist/wkt-writer.js +19 -14
  43. package/dist/workers/wkb-worker.js +3 -1
  44. package/dist/workers/wkt-worker.js +3 -1
  45. package/package.json +10 -6
  46. package/dist/hex-wkb-loader.js.map +0 -1
  47. package/dist/index.js.map +0 -1
  48. package/dist/lib/encode-twkb.js.map +0 -1
  49. package/dist/lib/encode-wkb.js.map +0 -1
  50. package/dist/lib/encode-wkt-crs.js.map +0 -1
  51. package/dist/lib/encode-wkt.js.map +0 -1
  52. package/dist/lib/parse-hex-wkb.js.map +0 -1
  53. package/dist/lib/parse-twkb.js.map +0 -1
  54. package/dist/lib/parse-wkb-header.js.map +0 -1
  55. package/dist/lib/parse-wkb.js.map +0 -1
  56. package/dist/lib/parse-wkt-crs.js.map +0 -1
  57. package/dist/lib/parse-wkt.js.map +0 -1
  58. package/dist/lib/utils/base64-encoder.js.map +0 -1
  59. package/dist/lib/utils/binary-reader.js.map +0 -1
  60. package/dist/lib/utils/binary-writer.js.map +0 -1
  61. package/dist/lib/utils/hex-encoder.js.map +0 -1
  62. package/dist/lib/utils/hex-transcoder.js.map +0 -1
  63. package/dist/lib/utils/version.js.map +0 -1
  64. package/dist/twkb-loader.js.map +0 -1
  65. package/dist/twkb-writer.js.map +0 -1
  66. package/dist/wkb-loader.js.map +0 -1
  67. package/dist/wkb-writer.js.map +0 -1
  68. package/dist/wkt-crs-loader.js.map +0 -1
  69. package/dist/wkt-crs-writer.js.map +0 -1
  70. package/dist/wkt-loader.js.map +0 -1
  71. package/dist/wkt-writer.js.map +0 -1
  72. package/dist/workers/wkb-worker.js.map +0 -1
  73. package/dist/workers/wkt-worker.js.map +0 -1
@@ -1,180 +1,195 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz
1
5
  import { BinaryWriter } from "./utils/binary-writer.js";
2
6
  import { WKBGeometryType } from "./parse-wkb-header.js";
3
7
  export function encodeTWKB(geometry, options) {
4
- const writer = new BinaryWriter(0, true);
5
- const context = {
6
- ...getTwkbPrecision(5, 0, 0),
7
- hasZ: options === null || options === void 0 ? void 0 : options.hasZ,
8
- hasM: options === null || options === void 0 ? void 0 : options.hasM
9
- };
10
- encodeGeometry(writer, geometry, context);
11
- return writer.arrayBuffer;
8
+ const writer = new BinaryWriter(0, true);
9
+ const context = {
10
+ ...getTwkbPrecision(5, 0, 0),
11
+ hasZ: options?.hasZ,
12
+ hasM: options?.hasM
13
+ };
14
+ encodeGeometry(writer, geometry, context);
15
+ // TODO - we need to slice it?
16
+ return writer.arrayBuffer;
12
17
  }
13
18
  function encodeGeometry(writer, geometry, context) {
14
- switch (geometry.type) {
15
- case 'Point':
16
- return encodePoint(writer, context, geometry);
17
- case 'LineString':
18
- return encodeLineString(writer, context, geometry);
19
- case 'Polygon':
20
- return encodePolygon(writer, context, geometry);
21
- case 'MultiPoint':
22
- return encodeMultiPoint(writer, context, geometry);
23
- case 'MultiLineString':
24
- return encodeMultiLineString(writer, context, geometry);
25
- case 'MultiPolygon':
26
- return encodeMultiPolygon(writer, context, geometry);
27
- case 'GeometryCollection':
28
- return encodeGeometryCollection(writer, context, geometry);
29
- default:
30
- throw new Error('unsupported geometry type');
31
- }
19
+ switch (geometry.type) {
20
+ case 'Point':
21
+ return encodePoint(writer, context, geometry);
22
+ case 'LineString':
23
+ return encodeLineString(writer, context, geometry);
24
+ case 'Polygon':
25
+ return encodePolygon(writer, context, geometry);
26
+ case 'MultiPoint':
27
+ return encodeMultiPoint(writer, context, geometry);
28
+ case 'MultiLineString':
29
+ return encodeMultiLineString(writer, context, geometry);
30
+ case 'MultiPolygon':
31
+ return encodeMultiPolygon(writer, context, geometry);
32
+ case 'GeometryCollection':
33
+ return encodeGeometryCollection(writer, context, geometry);
34
+ default:
35
+ throw new Error('unsupported geometry type');
36
+ }
32
37
  }
33
38
  function encodePoint(writer, context, point) {
34
- const isEmpty = point.coordinates.length === 0 || point[0] === 'undefined' || point[1] === 'undefined';
35
- writeTwkbHeader(writer, context, WKBGeometryType.Point, isEmpty);
36
- if (!isEmpty) {
37
- const previousPoint = [0, 0, 0, 0];
38
- writeTwkbPoint(writer, context, point.coordinates, previousPoint);
39
- }
39
+ const isEmpty = point.coordinates.length === 0 || point[0] === 'undefined' || point[1] === 'undefined';
40
+ writeTwkbHeader(writer, context, WKBGeometryType.Point, isEmpty);
41
+ if (!isEmpty) {
42
+ const previousPoint = [0, 0, 0, 0];
43
+ writeTwkbPoint(writer, context, point.coordinates, previousPoint);
44
+ }
40
45
  }
41
46
  function encodeLineString(writer, context, lineString) {
42
- const points = lineString.coordinates;
43
- const isEmpty = points.length === 0;
44
- writeTwkbHeader(writer, context, WKBGeometryType.LineString, isEmpty);
45
- if (!isEmpty) {
46
- writer.writeVarInt(points.length);
47
- const previousPoint = [0, 0, 0, 0];
48
- for (const point of points) {
49
- writeTwkbPoint(writer, context, point, previousPoint);
47
+ const points = lineString.coordinates;
48
+ const isEmpty = points.length === 0;
49
+ writeTwkbHeader(writer, context, WKBGeometryType.LineString, isEmpty);
50
+ if (!isEmpty) {
51
+ writer.writeVarInt(points.length);
52
+ const previousPoint = [0, 0, 0, 0];
53
+ for (const point of points) {
54
+ writeTwkbPoint(writer, context, point, previousPoint);
55
+ }
50
56
  }
51
- }
52
- return writer.arrayBuffer;
57
+ return writer.arrayBuffer;
53
58
  }
54
59
  function encodePolygon(writer, context, polygon) {
55
- const polygonRings = polygon.coordinates;
56
- const isEmpty = polygonRings.length === 0;
57
- writeTwkbHeader(writer, context, WKBGeometryType.Polygon, isEmpty);
58
- if (!isEmpty) {
59
- writer.writeVarInt(polygonRings.length);
60
- const previousPoint = [0, 0, 0, 0];
61
- for (const ring of polygonRings) {
62
- writer.writeVarInt(ring.length);
63
- for (const point of ring) {
64
- writeTwkbPoint(writer, context, previousPoint, point);
65
- }
60
+ const polygonRings = polygon.coordinates;
61
+ const isEmpty = polygonRings.length === 0;
62
+ writeTwkbHeader(writer, context, WKBGeometryType.Polygon, isEmpty);
63
+ if (!isEmpty) {
64
+ writer.writeVarInt(polygonRings.length);
65
+ const previousPoint = [0, 0, 0, 0];
66
+ for (const ring of polygonRings) {
67
+ writer.writeVarInt(ring.length);
68
+ for (const point of ring) {
69
+ writeTwkbPoint(writer, context, previousPoint, point);
70
+ }
71
+ }
66
72
  }
67
- }
68
- return writer.arrayBuffer;
73
+ return writer.arrayBuffer;
69
74
  }
70
75
  function encodeMultiPoint(writer, context, multiPoint) {
71
- const points = multiPoint.coordinates;
72
- const isEmpty = points.length === 0;
73
- writeTwkbHeader(writer, context, WKBGeometryType.MultiPoint, isEmpty);
74
- if (!isEmpty) {
75
- writer.writeVarInt(points.length);
76
- const previousPoint = [0, 0, 0, 0];
77
- for (let i = 0; i < points.length; i++) {
78
- writeTwkbPoint(writer, context, previousPoint, points[i]);
76
+ const points = multiPoint.coordinates;
77
+ const isEmpty = points.length === 0;
78
+ writeTwkbHeader(writer, context, WKBGeometryType.MultiPoint, isEmpty);
79
+ if (!isEmpty) {
80
+ writer.writeVarInt(points.length);
81
+ const previousPoint = [0, 0, 0, 0];
82
+ for (let i = 0; i < points.length; i++) {
83
+ writeTwkbPoint(writer, context, previousPoint, points[i]);
84
+ }
79
85
  }
80
- }
81
86
  }
82
87
  function encodeMultiLineString(writer, context, multiLineStrings) {
83
- const lineStrings = multiLineStrings.coordinates;
84
- const isEmpty = lineStrings.length === 0;
85
- writeTwkbHeader(writer, context, WKBGeometryType.MultiLineString, isEmpty);
86
- if (!isEmpty) {
87
- writer.writeVarInt(lineStrings.length);
88
- const previousPoint = [0, 0, 0, 0];
89
- for (const lineString of lineStrings) {
90
- writer.writeVarInt(lineString.length);
91
- for (const point of lineString) {
92
- writeTwkbPoint(writer, context, previousPoint, point);
93
- }
88
+ const lineStrings = multiLineStrings.coordinates;
89
+ const isEmpty = lineStrings.length === 0;
90
+ writeTwkbHeader(writer, context, WKBGeometryType.MultiLineString, isEmpty);
91
+ if (!isEmpty) {
92
+ writer.writeVarInt(lineStrings.length);
93
+ const previousPoint = [0, 0, 0, 0];
94
+ for (const lineString of lineStrings) {
95
+ writer.writeVarInt(lineString.length);
96
+ for (const point of lineString) {
97
+ writeTwkbPoint(writer, context, previousPoint, point);
98
+ }
99
+ }
94
100
  }
95
- }
96
- return writer.arrayBuffer;
101
+ return writer.arrayBuffer;
97
102
  }
98
103
  function encodeMultiPolygon(writer, context, multiPolygon) {
99
- const {
100
- coordinates
101
- } = multiPolygon;
102
- const isEmpty = coordinates.length === 0;
103
- writeTwkbHeader(writer, context, WKBGeometryType.MultiPolygon, isEmpty);
104
- if (!isEmpty) {
105
- const polygons = coordinates;
106
- writer.writeVarInt(polygons.length);
107
- const previousPoint = [0, 0, 0, 0];
108
- for (const polygonRings of polygons) {
109
- writer.writeVarInt(polygonRings.length);
110
- for (const ring of polygonRings) {
111
- writer.writeVarInt(ring.length);
112
- for (const point of ring) {
113
- writeTwkbPoint(writer, context, previousPoint, point);
104
+ const { coordinates } = multiPolygon;
105
+ const isEmpty = coordinates.length === 0;
106
+ writeTwkbHeader(writer, context, WKBGeometryType.MultiPolygon, isEmpty);
107
+ if (!isEmpty) {
108
+ const polygons = coordinates;
109
+ writer.writeVarInt(polygons.length);
110
+ const previousPoint = [0, 0, 0, 0];
111
+ for (const polygonRings of polygons) {
112
+ writer.writeVarInt(polygonRings.length);
113
+ for (const ring of polygonRings) {
114
+ writer.writeVarInt(ring.length);
115
+ for (const point of ring) {
116
+ writeTwkbPoint(writer, context, previousPoint, point);
117
+ }
118
+ }
114
119
  }
115
- }
116
120
  }
117
- }
118
121
  }
119
122
  function encodeGeometryCollection(writer, context, geometryCollection) {
120
- const {
121
- geometries
122
- } = geometryCollection;
123
- const isEmpty = geometries.length === 0;
124
- writeTwkbHeader(writer, context, WKBGeometryType.GeometryCollection, isEmpty);
125
- if (geometries.length > 0) {
126
- writer.writeVarInt(geometries.length);
127
- for (const geometry of geometries) {
128
- encodeGeometry(writer, geometry, context);
123
+ const { geometries } = geometryCollection;
124
+ const isEmpty = geometries.length === 0;
125
+ writeTwkbHeader(writer, context, WKBGeometryType.GeometryCollection, isEmpty);
126
+ if (geometries.length > 0) {
127
+ writer.writeVarInt(geometries.length);
128
+ for (const geometry of geometries) {
129
+ encodeGeometry(writer, geometry, context);
130
+ }
129
131
  }
130
- }
131
132
  }
133
+ /**
134
+ *
135
+ * @param writer
136
+ * @param context
137
+ * @param geometryType
138
+ * @param isEmpty
139
+ */
132
140
  function writeTwkbHeader(writer, context, geometryType, isEmpty) {
133
- const type = (zigZagEncode(context.xy) << 4) + geometryType;
134
- let metadataHeader = context.hasZ || context.hasM ? 1 << 3 : 0;
135
- metadataHeader += isEmpty ? 1 << 4 : 0;
136
- writer.writeUInt8(type);
137
- writer.writeUInt8(metadataHeader);
138
- if (context.hasZ || context.hasM) {
139
- let extendedPrecision = 0;
141
+ const type = (zigZagEncode(context.xy) << 4) + geometryType;
142
+ let metadataHeader = context.hasZ || context.hasM ? 1 << 3 : 0;
143
+ metadataHeader += isEmpty ? 1 << 4 : 0;
144
+ writer.writeUInt8(type);
145
+ writer.writeUInt8(metadataHeader);
146
+ if (context.hasZ || context.hasM) {
147
+ let extendedPrecision = 0;
148
+ if (context.hasZ) {
149
+ extendedPrecision |= 0x1;
150
+ }
151
+ if (context.hasM) {
152
+ extendedPrecision |= 0x2;
153
+ }
154
+ writer.writeUInt8(extendedPrecision);
155
+ }
156
+ }
157
+ /**
158
+ * Write one point to array buffer. ZigZagEncoding the delta fdrom the previous point. Mutates previousPoint.
159
+ * @param writer
160
+ * @param context
161
+ * @param previousPoint - Mutated by this function
162
+ * @param point
163
+ */
164
+ function writeTwkbPoint(writer, context, point, previousPoint) {
165
+ const x = point[0] * context.xyFactor;
166
+ const y = point[1] * context.xyFactor;
167
+ const z = point[2] * context.zFactor;
168
+ const m = point[3] * context.mFactor;
169
+ writer.writeVarInt(zigZagEncode(x - previousPoint[0]));
170
+ writer.writeVarInt(zigZagEncode(y - previousPoint[1]));
140
171
  if (context.hasZ) {
141
- extendedPrecision |= 0x1;
172
+ writer.writeVarInt(zigZagEncode(z - previousPoint[2]));
142
173
  }
143
174
  if (context.hasM) {
144
- extendedPrecision |= 0x2;
175
+ writer.writeVarInt(zigZagEncode(m - previousPoint[3]));
145
176
  }
146
- writer.writeUInt8(extendedPrecision);
147
- }
148
- }
149
- function writeTwkbPoint(writer, context, point, previousPoint) {
150
- const x = point[0] * context.xyFactor;
151
- const y = point[1] * context.xyFactor;
152
- const z = point[2] * context.zFactor;
153
- const m = point[3] * context.mFactor;
154
- writer.writeVarInt(zigZagEncode(x - previousPoint[0]));
155
- writer.writeVarInt(zigZagEncode(y - previousPoint[1]));
156
- if (context.hasZ) {
157
- writer.writeVarInt(zigZagEncode(z - previousPoint[2]));
158
- }
159
- if (context.hasM) {
160
- writer.writeVarInt(zigZagEncode(m - previousPoint[3]));
161
- }
162
- previousPoint[0] = x;
163
- previousPoint[1] = y;
164
- previousPoint[2] = z;
165
- previousPoint[3] = m;
177
+ previousPoint[0] = x;
178
+ previousPoint[1] = y;
179
+ previousPoint[2] = z;
180
+ previousPoint[3] = m;
166
181
  }
182
+ // HELPERS
167
183
  function zigZagEncode(value) {
168
- return value << 1 ^ value >> 31;
184
+ return (value << 1) ^ (value >> 31);
169
185
  }
170
186
  function getTwkbPrecision(xyPrecision, zPrecision, mPrecision) {
171
- return {
172
- xy: xyPrecision,
173
- z: zPrecision,
174
- m: mPrecision,
175
- xyFactor: Math.pow(10, xyPrecision),
176
- zFactor: Math.pow(10, zPrecision),
177
- mFactor: Math.pow(10, mPrecision)
178
- };
187
+ return {
188
+ xy: xyPrecision,
189
+ z: zPrecision,
190
+ m: mPrecision,
191
+ xyFactor: Math.pow(10, xyPrecision),
192
+ zFactor: Math.pow(10, zPrecision),
193
+ mFactor: Math.pow(10, mPrecision)
194
+ };
179
195
  }
180
- //# sourceMappingURL=encode-twkb.js.map