@loaders.gl/wkt 3.1.3 → 4.0.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.
- package/dist/bundle.js +2 -2
- package/dist/bundle.js.map +1 -0
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -0
- package/dist/lib/encode-wkb.js +278 -245
- package/dist/lib/encode-wkb.js.map +1 -0
- package/dist/lib/encode-wkt.js +41 -35
- package/dist/lib/encode-wkt.js.map +1 -0
- package/dist/lib/parse-wkb.js +276 -208
- package/dist/lib/parse-wkb.js.map +1 -0
- package/dist/lib/parse-wkt.js +189 -218
- package/dist/lib/parse-wkt.js.map +1 -0
- package/dist/lib/utils/binary-writer.js +150 -117
- package/dist/lib/utils/binary-writer.js.map +1 -0
- package/dist/lib/utils/version.js +2 -7
- package/dist/lib/utils/version.js.map +1 -0
- package/dist/wkb-loader.js +20 -32
- package/dist/wkb-loader.js.map +1 -0
- package/dist/wkb-writer.js +13 -22
- package/dist/wkb-writer.js.map +1 -0
- package/dist/wkt-loader.js +19 -31
- package/dist/wkt-loader.js.map +1 -0
- package/dist/wkt-worker.js +1 -1
- package/dist/wkt-writer.js +13 -22
- package/dist/wkt-writer.js.map +1 -0
- package/dist/workers/wkb-worker.js +4 -5
- package/dist/workers/wkb-worker.js.map +1 -0
- package/dist/workers/wkt-worker.js +4 -5
- package/dist/workers/wkt-worker.js.map +1 -0
- package/package.json +7 -7
- package/dist/es5/bundle.js +0 -7
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/index.js +0 -50
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/encode-wkb.js +0 -468
- package/dist/es5/lib/encode-wkb.js.map +0 -1
- package/dist/es5/lib/encode-wkt.js +0 -59
- package/dist/es5/lib/encode-wkt.js.map +0 -1
- package/dist/es5/lib/parse-wkb.js +0 -347
- package/dist/es5/lib/parse-wkb.js.map +0 -1
- package/dist/es5/lib/parse-wkt.js +0 -205
- package/dist/es5/lib/parse-wkt.js.map +0 -1
- package/dist/es5/lib/utils/binary-writer.js +0 -186
- package/dist/es5/lib/utils/binary-writer.js.map +0 -1
- package/dist/es5/lib/utils/version.js +0 -9
- package/dist/es5/lib/utils/version.js.map +0 -1
- package/dist/es5/wkb-loader.js +0 -70
- package/dist/es5/wkb-loader.js.map +0 -1
- package/dist/es5/wkb-writer.js +0 -26
- package/dist/es5/wkb-writer.js.map +0 -1
- package/dist/es5/wkt-loader.js +0 -67
- package/dist/es5/wkt-loader.js.map +0 -1
- package/dist/es5/wkt-writer.js +0 -26
- package/dist/es5/wkt-writer.js.map +0 -1
- package/dist/es5/workers/wkb-worker.js +0 -8
- package/dist/es5/workers/wkb-worker.js.map +0 -1
- package/dist/es5/workers/wkt-worker.js +0 -8
- package/dist/es5/workers/wkt-worker.js.map +0 -1
- package/dist/esm/bundle.js +0 -5
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/index.js +0 -5
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/encode-wkb.js +0 -323
- package/dist/esm/lib/encode-wkb.js.map +0 -1
- package/dist/esm/lib/encode-wkt.js +0 -52
- package/dist/esm/lib/encode-wkt.js.map +0 -1
- package/dist/esm/lib/parse-wkb.js +0 -304
- package/dist/esm/lib/parse-wkb.js.map +0 -1
- package/dist/esm/lib/parse-wkt.js +0 -198
- package/dist/esm/lib/parse-wkt.js.map +0 -1
- package/dist/esm/lib/utils/binary-writer.js +0 -153
- package/dist/esm/lib/utils/binary-writer.js.map +0 -1
- package/dist/esm/lib/utils/version.js +0 -2
- package/dist/esm/lib/utils/version.js.map +0 -1
- package/dist/esm/wkb-loader.js +0 -22
- package/dist/esm/wkb-loader.js.map +0 -1
- package/dist/esm/wkb-writer.js +0 -14
- package/dist/esm/wkb-writer.js.map +0 -1
- package/dist/esm/wkt-loader.js +0 -21
- package/dist/esm/wkt-loader.js.map +0 -1
- package/dist/esm/wkt-writer.js +0 -14
- package/dist/esm/wkt-writer.js.map +0 -1
- package/dist/esm/workers/wkb-worker.js +0 -4
- package/dist/esm/workers/wkb-worker.js.map +0 -1
- package/dist/esm/workers/wkt-worker.js +0 -4
- package/dist/esm/workers/wkt-worker.js.map +0 -1
package/dist/bundle.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bundle.ts"],"names":["moduleExports","require","globalThis","loaders","module","exports","Object","assign"],"mappings":"AACA,MAAMA,aAAa,GAAGC,OAAO,CAAC,SAAD,CAA7B;;AACAC,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AACAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCH,aAAlC,CAAjB","sourcesContent":["// @ts-nocheck\nconst moduleExports = require('./index');\nglobalThis.loaders = globalThis.loaders || {};\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, "WKBWorkerLoader", { enumerable: true, get: function () { return wkb_loader_1.WKBWorkerLoader; } });
|
|
7
|
-
var wkt_loader_1 = require("./wkt-loader");
|
|
8
|
-
Object.defineProperty(exports, "WKTLoader", { enumerable: true, get: function () { return wkt_loader_1.WKTLoader; } });
|
|
9
|
-
Object.defineProperty(exports, "WKTWorkerLoader", { enumerable: true, get: function () { return wkt_loader_1.WKTWorkerLoader; } });
|
|
10
|
-
var wkt_writer_1 = require("./wkt-writer");
|
|
11
|
-
Object.defineProperty(exports, "WKTWriter", { enumerable: true, get: function () { return wkt_writer_1.WKTWriter; } });
|
|
12
|
-
var wkb_writer_1 = require("./wkb-writer");
|
|
13
|
-
Object.defineProperty(exports, "WKBWriter", { enumerable: true, get: function () { return wkb_writer_1.WKBWriter; } });
|
|
1
|
+
export { WKBLoader, WKBWorkerLoader } from './wkb-loader';
|
|
2
|
+
export { WKTLoader, WKTWorkerLoader } from './wkt-loader';
|
|
3
|
+
export { WKTWriter } from './wkt-writer';
|
|
4
|
+
export { WKBWriter } from './wkb-writer';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["WKBLoader","WKBWorkerLoader","WKTLoader","WKTWorkerLoader","WKTWriter","WKBWriter"],"mappings":"AAAA,SAAQA,SAAR,EAAmBC,eAAnB,QAAyC,cAAzC;AACA,SAAQC,SAAR,EAAmBC,eAAnB,QAAyC,cAAzC;AACA,SAAQC,SAAR,QAAwB,cAAxB;AACA,SAAQC,SAAR,QAAwB,cAAxB","sourcesContent":["export {WKBLoader, WKBWorkerLoader} from './wkb-loader';\nexport {WKTLoader, WKTWorkerLoader} from './wkt-loader';\nexport {WKTWriter} from './wkt-writer';\nexport {WKBWriter} from './wkb-writer';\n"],"file":"index.js"}
|
package/dist/lib/encode-wkb.js
CHANGED
|
@@ -1,290 +1,323 @@
|
|
|
1
|
-
|
|
2
|
-
// loaders.gl, MIT license
|
|
3
|
-
// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz
|
|
4
|
-
// Reference: https://www.ogc.org/standards/sfa
|
|
5
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const binary_writer_1 = __importDefault(require("./utils/binary-writer"));
|
|
10
|
-
/**
|
|
11
|
-
* Integer code for geometry type
|
|
12
|
-
* Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
|
|
13
|
-
*/
|
|
1
|
+
import BinaryWriter from './utils/binary-writer';
|
|
14
2
|
var WKB;
|
|
3
|
+
|
|
15
4
|
(function (WKB) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
5
|
+
WKB[WKB["Point"] = 1] = "Point";
|
|
6
|
+
WKB[WKB["LineString"] = 2] = "LineString";
|
|
7
|
+
WKB[WKB["Polygon"] = 3] = "Polygon";
|
|
8
|
+
WKB[WKB["MultiPoint"] = 4] = "MultiPoint";
|
|
9
|
+
WKB[WKB["MultiLineString"] = 5] = "MultiLineString";
|
|
10
|
+
WKB[WKB["MultiPolygon"] = 6] = "MultiPolygon";
|
|
11
|
+
WKB[WKB["GeometryCollection"] = 7] = "GeometryCollection";
|
|
23
12
|
})(WKB || (WKB = {}));
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
13
|
+
|
|
14
|
+
export default function encodeWKB(geometry, options = {
|
|
15
|
+
hasZ: false,
|
|
16
|
+
hasM: false
|
|
17
|
+
}) {
|
|
18
|
+
if (geometry.type === 'Feature') {
|
|
19
|
+
geometry = geometry.geometry;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
switch (geometry.type) {
|
|
23
|
+
case 'Point':
|
|
24
|
+
return encodePoint(geometry.coordinates, options);
|
|
25
|
+
|
|
26
|
+
case 'LineString':
|
|
27
|
+
return encodeLineString(geometry.coordinates, options);
|
|
28
|
+
|
|
29
|
+
case 'Polygon':
|
|
30
|
+
return encodePolygon(geometry.coordinates, options);
|
|
31
|
+
|
|
32
|
+
case 'MultiPoint':
|
|
33
|
+
return encodeMultiPoint(geometry, options);
|
|
34
|
+
|
|
35
|
+
case 'MultiPolygon':
|
|
36
|
+
return encodeMultiPolygon(geometry, options);
|
|
37
|
+
|
|
38
|
+
case 'MultiLineString':
|
|
39
|
+
return encodeMultiLineString(geometry, options);
|
|
40
|
+
|
|
41
|
+
case 'GeometryCollection':
|
|
42
|
+
return encodeGeometryCollection(geometry, options);
|
|
43
|
+
|
|
44
|
+
default:
|
|
45
|
+
const exhaustiveCheck = geometry;
|
|
46
|
+
throw new Error("Unhandled case: ".concat(exhaustiveCheck));
|
|
47
|
+
}
|
|
52
48
|
}
|
|
53
|
-
|
|
54
|
-
/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */
|
|
49
|
+
|
|
55
50
|
function getGeometrySize(geometry, options) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
51
|
+
switch (geometry.type) {
|
|
52
|
+
case 'Point':
|
|
53
|
+
return getPointSize(options);
|
|
54
|
+
|
|
55
|
+
case 'LineString':
|
|
56
|
+
return getLineStringSize(geometry.coordinates, options);
|
|
57
|
+
|
|
58
|
+
case 'Polygon':
|
|
59
|
+
return getPolygonSize(geometry.coordinates, options);
|
|
60
|
+
|
|
61
|
+
case 'MultiPoint':
|
|
62
|
+
return getMultiPointSize(geometry, options);
|
|
63
|
+
|
|
64
|
+
case 'MultiPolygon':
|
|
65
|
+
return getMultiPolygonSize(geometry, options);
|
|
66
|
+
|
|
67
|
+
case 'MultiLineString':
|
|
68
|
+
return getMultiLineStringSize(geometry, options);
|
|
69
|
+
|
|
70
|
+
case 'GeometryCollection':
|
|
71
|
+
return getGeometryCollectionSize(geometry, options);
|
|
72
|
+
|
|
73
|
+
default:
|
|
74
|
+
const exhaustiveCheck = geometry;
|
|
75
|
+
throw new Error("Unhandled case: ".concat(exhaustiveCheck));
|
|
76
|
+
}
|
|
75
77
|
}
|
|
76
|
-
|
|
78
|
+
|
|
77
79
|
function encodePoint(coordinates, options) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
writer.writeDoubleLE(NaN);
|
|
87
|
-
}
|
|
88
|
-
if (options.hasM) {
|
|
89
|
-
writer.writeDoubleLE(NaN);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
writeCoordinate(writer, coordinates, options);
|
|
94
|
-
}
|
|
95
|
-
return writer.arrayBuffer;
|
|
96
|
-
}
|
|
97
|
-
/** Write coordinate to buffer */
|
|
98
|
-
function writeCoordinate(writer, coordinate, options) {
|
|
99
|
-
writer.writeDoubleLE(coordinate[0]);
|
|
100
|
-
writer.writeDoubleLE(coordinate[1]);
|
|
80
|
+
const writer = new BinaryWriter(getPointSize(options));
|
|
81
|
+
writer.writeInt8(1);
|
|
82
|
+
writeWkbType(writer, WKB.Point, options);
|
|
83
|
+
|
|
84
|
+
if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {
|
|
85
|
+
writer.writeDoubleLE(NaN);
|
|
86
|
+
writer.writeDoubleLE(NaN);
|
|
87
|
+
|
|
101
88
|
if (options.hasZ) {
|
|
102
|
-
|
|
89
|
+
writer.writeDoubleLE(NaN);
|
|
103
90
|
}
|
|
91
|
+
|
|
104
92
|
if (options.hasM) {
|
|
105
|
-
|
|
93
|
+
writer.writeDoubleLE(NaN);
|
|
106
94
|
}
|
|
95
|
+
} else {
|
|
96
|
+
writeCoordinate(writer, coordinates, options);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return writer.arrayBuffer;
|
|
107
100
|
}
|
|
108
|
-
|
|
101
|
+
|
|
102
|
+
function writeCoordinate(writer, coordinate, options) {
|
|
103
|
+
writer.writeDoubleLE(coordinate[0]);
|
|
104
|
+
writer.writeDoubleLE(coordinate[1]);
|
|
105
|
+
|
|
106
|
+
if (options.hasZ) {
|
|
107
|
+
writer.writeDoubleLE(coordinate[2]);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (options.hasM) {
|
|
111
|
+
writer.writeDoubleLE(coordinate[3]);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
109
115
|
function getPointSize(options) {
|
|
110
|
-
|
|
111
|
-
|
|
116
|
+
const coordinateSize = getCoordinateSize(options);
|
|
117
|
+
return 1 + 4 + coordinateSize;
|
|
112
118
|
}
|
|
113
|
-
|
|
119
|
+
|
|
114
120
|
function encodeLineString(coordinates, options) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
const size = getLineStringSize(coordinates, options);
|
|
122
|
+
const writer = new BinaryWriter(size);
|
|
123
|
+
writer.writeInt8(1);
|
|
124
|
+
writeWkbType(writer, WKB.LineString, options);
|
|
125
|
+
writer.writeUInt32LE(coordinates.length);
|
|
126
|
+
|
|
127
|
+
for (const coordinate of coordinates) {
|
|
128
|
+
writeCoordinate(writer, coordinate, options);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return writer.arrayBuffer;
|
|
124
132
|
}
|
|
125
|
-
|
|
133
|
+
|
|
126
134
|
function getLineStringSize(coordinates, options) {
|
|
127
|
-
|
|
128
|
-
|
|
135
|
+
const coordinateSize = getCoordinateSize(options);
|
|
136
|
+
return 1 + 4 + 4 + coordinates.length * coordinateSize;
|
|
129
137
|
}
|
|
130
|
-
|
|
138
|
+
|
|
131
139
|
function encodePolygon(coordinates, options) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
const writer = new BinaryWriter(getPolygonSize(coordinates, options));
|
|
141
|
+
writer.writeInt8(1);
|
|
142
|
+
writeWkbType(writer, WKB.Polygon, options);
|
|
143
|
+
const [exteriorRing, ...interiorRings] = coordinates;
|
|
144
|
+
|
|
145
|
+
if (exteriorRing.length > 0) {
|
|
146
|
+
writer.writeUInt32LE(1 + interiorRings.length);
|
|
147
|
+
writer.writeUInt32LE(exteriorRing.length);
|
|
148
|
+
} else {
|
|
149
|
+
writer.writeUInt32LE(0);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
for (const coordinate of exteriorRing) {
|
|
153
|
+
writeCoordinate(writer, coordinate, options);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
for (const interiorRing of interiorRings) {
|
|
157
|
+
writer.writeUInt32LE(interiorRing.length);
|
|
158
|
+
|
|
159
|
+
for (const coordinate of interiorRing) {
|
|
160
|
+
writeCoordinate(writer, coordinate, options);
|
|
142
161
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
for (const interiorRing of interiorRings) {
|
|
147
|
-
writer.writeUInt32LE(interiorRing.length);
|
|
148
|
-
for (const coordinate of interiorRing) {
|
|
149
|
-
writeCoordinate(writer, coordinate, options);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return writer.arrayBuffer;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return writer.arrayBuffer;
|
|
153
165
|
}
|
|
154
|
-
|
|
166
|
+
|
|
155
167
|
function getPolygonSize(coordinates, options) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
const coordinateSize = getCoordinateSize(options);
|
|
169
|
+
const [exteriorRing, ...interiorRings] = coordinates;
|
|
170
|
+
let size = 1 + 4 + 4;
|
|
171
|
+
|
|
172
|
+
if (exteriorRing.length > 0) {
|
|
173
|
+
size += 4 + exteriorRing.length * coordinateSize;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
for (const interiorRing of interiorRings) {
|
|
177
|
+
size += 4 + interiorRing.length * coordinateSize;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return size;
|
|
166
181
|
}
|
|
167
|
-
|
|
182
|
+
|
|
168
183
|
function encodeMultiPoint(multiPoint, options) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));
|
|
185
|
+
const points = multiPoint.coordinates;
|
|
186
|
+
writer.writeInt8(1);
|
|
187
|
+
writeWkbType(writer, WKB.MultiPoint, options);
|
|
188
|
+
writer.writeUInt32LE(points.length);
|
|
189
|
+
|
|
190
|
+
for (const point of points) {
|
|
191
|
+
const arrayBuffer = encodePoint(point, options);
|
|
192
|
+
writer.writeBuffer(arrayBuffer);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return writer.arrayBuffer;
|
|
180
196
|
}
|
|
181
|
-
|
|
197
|
+
|
|
182
198
|
function getMultiPointSize(multiPoint, options) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
return 1 + 4 + 4 + points.length * coordinateSize;
|
|
199
|
+
let coordinateSize = getCoordinateSize(options);
|
|
200
|
+
const points = multiPoint.coordinates;
|
|
201
|
+
coordinateSize += 5;
|
|
202
|
+
return 1 + 4 + 4 + points.length * coordinateSize;
|
|
188
203
|
}
|
|
189
|
-
|
|
204
|
+
|
|
190
205
|
function encodeMultiLineString(multiLineString, options) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
206
|
+
const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));
|
|
207
|
+
const lineStrings = multiLineString.coordinates;
|
|
208
|
+
writer.writeInt8(1);
|
|
209
|
+
writeWkbType(writer, WKB.MultiLineString, options);
|
|
210
|
+
writer.writeUInt32LE(lineStrings.length);
|
|
211
|
+
|
|
212
|
+
for (const lineString of lineStrings) {
|
|
213
|
+
const encodedLineString = encodeLineString(lineString, options);
|
|
214
|
+
writer.writeBuffer(encodedLineString);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return writer.arrayBuffer;
|
|
202
218
|
}
|
|
203
|
-
|
|
219
|
+
|
|
204
220
|
function getMultiLineStringSize(multiLineString, options) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
221
|
+
let size = 1 + 4 + 4;
|
|
222
|
+
const lineStrings = multiLineString.coordinates;
|
|
223
|
+
|
|
224
|
+
for (const lineString of lineStrings) {
|
|
225
|
+
size += getLineStringSize(lineString, options);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return size;
|
|
211
229
|
}
|
|
230
|
+
|
|
212
231
|
function encodeMultiPolygon(multiPolygon, options) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
232
|
+
const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));
|
|
233
|
+
const polygons = multiPolygon.coordinates;
|
|
234
|
+
writer.writeInt8(1);
|
|
235
|
+
writeWkbType(writer, WKB.MultiPolygon, options);
|
|
236
|
+
writer.writeUInt32LE(polygons.length);
|
|
237
|
+
|
|
238
|
+
for (const polygon of polygons) {
|
|
239
|
+
const encodedPolygon = encodePolygon(polygon, options);
|
|
240
|
+
writer.writeBuffer(encodedPolygon);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
return writer.arrayBuffer;
|
|
223
244
|
}
|
|
245
|
+
|
|
224
246
|
function getMultiPolygonSize(multiPolygon, options) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
247
|
+
let size = 1 + 4 + 4;
|
|
248
|
+
const polygons = multiPolygon.coordinates;
|
|
249
|
+
|
|
250
|
+
for (const polygon of polygons) {
|
|
251
|
+
size += getPolygonSize(polygon, options);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return size;
|
|
231
255
|
}
|
|
256
|
+
|
|
232
257
|
function encodeGeometryCollection(collection, options) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
258
|
+
const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));
|
|
259
|
+
writer.writeInt8(1);
|
|
260
|
+
writeWkbType(writer, WKB.GeometryCollection, options);
|
|
261
|
+
writer.writeUInt32LE(collection.geometries.length);
|
|
262
|
+
|
|
263
|
+
for (const geometry of collection.geometries) {
|
|
264
|
+
const arrayBuffer = encodeWKB(geometry, options);
|
|
265
|
+
writer.writeBuffer(arrayBuffer);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return writer.arrayBuffer;
|
|
243
269
|
}
|
|
270
|
+
|
|
244
271
|
function getGeometryCollectionSize(collection, options) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
272
|
+
let size = 1 + 4 + 4;
|
|
273
|
+
|
|
274
|
+
for (const geometry of collection.geometries) {
|
|
275
|
+
size += getGeometrySize(geometry, options);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return size;
|
|
250
279
|
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* Construct and write WKB integer code
|
|
254
|
-
* Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary
|
|
255
|
-
*/
|
|
280
|
+
|
|
256
281
|
function writeWkbType(writer, geometryType, options) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
282
|
+
const {
|
|
283
|
+
hasZ,
|
|
284
|
+
hasM,
|
|
285
|
+
srid
|
|
286
|
+
} = options;
|
|
287
|
+
let dimensionType = 0;
|
|
288
|
+
|
|
289
|
+
if (!srid) {
|
|
290
|
+
if (hasZ && hasM) {
|
|
291
|
+
dimensionType += 3000;
|
|
292
|
+
} else if (hasZ) {
|
|
293
|
+
dimensionType += 1000;
|
|
294
|
+
} else if (hasM) {
|
|
295
|
+
dimensionType += 2000;
|
|
296
|
+
}
|
|
297
|
+
} else {
|
|
298
|
+
if (hasZ) {
|
|
299
|
+
dimensionType |= 0x80000000;
|
|
269
300
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
if (hasM) {
|
|
275
|
-
dimensionType |= 0x40000000;
|
|
276
|
-
}
|
|
301
|
+
|
|
302
|
+
if (hasM) {
|
|
303
|
+
dimensionType |= 0x40000000;
|
|
277
304
|
}
|
|
278
|
-
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
writer.writeUInt32LE(dimensionType + geometryType >>> 0);
|
|
279
308
|
}
|
|
280
|
-
|
|
309
|
+
|
|
281
310
|
function getCoordinateSize(options) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
311
|
+
let coordinateSize = 16;
|
|
312
|
+
|
|
313
|
+
if (options.hasZ) {
|
|
314
|
+
coordinateSize += 8;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (options.hasM) {
|
|
318
|
+
coordinateSize += 8;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return coordinateSize;
|
|
290
322
|
}
|
|
323
|
+
//# sourceMappingURL=encode-wkb.js.map
|