@loaders.gl/flatgeobuf 4.0.0-beta.1 → 4.0.0-beta.3
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.min.js → dist.dev.js} +8507 -9117
- package/dist/flatgeobuf-loader.d.ts +1 -1
- package/dist/flatgeobuf-loader.d.ts.map +1 -1
- package/dist/{esm/flatgeobuf-loader.js → flatgeobuf-loader.js} +1 -1
- package/dist/flatgeobuf-loader.js.map +1 -0
- package/dist/flatgeobuf-worker.js +63 -29
- package/dist/index.cjs +265 -0
- package/dist/{esm/index.js → index.js} +2 -2
- package/dist/index.js.map +1 -0
- package/dist/{esm/lib → lib}/binary-geometries.js +1 -1
- package/dist/lib/binary-geometries.js.map +1 -0
- package/dist/{esm/lib → lib}/parse-flatgeobuf.js +1 -1
- package/dist/lib/parse-flatgeobuf.js.map +1 -0
- package/dist/{esm/workers → workers}/flatgeobuf-worker.js +1 -1
- package/dist/workers/flatgeobuf-worker.js.map +1 -0
- package/package.json +17 -9
- package/src/flatgeobuf-loader.ts +1 -1
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/es5/bundle.js +0 -6
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/flatgeobuf-loader.js +0 -27
- package/dist/es5/flatgeobuf-loader.js.map +0 -1
- package/dist/es5/index.js +0 -44
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/lib/binary-geometries.js +0 -137
- package/dist/es5/lib/binary-geometries.js.map +0 -1
- package/dist/es5/lib/parse-flatgeobuf.js +0 -193
- package/dist/es5/lib/parse-flatgeobuf.js.map +0 -1
- package/dist/es5/workers/flatgeobuf-worker.js +0 -6
- package/dist/es5/workers/flatgeobuf-worker.js.map +0 -1
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/flatgeobuf-loader.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/lib/binary-geometries.js.map +0 -1
- package/dist/esm/lib/parse-flatgeobuf.js.map +0 -1
- package/dist/esm/workers/flatgeobuf-worker.js.map +0 -1
- package/src/bundle.ts +0 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Loader, LoaderOptions } from '@loaders.gl/loader-utils';
|
|
2
2
|
export type FlatGeobufLoaderOptions = LoaderOptions & {
|
|
3
3
|
flatgeobuf?: {
|
|
4
|
-
shape?: 'geojson-table' | 'columnar-table' | 'geojson
|
|
4
|
+
shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary';
|
|
5
5
|
};
|
|
6
6
|
gis?: {
|
|
7
7
|
reproject?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatgeobuf-loader.d.ts","sourceRoot":"","sources":["../src/flatgeobuf-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAMpE,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"flatgeobuf-loader.d.ts","sourceRoot":"","sources":["../src/flatgeobuf-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAMpE,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,QAAQ,CAAC;KACnE,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,MAAM,CAAC,EAAE,KAAK,CAAC;KAChB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,uBAAuB,CAiBtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatgeobuf-loader.js","names":["VERSION","__VERSION__","FlatGeobufLoader","id","name","module","version","worker","extensions","mimeTypes","category","options","flatgeobuf","shape","gis","reproject"],"sources":["../src/flatgeobuf-loader.ts"],"sourcesContent":["import type {Loader, LoaderOptions} from '@loaders.gl/loader-utils';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type FlatGeobufLoaderOptions = LoaderOptions & {\n flatgeobuf?: {\n shape?: 'geojson-table' | 'columnar-table' | 'geojson' | 'binary';\n };\n gis?: {\n reproject?: boolean;\n _targetCrs?: string;\n /** @deprecated Use options.flatgeobuf.shape */\n format?: never;\n };\n};\n\nexport const FlatGeobufLoader: Loader<any, any, FlatGeobufLoaderOptions> = {\n id: 'flatgeobuf',\n name: 'FlatGeobuf',\n module: 'flatgeobuf',\n version: VERSION,\n worker: true,\n extensions: ['fgb'],\n mimeTypes: ['application/octet-stream'],\n category: 'geometry',\n options: {\n flatgeobuf: {\n shape: 'geojson-table'\n },\n gis: {\n reproject: false\n }\n }\n};\n"],"mappings":"AAIA,MAAMA,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAc3E,OAAO,MAAMC,gBAA2D,GAAG;EACzEC,EAAE,EAAE,YAAY;EAChBC,IAAI,EAAE,YAAY;EAClBC,MAAM,EAAE,YAAY;EACpBC,OAAO,EAAEN,OAAO;EAChBO,MAAM,EAAE,IAAI;EACZC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,0BAA0B,CAAC;EACvCC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE;IACPC,UAAU,EAAE;MACVC,KAAK,EAAE;IACT,CAAC;IACDC,GAAG,EAAE;MACHC,SAAS,EAAE;IACb;EACF;AACF,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
(() => {
|
|
2
3
|
var __create = Object.create;
|
|
3
4
|
var __defProp = Object.defineProperty;
|
|
@@ -5,21 +6,25 @@
|
|
|
5
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
7
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
8
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
|
9
9
|
var __commonJS = (cb, mod) => function __require() {
|
|
10
|
-
return mod || (0, cb[
|
|
10
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
11
|
};
|
|
12
|
-
var
|
|
13
|
-
if (
|
|
14
|
-
for (let key of __getOwnPropNames(
|
|
15
|
-
if (!__hasOwnProp.call(
|
|
16
|
-
__defProp(
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
17
|
}
|
|
18
|
-
return
|
|
19
|
-
};
|
|
20
|
-
var __toModule = (module) => {
|
|
21
|
-
return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
|
|
18
|
+
return to;
|
|
22
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
23
28
|
|
|
24
29
|
// ../../node_modules/flatbuffers/js/flatbuffers.js
|
|
25
30
|
var require_flatbuffers = __commonJS({
|
|
@@ -347,7 +352,10 @@
|
|
|
347
352
|
if (codePoint < 65536) {
|
|
348
353
|
utf8.push(codePoint >> 12 & 15 | 224);
|
|
349
354
|
} else {
|
|
350
|
-
utf8.push(
|
|
355
|
+
utf8.push(
|
|
356
|
+
codePoint >> 18 & 7 | 240,
|
|
357
|
+
codePoint >> 12 & 63 | 128
|
|
358
|
+
);
|
|
351
359
|
}
|
|
352
360
|
utf8.push(codePoint >> 6 & 63 | 128);
|
|
353
361
|
}
|
|
@@ -422,7 +430,8 @@
|
|
|
422
430
|
return flatbuffers.float64[0];
|
|
423
431
|
};
|
|
424
432
|
flatbuffers.ByteBuffer.prototype.writeInt8 = function(offset, value) {
|
|
425
|
-
this.bytes_[offset] =
|
|
433
|
+
this.bytes_[offset] = /** @type {number} */
|
|
434
|
+
value;
|
|
426
435
|
};
|
|
427
436
|
flatbuffers.ByteBuffer.prototype.writeUint8 = function(offset, value) {
|
|
428
437
|
this.bytes_[offset] = value;
|
|
@@ -466,11 +475,15 @@
|
|
|
466
475
|
};
|
|
467
476
|
flatbuffers.ByteBuffer.prototype.getBufferIdentifier = function() {
|
|
468
477
|
if (this.bytes_.length < this.position_ + flatbuffers.SIZEOF_INT + flatbuffers.FILE_IDENTIFIER_LENGTH) {
|
|
469
|
-
throw new Error(
|
|
478
|
+
throw new Error(
|
|
479
|
+
"FlatBuffers: ByteBuffer is too short to contain an identifier."
|
|
480
|
+
);
|
|
470
481
|
}
|
|
471
482
|
var result = "";
|
|
472
483
|
for (var i = 0; i < flatbuffers.FILE_IDENTIFIER_LENGTH; i++) {
|
|
473
|
-
result += String.fromCharCode(
|
|
484
|
+
result += String.fromCharCode(
|
|
485
|
+
this.readInt8(this.position_ + flatbuffers.SIZEOF_INT + i)
|
|
486
|
+
);
|
|
474
487
|
}
|
|
475
488
|
return result;
|
|
476
489
|
};
|
|
@@ -515,7 +528,10 @@
|
|
|
515
528
|
result += String.fromCharCode(codePoint);
|
|
516
529
|
} else {
|
|
517
530
|
codePoint -= 65536;
|
|
518
|
-
result += String.fromCharCode(
|
|
531
|
+
result += String.fromCharCode(
|
|
532
|
+
(codePoint >> 10) + 55296,
|
|
533
|
+
(codePoint & (1 << 10) - 1) + 56320
|
|
534
|
+
);
|
|
519
535
|
}
|
|
520
536
|
}
|
|
521
537
|
return result;
|
|
@@ -3212,7 +3228,7 @@
|
|
|
3212
3228
|
|
|
3213
3229
|
// ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
|
|
3214
3230
|
function getTransferList(object, recursive = true, transfers) {
|
|
3215
|
-
const transfersSet = transfers || new Set();
|
|
3231
|
+
const transfersSet = transfers || /* @__PURE__ */ new Set();
|
|
3216
3232
|
if (!object) {
|
|
3217
3233
|
} else if (isTransferable(object)) {
|
|
3218
3234
|
transfersSet.add(object);
|
|
@@ -3255,11 +3271,15 @@
|
|
|
3255
3271
|
}
|
|
3256
3272
|
return parentPort;
|
|
3257
3273
|
}
|
|
3258
|
-
var onMessageWrapperMap = new Map();
|
|
3274
|
+
var onMessageWrapperMap = /* @__PURE__ */ new Map();
|
|
3259
3275
|
var WorkerBody = class {
|
|
3276
|
+
/** Check that we are actually in a worker thread */
|
|
3260
3277
|
static inWorkerThread() {
|
|
3261
3278
|
return typeof self !== "undefined" || Boolean(getParentPort());
|
|
3262
3279
|
}
|
|
3280
|
+
/*
|
|
3281
|
+
* (type: WorkerMessageType, payload: WorkerMessagePayload) => any
|
|
3282
|
+
*/
|
|
3263
3283
|
static set onmessage(onMessage) {
|
|
3264
3284
|
function handleMessage(message) {
|
|
3265
3285
|
const parentPort3 = getParentPort();
|
|
@@ -3303,6 +3323,11 @@
|
|
|
3303
3323
|
globalThis.removeEventListener("message", onMessageWrapper);
|
|
3304
3324
|
}
|
|
3305
3325
|
}
|
|
3326
|
+
/**
|
|
3327
|
+
* Send a message from a worker to creating thread (main thread)
|
|
3328
|
+
* @param type
|
|
3329
|
+
* @param payload
|
|
3330
|
+
*/
|
|
3306
3331
|
static postMessage(type, payload) {
|
|
3307
3332
|
const data = { source: "loaders.gl", type, payload };
|
|
3308
3333
|
const transferList = getTransferList(payload);
|
|
@@ -3334,6 +3359,7 @@
|
|
|
3334
3359
|
loader,
|
|
3335
3360
|
arrayBuffer: input,
|
|
3336
3361
|
options,
|
|
3362
|
+
// @ts-expect-error fetch missing
|
|
3337
3363
|
context: {
|
|
3338
3364
|
...context,
|
|
3339
3365
|
_parse: parseOnMainThread
|
|
@@ -3402,10 +3428,10 @@
|
|
|
3402
3428
|
// ../../node_modules/@babel/runtime/helpers/esm/typeof.js
|
|
3403
3429
|
function _typeof(obj) {
|
|
3404
3430
|
"@babel/helpers - typeof";
|
|
3405
|
-
return _typeof = typeof Symbol
|
|
3431
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
|
|
3406
3432
|
return typeof obj2;
|
|
3407
3433
|
} : function(obj2) {
|
|
3408
|
-
return obj2 && typeof Symbol
|
|
3434
|
+
return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
|
|
3409
3435
|
}, _typeof(obj);
|
|
3410
3436
|
}
|
|
3411
3437
|
|
|
@@ -3446,7 +3472,7 @@
|
|
|
3446
3472
|
}
|
|
3447
3473
|
|
|
3448
3474
|
// src/flatgeobuf-loader.ts
|
|
3449
|
-
var VERSION = true ? "4.0.0-beta.
|
|
3475
|
+
var VERSION = true ? "4.0.0-beta.3" : "latest";
|
|
3450
3476
|
var FlatGeobufLoader = {
|
|
3451
3477
|
id: "flatgeobuf",
|
|
3452
3478
|
name: "FlatGeobuf",
|
|
@@ -4846,7 +4872,6 @@
|
|
|
4846
4872
|
var Proj_default = Projection;
|
|
4847
4873
|
|
|
4848
4874
|
// ../../node_modules/proj4/lib/datumUtils.js
|
|
4849
|
-
"use strict";
|
|
4850
4875
|
function compareDatums(source, dest) {
|
|
4851
4876
|
if (source.datum_type !== dest.datum_type) {
|
|
4852
4877
|
return false;
|
|
@@ -8789,7 +8814,7 @@
|
|
|
8789
8814
|
projs_default(core_default);
|
|
8790
8815
|
var lib_default = core_default;
|
|
8791
8816
|
|
|
8792
|
-
// ../../node_modules/@math.gl/proj4/dist/
|
|
8817
|
+
// ../../node_modules/@math.gl/proj4/dist/lib/proj4-projection.js
|
|
8793
8818
|
var Proj4Projection = class {
|
|
8794
8819
|
static defineProjectionAliases(aliases) {
|
|
8795
8820
|
const aliasArray = [];
|
|
@@ -8838,12 +8863,12 @@
|
|
|
8838
8863
|
}
|
|
8839
8864
|
|
|
8840
8865
|
// src/lib/parse-flatgeobuf.ts
|
|
8841
|
-
var import_geojson =
|
|
8842
|
-
var import_generic =
|
|
8843
|
-
var import_feature =
|
|
8866
|
+
var import_geojson = __toESM(require_geojson(), 1);
|
|
8867
|
+
var import_generic = __toESM(require_generic(), 1);
|
|
8868
|
+
var import_feature = __toESM(require_feature(), 1);
|
|
8844
8869
|
|
|
8845
8870
|
// src/lib/binary-geometries.ts
|
|
8846
|
-
var import_header_generated =
|
|
8871
|
+
var import_header_generated = __toESM(require_header_generated(), 1);
|
|
8847
8872
|
function parsePoint(geometry) {
|
|
8848
8873
|
const xy = geometry.xyArray();
|
|
8849
8874
|
const z = geometry.zArray();
|
|
@@ -8898,8 +8923,16 @@
|
|
|
8898
8923
|
const positionSize = parsedParts[0].positions.size;
|
|
8899
8924
|
for (const parsedPart of parsedParts) {
|
|
8900
8925
|
concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);
|
|
8901
|
-
concatPrimitivePolygonIndices.set(
|
|
8902
|
-
|
|
8926
|
+
concatPrimitivePolygonIndices.set(
|
|
8927
|
+
// eslint-disable-next-line
|
|
8928
|
+
parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),
|
|
8929
|
+
primitivePolygonIndicesCounter
|
|
8930
|
+
);
|
|
8931
|
+
concatPolygonIndices.set(
|
|
8932
|
+
// eslint-disable-next-line
|
|
8933
|
+
parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),
|
|
8934
|
+
polygonIndicesCounter
|
|
8935
|
+
);
|
|
8903
8936
|
positionCounter += parsedPart.positions.value.length / positionSize;
|
|
8904
8937
|
primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;
|
|
8905
8938
|
polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;
|
|
@@ -9039,6 +9072,7 @@
|
|
|
9039
9072
|
...FlatGeobufLoader,
|
|
9040
9073
|
parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),
|
|
9041
9074
|
parseSync: parseFlatGeobuf,
|
|
9075
|
+
// @ts-expect-error this is a stream parser not an async iterator parser
|
|
9042
9076
|
parseInBatchesFromStream: parseFlatGeobufInBatches,
|
|
9043
9077
|
binary: true
|
|
9044
9078
|
};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
FlatGeobufLoader: () => FlatGeobufLoader2,
|
|
24
|
+
FlatGeobufWorkerLoader: () => FlatGeobufLoader
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(src_exports);
|
|
27
|
+
|
|
28
|
+
// src/flatgeobuf-loader.ts
|
|
29
|
+
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
30
|
+
var FlatGeobufLoader = {
|
|
31
|
+
id: "flatgeobuf",
|
|
32
|
+
name: "FlatGeobuf",
|
|
33
|
+
module: "flatgeobuf",
|
|
34
|
+
version: VERSION,
|
|
35
|
+
worker: true,
|
|
36
|
+
extensions: ["fgb"],
|
|
37
|
+
mimeTypes: ["application/octet-stream"],
|
|
38
|
+
category: "geometry",
|
|
39
|
+
options: {
|
|
40
|
+
flatgeobuf: {
|
|
41
|
+
shape: "geojson-table"
|
|
42
|
+
},
|
|
43
|
+
gis: {
|
|
44
|
+
reproject: false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// src/lib/parse-flatgeobuf.ts
|
|
50
|
+
var import_proj4 = require("@math.gl/proj4");
|
|
51
|
+
var import_gis = require("@loaders.gl/gis");
|
|
52
|
+
var import_geojson = require("flatgeobuf/lib/cjs/geojson");
|
|
53
|
+
var import_generic = require("flatgeobuf/lib/cjs/generic");
|
|
54
|
+
var import_feature = require("flatgeobuf/lib/cjs/generic/feature");
|
|
55
|
+
|
|
56
|
+
// src/lib/binary-geometries.ts
|
|
57
|
+
var import_header_generated = require("flatgeobuf/lib/cjs/header_generated");
|
|
58
|
+
function parsePoint(geometry) {
|
|
59
|
+
const xy = geometry.xyArray();
|
|
60
|
+
const z = geometry.zArray();
|
|
61
|
+
const positions = blitArrays(xy, z);
|
|
62
|
+
return { positions };
|
|
63
|
+
}
|
|
64
|
+
function parseLines(geometry) {
|
|
65
|
+
const xy = geometry.xyArray();
|
|
66
|
+
const z = geometry.zArray();
|
|
67
|
+
const positions = blitArrays(xy, z);
|
|
68
|
+
const ends = geometry.endsArray() && Array.from(geometry.endsArray()) || [xy.length / 2];
|
|
69
|
+
ends.unshift(0);
|
|
70
|
+
const pathIndices = { value: new Uint16Array(ends), size: 1 };
|
|
71
|
+
return {
|
|
72
|
+
positions,
|
|
73
|
+
pathIndices
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function parsePolygons(geometry) {
|
|
77
|
+
const xy = geometry.xyArray();
|
|
78
|
+
const z = geometry.zArray();
|
|
79
|
+
const positions = blitArrays(xy, z);
|
|
80
|
+
const ends = geometry.endsArray() && Array.from(geometry.endsArray()) || [xy.length / 2];
|
|
81
|
+
ends.unshift(0);
|
|
82
|
+
const primitivePolygonIndices = { value: new Uint16Array(ends), size: 1 };
|
|
83
|
+
const polygonIndices = { value: new Uint16Array([0, xy.length / 2]), size: 1 };
|
|
84
|
+
return {
|
|
85
|
+
positions,
|
|
86
|
+
primitivePolygonIndices,
|
|
87
|
+
polygonIndices
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function parseMultiPolygons(geometry) {
|
|
91
|
+
const parsedParts = [];
|
|
92
|
+
let nPositions = 0;
|
|
93
|
+
let nPrimitivePolygonIndices = 1;
|
|
94
|
+
let nPolygonIndices = 1;
|
|
95
|
+
for (let i = 0; i < geometry.partsLength(); i++) {
|
|
96
|
+
const part = geometry.parts(i);
|
|
97
|
+
const polygon = parsePolygons(part);
|
|
98
|
+
nPositions += polygon.positions.value.length;
|
|
99
|
+
nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;
|
|
100
|
+
nPolygonIndices += polygon.polygonIndices.value.length - 1;
|
|
101
|
+
parsedParts.push(polygon);
|
|
102
|
+
}
|
|
103
|
+
const concatPositions = new Float64Array(nPositions);
|
|
104
|
+
const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);
|
|
105
|
+
const concatPolygonIndices = new Uint32Array(nPolygonIndices);
|
|
106
|
+
let positionCounter = 0;
|
|
107
|
+
let primitivePolygonIndicesCounter = 1;
|
|
108
|
+
let polygonIndicesCounter = 1;
|
|
109
|
+
const positionSize = parsedParts[0].positions.size;
|
|
110
|
+
for (const parsedPart of parsedParts) {
|
|
111
|
+
concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);
|
|
112
|
+
concatPrimitivePolygonIndices.set(
|
|
113
|
+
// eslint-disable-next-line
|
|
114
|
+
parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),
|
|
115
|
+
primitivePolygonIndicesCounter
|
|
116
|
+
);
|
|
117
|
+
concatPolygonIndices.set(
|
|
118
|
+
// eslint-disable-next-line
|
|
119
|
+
parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),
|
|
120
|
+
polygonIndicesCounter
|
|
121
|
+
);
|
|
122
|
+
positionCounter += parsedPart.positions.value.length / positionSize;
|
|
123
|
+
primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;
|
|
124
|
+
polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
positions: { value: concatPositions, size: positionSize },
|
|
128
|
+
primitivePolygonIndices: { value: concatPrimitivePolygonIndices, size: 1 },
|
|
129
|
+
polygonIndices: { value: concatPolygonIndices, size: 1 }
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function blitArrays(xy, z) {
|
|
133
|
+
if (!z) {
|
|
134
|
+
return { value: xy, size: 2 };
|
|
135
|
+
}
|
|
136
|
+
if (z.length * 2 !== xy.length) {
|
|
137
|
+
throw new Error("Z array must be half XY array's length");
|
|
138
|
+
}
|
|
139
|
+
const totalLength = xy.length + z.length;
|
|
140
|
+
const xyz = new Float64Array(totalLength);
|
|
141
|
+
for (let i = 0; i < xy.length / 2; i++) {
|
|
142
|
+
xyz[i * 3 + 0] = xy[i * 2 + 0];
|
|
143
|
+
xyz[i * 3 + 1] = xy[i * 2 + 1];
|
|
144
|
+
xyz[i * 3 + 2] = z[i];
|
|
145
|
+
}
|
|
146
|
+
return { value: xyz, size: 3 };
|
|
147
|
+
}
|
|
148
|
+
function fromGeometry(geometry, type) {
|
|
149
|
+
switch (type) {
|
|
150
|
+
case import_header_generated.GeometryType.Point:
|
|
151
|
+
case import_header_generated.GeometryType.MultiPoint:
|
|
152
|
+
return parsePoint(geometry);
|
|
153
|
+
case import_header_generated.GeometryType.LineString:
|
|
154
|
+
case import_header_generated.GeometryType.MultiLineString:
|
|
155
|
+
return parseLines(geometry);
|
|
156
|
+
case import_header_generated.GeometryType.Polygon:
|
|
157
|
+
return parsePolygons(geometry);
|
|
158
|
+
case import_header_generated.GeometryType.MultiPolygon:
|
|
159
|
+
return parseMultiPolygons(geometry);
|
|
160
|
+
default:
|
|
161
|
+
throw new Error(`Unimplemented geometry type: ${type}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// src/lib/parse-flatgeobuf.ts
|
|
166
|
+
function binaryFromFeature(feature, header) {
|
|
167
|
+
const geometry = feature.geometry();
|
|
168
|
+
const geometryType = header.geometryType || geometry.type();
|
|
169
|
+
const parsedGeometry = fromGeometry(geometry, geometryType);
|
|
170
|
+
parsedGeometry.properties = (0, import_feature.parseProperties)(feature, header.columns);
|
|
171
|
+
return parsedGeometry;
|
|
172
|
+
}
|
|
173
|
+
function parseFlatGeobuf(arrayBuffer, options) {
|
|
174
|
+
var _a, _b;
|
|
175
|
+
const shape = ((_a = options == null ? void 0 : options.gis) == null ? void 0 : _a.format) || ((_b = options == null ? void 0 : options.flatgeobuf) == null ? void 0 : _b.shape);
|
|
176
|
+
switch (shape) {
|
|
177
|
+
case "geojson":
|
|
178
|
+
case "geojson-table": {
|
|
179
|
+
const features = parseFlatGeobufToGeoJSON(arrayBuffer, options);
|
|
180
|
+
const table = {
|
|
181
|
+
shape: "geojson-table",
|
|
182
|
+
type: "FeatureCollection",
|
|
183
|
+
features
|
|
184
|
+
};
|
|
185
|
+
return table;
|
|
186
|
+
}
|
|
187
|
+
case "columnar-table":
|
|
188
|
+
const binary = parseFlatGeobufToBinary(arrayBuffer, options);
|
|
189
|
+
return { shape: "columnar-table", data: binary };
|
|
190
|
+
case "binary":
|
|
191
|
+
return parseFlatGeobufToBinary(arrayBuffer, options);
|
|
192
|
+
default:
|
|
193
|
+
throw new Error(shape);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function parseFlatGeobufToBinary(arrayBuffer, options = {}) {
|
|
197
|
+
const array = new Uint8Array(arrayBuffer);
|
|
198
|
+
return (0, import_generic.deserialize)(array, binaryFromFeature);
|
|
199
|
+
}
|
|
200
|
+
function parseFlatGeobufToGeoJSON(arrayBuffer, options = {}) {
|
|
201
|
+
if (arrayBuffer.byteLength === 0) {
|
|
202
|
+
return [];
|
|
203
|
+
}
|
|
204
|
+
const { reproject = false, _targetCrs = "WGS84" } = options && options.gis || {};
|
|
205
|
+
const arr = new Uint8Array(arrayBuffer);
|
|
206
|
+
let headerMeta;
|
|
207
|
+
const { features } = (0, import_geojson.deserialize)(arr, void 0, (header) => {
|
|
208
|
+
headerMeta = header;
|
|
209
|
+
});
|
|
210
|
+
const crs = headerMeta && headerMeta.crs;
|
|
211
|
+
let projection;
|
|
212
|
+
if (reproject && crs) {
|
|
213
|
+
try {
|
|
214
|
+
projection = new import_proj4.Proj4Projection({ from: crs.wkt, to: _targetCrs });
|
|
215
|
+
} catch (e) {
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (projection) {
|
|
219
|
+
return (0, import_gis.transformGeoJsonCoords)(features, (coords) => projection.project(coords));
|
|
220
|
+
}
|
|
221
|
+
return features;
|
|
222
|
+
}
|
|
223
|
+
function parseFlatGeobufInBatches(stream, options) {
|
|
224
|
+
if (options && options.gis && options.gis.format === "binary") {
|
|
225
|
+
return parseFlatGeobufInBatchesToBinary(stream, options);
|
|
226
|
+
}
|
|
227
|
+
return parseFlatGeobufInBatchesToGeoJSON(stream, options);
|
|
228
|
+
}
|
|
229
|
+
function parseFlatGeobufInBatchesToBinary(stream, options) {
|
|
230
|
+
const iterator = (0, import_generic.deserialize)(stream, binaryFromFeature);
|
|
231
|
+
return iterator;
|
|
232
|
+
}
|
|
233
|
+
async function* parseFlatGeobufInBatchesToGeoJSON(stream, options) {
|
|
234
|
+
const { reproject = false, _targetCrs = "WGS84" } = options && options.gis || {};
|
|
235
|
+
let headerMeta;
|
|
236
|
+
const iterator = (0, import_geojson.deserialize)(stream, void 0, (header) => {
|
|
237
|
+
headerMeta = header;
|
|
238
|
+
});
|
|
239
|
+
let projection;
|
|
240
|
+
let firstRecord = true;
|
|
241
|
+
for await (const feature of iterator) {
|
|
242
|
+
if (firstRecord) {
|
|
243
|
+
const crs = headerMeta && headerMeta.crs;
|
|
244
|
+
if (reproject && crs) {
|
|
245
|
+
projection = new import_proj4.Proj4Projection({ from: crs.wkt, to: _targetCrs });
|
|
246
|
+
}
|
|
247
|
+
firstRecord = false;
|
|
248
|
+
}
|
|
249
|
+
if (reproject && projection) {
|
|
250
|
+
yield (0, import_gis.transformGeoJsonCoords)([feature], (coords) => projection.project(coords));
|
|
251
|
+
} else {
|
|
252
|
+
yield feature;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// src/index.ts
|
|
258
|
+
var FlatGeobufLoader2 = {
|
|
259
|
+
...FlatGeobufLoader,
|
|
260
|
+
parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),
|
|
261
|
+
parseSync: parseFlatGeobuf,
|
|
262
|
+
// @ts-expect-error this is a stream parser not an async iterator parser
|
|
263
|
+
parseInBatchesFromStream: parseFlatGeobufInBatches,
|
|
264
|
+
binary: true
|
|
265
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FlatGeobufLoader as FlatGeobufWorkerLoader } from
|
|
2
|
-
import { parseFlatGeobuf, parseFlatGeobufInBatches } from
|
|
1
|
+
import { FlatGeobufLoader as FlatGeobufWorkerLoader } from "./flatgeobuf-loader.js";
|
|
2
|
+
import { parseFlatGeobuf, parseFlatGeobufInBatches } from "./lib/parse-flatgeobuf.js";
|
|
3
3
|
export { FlatGeobufWorkerLoader };
|
|
4
4
|
export const FlatGeobufLoader = {
|
|
5
5
|
...FlatGeobufWorkerLoader,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["FlatGeobufLoader","FlatGeobufWorkerLoader","parseFlatGeobuf","parseFlatGeobufInBatches","parse","arrayBuffer","options","parseSync","parseInBatchesFromStream","binary"],"sources":["../src/index.ts"],"sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport type {FlatGeobufLoaderOptions} from './flatgeobuf-loader';\nimport {FlatGeobufLoader as FlatGeobufWorkerLoader} from './flatgeobuf-loader';\nimport {parseFlatGeobuf, parseFlatGeobufInBatches} from './lib/parse-flatgeobuf';\n\nexport {FlatGeobufWorkerLoader};\n\nexport const FlatGeobufLoader: LoaderWithParser<any, any, FlatGeobufLoaderOptions> = {\n ...FlatGeobufWorkerLoader,\n parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),\n parseSync: parseFlatGeobuf,\n // @ts-expect-error this is a stream parser not an async iterator parser\n parseInBatchesFromStream: parseFlatGeobufInBatches,\n binary: true\n};\n"],"mappings":"SAEQA,gBAAgB,IAAIC,sBAAsB;AAAA,SAC1CC,eAAe,EAAEC,wBAAwB;AAEjD,SAAQF,sBAAsB;AAE9B,OAAO,MAAMD,gBAAqE,GAAG;EACnF,GAAGC,sBAAsB;EACzBG,KAAK,EAAE,MAAAA,CAAOC,WAAW,EAAEC,OAAO,KAAKJ,eAAe,CAACG,WAAW,EAAEC,OAAO,CAAC;EAC5EC,SAAS,EAAEL,eAAe;EAE1BM,wBAAwB,EAAEL,wBAAwB;EAClDM,MAAM,EAAE;AACV,CAAC"}
|
|
@@ -120,7 +120,7 @@ export function fromGeometry(geometry, type) {
|
|
|
120
120
|
case GeometryType.MultiPolygon:
|
|
121
121
|
return parseMultiPolygons(geometry);
|
|
122
122
|
default:
|
|
123
|
-
throw new Error(
|
|
123
|
+
throw new Error(`Unimplemented geometry type: ${type}`);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
//# sourceMappingURL=binary-geometries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-geometries.js","names":["GeometryType","parsePoint","geometry","xy","xyArray","z","zArray","positions","blitArrays","parseLines","ends","endsArray","Array","from","length","unshift","pathIndices","value","Uint16Array","size","parsePolygons","primitivePolygonIndices","polygonIndices","parseMultiPolygons","parsedParts","nPositions","nPrimitivePolygonIndices","nPolygonIndices","i","partsLength","part","parts","polygon","push","concatPositions","Float64Array","concatPrimitivePolygonIndices","Uint32Array","concatPolygonIndices","positionCounter","primitivePolygonIndicesCounter","polygonIndicesCounter","positionSize","parsedPart","set","subarray","map","x","Error","totalLength","xyz","fromGeometry","type","Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"],"sources":["../../src/lib/binary-geometries.ts"],"sourcesContent":["import {GeometryType} from 'flatgeobuf/lib/cjs/header_generated';\n\n// Parse Point to flat array\nfunction parsePoint(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n return {positions};\n}\n\nfunction parseLines(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a single LineString. Otherwise, contains the end\n // indices of each part of the MultiLineString. geometry.endsArray() omits the\n // initial 0 that we have in our internal format.\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const pathIndices = {value: new Uint16Array(ends), size: 1};\n\n return {\n positions,\n pathIndices\n };\n}\n\nfunction parsePolygons(geometry) {\n const xy = geometry.xyArray();\n const z = geometry.zArray();\n const positions = blitArrays(xy, z);\n\n // If endsArray is null, a simple Polygon with no inner rings. Otherwise,\n // contains the end indices of each ring of the Polygon. geometry.endsArray()\n // omits the initial 0 that we have in our internal format.\n const ends = (geometry.endsArray() && Array.from(geometry.endsArray())) || [xy.length / 2];\n ends.unshift(0);\n\n const primitivePolygonIndices = {value: new Uint16Array(ends), size: 1};\n const polygonIndices = {value: new Uint16Array([0, xy.length / 2]), size: 1};\n\n return {\n positions,\n primitivePolygonIndices,\n polygonIndices\n };\n}\n\n// eslint-disable-next-line max-statements\nfunction parseMultiPolygons(geometry) {\n // Create arrays for each geometry part, then concatenate\n const parsedParts: any[] = [];\n let nPositions = 0;\n let nPrimitivePolygonIndices = 1;\n let nPolygonIndices = 1;\n\n for (let i = 0; i < geometry.partsLength(); i++) {\n const part = geometry.parts(i);\n const polygon = parsePolygons(part);\n\n nPositions += polygon.positions.value.length;\n nPrimitivePolygonIndices += polygon.primitivePolygonIndices.value.length - 1;\n nPolygonIndices += polygon.polygonIndices.value.length - 1;\n\n parsedParts.push(polygon);\n }\n\n const concatPositions = new Float64Array(nPositions);\n const concatPrimitivePolygonIndices = new Uint32Array(nPrimitivePolygonIndices);\n const concatPolygonIndices = new Uint32Array(nPolygonIndices);\n\n let positionCounter = 0;\n let primitivePolygonIndicesCounter = 1;\n let polygonIndicesCounter = 1;\n\n // Assumes all parts of the multipolygon have the same size\n const positionSize = parsedParts[0].positions.size;\n\n for (const parsedPart of parsedParts) {\n concatPositions.set(parsedPart.positions.value, positionCounter * positionSize);\n\n // For indices, need to add positionCounter so that position indices are\n // correct in the concatenated positions\n concatPrimitivePolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.primitivePolygonIndices.value.subarray(1).map((x) => x + positionCounter),\n primitivePolygonIndicesCounter\n );\n concatPolygonIndices.set(\n // eslint-disable-next-line\n parsedPart.polygonIndices.value.subarray(1).map((x) => x + positionCounter),\n polygonIndicesCounter\n );\n\n positionCounter += parsedPart.positions.value.length / positionSize;\n primitivePolygonIndicesCounter += parsedPart.primitivePolygonIndices.value.length - 1;\n polygonIndicesCounter += parsedPart.polygonIndices.value.length - 1;\n }\n\n return {\n positions: {value: concatPositions, size: positionSize},\n primitivePolygonIndices: {value: concatPrimitivePolygonIndices, size: 1},\n polygonIndices: {value: concatPolygonIndices, size: 1}\n };\n}\n\n// Combine xy and z arrays\nfunction blitArrays(xy, z) {\n if (!z) {\n return {value: xy, size: 2};\n }\n\n if (z.length * 2 !== xy.length) {\n throw new Error('Z array must be half XY array\\'s length');\n }\n const totalLength = xy.length + z.length;\n\n const xyz = new Float64Array(totalLength);\n for (let i = 0; i < xy.length / 2; i++) {\n xyz[i * 3 + 0] = xy[i * 2 + 0];\n xyz[i * 3 + 1] = xy[i * 2 + 1];\n xyz[i * 3 + 2] = z[i];\n }\n return {value: xyz, size: 3};\n}\n\nexport function fromGeometry(geometry, type) {\n switch (type) {\n case GeometryType.Point:\n case GeometryType.MultiPoint:\n return parsePoint(geometry);\n case GeometryType.LineString:\n case GeometryType.MultiLineString:\n return parseLines(geometry);\n case GeometryType.Polygon:\n return parsePolygons(geometry);\n case GeometryType.MultiPolygon:\n return parseMultiPolygons(geometry);\n default:\n throw new Error(`Unimplemented geometry type: ${type}`);\n }\n}\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { transformGeoJsonCoords } from '@loaders.gl/gis';
|
|
|
3
3
|
import { deserialize as deserializeGeoJson } from 'flatgeobuf/lib/cjs/geojson';
|
|
4
4
|
import { deserialize as deserializeGeneric } from 'flatgeobuf/lib/cjs/generic';
|
|
5
5
|
import { parseProperties as parsePropertiesBinary } from 'flatgeobuf/lib/cjs/generic/feature';
|
|
6
|
-
import { fromGeometry as binaryFromGeometry } from
|
|
6
|
+
import { fromGeometry as binaryFromGeometry } from "./binary-geometries.js";
|
|
7
7
|
function binaryFromFeature(feature, header) {
|
|
8
8
|
const geometry = feature.geometry();
|
|
9
9
|
const geometryType = header.geometryType || geometry.type();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-flatgeobuf.js","names":["Proj4Projection","transformGeoJsonCoords","deserialize","deserializeGeoJson","deserializeGeneric","parseProperties","parsePropertiesBinary","fromGeometry","binaryFromGeometry","binaryFromFeature","feature","header","geometry","geometryType","type","parsedGeometry","properties","columns","parseFlatGeobuf","arrayBuffer","options","_options$gis","_options$flatgeobuf","shape","gis","format","flatgeobuf","features","parseFlatGeobufToGeoJSON","table","binary","parseFlatGeobufToBinary","data","Error","arguments","length","undefined","array","Uint8Array","byteLength","reproject","_targetCrs","arr","headerMeta","crs","projection","from","wkt","to","e","coords","project","parseFlatGeobufInBatches","stream","parseFlatGeobufInBatchesToBinary","parseFlatGeobufInBatchesToGeoJSON","iterator","firstRecord"],"sources":["../../src/lib/parse-flatgeobuf.ts"],"sourcesContent":["import {Proj4Projection} from '@math.gl/proj4';\nimport {transformGeoJsonCoords} from '@loaders.gl/gis';\n\nimport {deserialize as deserializeGeoJson} from 'flatgeobuf/lib/cjs/geojson';\nimport {deserialize as deserializeGeneric} from 'flatgeobuf/lib/cjs/generic';\nimport {parseProperties as parsePropertiesBinary} from 'flatgeobuf/lib/cjs/generic/feature';\n\nimport type {FlatGeobufLoaderOptions} from '../flatgeobuf-loader';\nimport type {GeoJSONTable, Feature, Table} from '@loaders.gl/schema';\nimport {fromGeometry as binaryFromGeometry} from './binary-geometries';\n// import {Feature} from 'flatgeobuf/lib/cjs/feature_generated';\n\n// TODO: reproject binary features\nfunction binaryFromFeature(feature, header) {\n const geometry = feature.geometry();\n\n // FlatGeobuf files can only hold a single geometry type per file, otherwise\n // GeometryType is GeometryCollection\n // I believe geometry.type() is null (0) except when the geometry type isn't\n // known in the header?\n const geometryType = header.geometryType || geometry.type();\n const parsedGeometry = binaryFromGeometry(geometry, geometryType);\n // @ts-expect-error this looks wrong\n parsedGeometry.properties = parsePropertiesBinary(feature, header.columns);\n\n // TODO: wrap binary data either in points, lines, or polygons key\n return parsedGeometry;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param arrayBuffer A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object\n */\nexport function parseFlatGeobuf(\n arrayBuffer: ArrayBuffer,\n options?: FlatGeobufLoaderOptions\n): Table {\n const shape = options?.gis?.format || options?.flatgeobuf?.shape;\n\n switch (shape) {\n case 'geojson':\n case 'geojson-table': {\n const features = parseFlatGeobufToGeoJSON(arrayBuffer, options);\n const table: GeoJSONTable = {\n shape: 'geojson-table',\n type: 'FeatureCollection',\n features\n };\n return table;\n }\n\n case 'columnar-table': // binary + some JS arrays\n const binary = parseFlatGeobufToBinary(arrayBuffer, options);\n // @ts-expect-error\n return {shape: 'columnar-table', data: binary};\n\n case 'binary':\n // @ts-expect-error\n return parseFlatGeobufToBinary(arrayBuffer, options);\n\n default:\n throw new Error(shape);\n }\n}\n\nfunction parseFlatGeobufToBinary(arrayBuffer: ArrayBuffer, options: FlatGeobufLoaderOptions = {}) {\n // TODO: reproject binary features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const array = new Uint8Array(arrayBuffer);\n // @ts-expect-error this looks wrong\n return deserializeGeneric(array, binaryFromFeature);\n}\n\nfunction parseFlatGeobufToGeoJSON(\n arrayBuffer: ArrayBuffer,\n options: FlatGeobufLoaderOptions = {}\n): Feature[] {\n if (arrayBuffer.byteLength === 0) {\n return [];\n }\n\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n const arr = new Uint8Array(arrayBuffer);\n\n let headerMeta;\n // @ts-expect-error this looks wrong\n const {features} = deserializeGeoJson(arr, undefined, (header) => {\n headerMeta = header;\n });\n\n const crs = headerMeta && headerMeta.crs;\n let projection;\n if (reproject && crs) {\n // Constructing the projection may fail for some invalid WKT strings\n try {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n } catch (e) {\n // no op\n }\n }\n\n if (projection) {\n return transformGeoJsonCoords(features, (coords) => projection.project(coords));\n }\n\n return features;\n}\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param {ReadableStream} _ A FlatGeobuf arrayBuffer\n * @return A GeoJSON geometry object iterator\n */\n// eslint-disable-next-line complexity\nexport function parseFlatGeobufInBatches(stream, options: FlatGeobufLoaderOptions) {\n if (options && options.gis && options.gis.format === 'binary') {\n return parseFlatGeobufInBatchesToBinary(stream, options);\n }\n\n return parseFlatGeobufInBatchesToGeoJSON(stream, options);\n}\n\nfunction parseFlatGeobufInBatchesToBinary(stream, options: FlatGeobufLoaderOptions) {\n // TODO: reproject binary streaming features\n // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n // @ts-expect-error\n const iterator = deserializeGeneric(stream, binaryFromFeature);\n return iterator;\n}\n\n// eslint-disable-next-line complexity\nasync function* parseFlatGeobufInBatchesToGeoJSON(stream, options: FlatGeobufLoaderOptions) {\n const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};\n\n let headerMeta;\n const iterator = deserializeGeoJson(stream, undefined, (header) => {\n headerMeta = header;\n });\n\n let projection;\n let firstRecord = true;\n // @ts-expect-error this looks wrong\n for await (const feature of iterator) {\n if (firstRecord) {\n const crs = headerMeta && headerMeta.crs;\n if (reproject && crs) {\n projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});\n }\n\n firstRecord = false;\n }\n\n if (reproject && projection) {\n // eslint-disable-next-line\n yield transformGeoJsonCoords([feature], (coords) => projection.project(coords));\n } else {\n yield feature;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatgeobuf-worker.js","names":["createLoaderWorker","FlatGeobufLoader"],"sources":["../../src/workers/flatgeobuf-worker.ts"],"sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {FlatGeobufLoader} from '../index';\n\ncreateLoaderWorker(FlatGeobufLoader);\n"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,0BAA0B;AAAC,SACpDC,gBAAgB;AAExBD,kBAAkB,CAACC,gBAAgB,CAAC"}
|