@loaders.gl/flatgeobuf 4.0.0-alpha.4 → 4.0.0-alpha.6

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 (62) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/dist.min.js +9551 -0
  5. package/dist/es5/bundle.js +6 -0
  6. package/dist/es5/bundle.js.map +1 -0
  7. package/dist/es5/flatgeobuf-loader.js +26 -0
  8. package/dist/es5/flatgeobuf-loader.js.map +1 -0
  9. package/dist/es5/index.js +47 -0
  10. package/dist/es5/index.js.map +1 -0
  11. package/dist/es5/lib/binary-geometries.js +137 -0
  12. package/dist/es5/lib/binary-geometries.js.map +1 -0
  13. package/dist/es5/lib/parse-flatgeobuf.js +189 -0
  14. package/dist/es5/lib/parse-flatgeobuf.js.map +1 -0
  15. package/dist/es5/lib/types.js +2 -0
  16. package/dist/es5/lib/types.js.map +1 -0
  17. package/dist/es5/workers/flatgeobuf-worker.js +6 -0
  18. package/dist/es5/workers/flatgeobuf-worker.js.map +1 -0
  19. package/dist/esm/bundle.js +4 -0
  20. package/dist/esm/bundle.js.map +1 -0
  21. package/dist/esm/flatgeobuf-loader.js +18 -0
  22. package/dist/esm/flatgeobuf-loader.js.map +1 -0
  23. package/dist/esm/index.js +12 -0
  24. package/dist/esm/index.js.map +1 -0
  25. package/dist/esm/lib/binary-geometries.js +126 -0
  26. package/dist/esm/lib/binary-geometries.js.map +1 -0
  27. package/dist/esm/lib/parse-flatgeobuf.js +112 -0
  28. package/dist/esm/lib/parse-flatgeobuf.js.map +1 -0
  29. package/dist/esm/lib/types.js +2 -0
  30. package/dist/esm/lib/types.js.map +1 -0
  31. package/dist/esm/workers/flatgeobuf-worker.js +4 -0
  32. package/dist/esm/workers/flatgeobuf-worker.js.map +1 -0
  33. package/dist/flatgeobuf-loader.d.ts +18 -0
  34. package/dist/flatgeobuf-loader.d.ts.map +1 -0
  35. package/dist/flatgeobuf-loader.js +22 -15
  36. package/dist/flatgeobuf-worker.js +8814 -4235
  37. package/dist/index.d.ts +28 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +13 -10
  40. package/dist/lib/binary-geometries.d.ts +20 -0
  41. package/dist/lib/binary-geometries.d.ts.map +1 -0
  42. package/dist/lib/binary-geometries.js +120 -0
  43. package/dist/lib/parse-flatgeobuf.d.ts +8 -0
  44. package/dist/lib/parse-flatgeobuf.d.ts.map +1 -0
  45. package/dist/lib/parse-flatgeobuf.js +126 -15
  46. package/dist/lib/types.d.ts +13 -0
  47. package/dist/lib/types.d.ts.map +1 -0
  48. package/dist/lib/types.js +2 -0
  49. package/dist/workers/flatgeobuf-worker.d.ts +2 -0
  50. package/dist/workers/flatgeobuf-worker.d.ts.map +1 -0
  51. package/dist/workers/flatgeobuf-worker.js +5 -4
  52. package/package.json +12 -13
  53. package/src/flatgeobuf-loader.ts +4 -1
  54. package/src/index.ts +1 -1
  55. package/src/lib/binary-geometries.ts +144 -0
  56. package/src/lib/parse-flatgeobuf.ts +132 -10
  57. package/src/lib/types.ts +13 -0
  58. package/dist/bundle.js.map +0 -1
  59. package/dist/flatgeobuf-loader.js.map +0 -1
  60. package/dist/index.js.map +0 -1
  61. package/dist/lib/parse-flatgeobuf.js.map +0 -1
  62. package/dist/workers/flatgeobuf-worker.js.map +0 -1
@@ -1,19 +1,99 @@
1
- // import {deserialize} from 'flatgeobuf/lib/geojson/featurecollection';
2
- import {deserialize, deserializeStream} from 'flatgeobuf/dist/flatgeobuf-geojson.min';
1
+ // @ts-nocheck
2
+ import {Proj4Projection} from '@math.gl/proj4';
3
+ import {transformGeoJsonCoords} from '@loaders.gl/gis';
4
+
5
+ import {deserialize as deserializeGeoJson} from 'flatgeobuf/lib/cjs/geojson';
6
+ import {deserialize as deserializeGeneric} from 'flatgeobuf/lib/cjs/generic';
7
+ import {parseProperties as parsePropertiesBinary} from 'flatgeobuf/lib/cjs/generic/feature';
8
+
9
+ import {fromGeometry as binaryFromGeometry} from './binary-geometries';
10
+ import {FlatGeobufLoaderOptions} from './types';
11
+ import {GeoJSONRowTable, Feature} from '@loaders.gl/schema';
12
+
13
+ // TODO: reproject binary features
14
+ function binaryFromFeature(feature, header) {
15
+ const geometry = feature.geometry();
16
+
17
+ // FlatGeobuf files can only hold a single geometry type per file, otherwise
18
+ // GeometryType is GeometryCollection
19
+ // I believe geometry.type() is null (0) except when the geometry type isn't
20
+ // known in the header?
21
+ const geometryType = header.geometryType || geometry.type();
22
+ const parsedGeometry = binaryFromGeometry(geometry, geometryType);
23
+ parsedGeometry.properties = parsePropertiesBinary(feature, header.columns);
24
+
25
+ // TODO: wrap binary data either in points, lines, or polygons key
26
+ return parsedGeometry;
27
+ }
3
28
 
4
29
  /*
5
30
  * Parse FlatGeobuf arrayBuffer and return GeoJSON.
6
31
  *
7
- * @param {arrayBuffer} _ A FlatGeobuf arrayBuffer
8
- * @return {?Object} A GeoJSON geometry object
32
+ * @param arrayBuffer A FlatGeobuf arrayBuffer
33
+ * @return A GeoJSON geometry object
9
34
  */
10
- export default function parseFlatGeobuf(input, options) {
11
- if (input.byteLength === 0) {
35
+ export function parseFlatGeobuf(arrayBuffer: ArrayBuffer, options?: FlatGeobufLoaderOptions) {
36
+ const shape = options?.gis?.format || options?.flatgeobuf?.shape;
37
+
38
+ switch (shape) {
39
+ case 'geojson-row-table': {
40
+ const table: GeoJSONRowTable = {
41
+ shape: 'geojson-row-table',
42
+ data: parseFlatGeobufToGeoJSON(arrayBuffer, options)
43
+ };
44
+ return table;
45
+ }
46
+ case 'columnar-table': // binary + some JS arrays
47
+ return {shape: 'columnar-table', data: parseFlatGeobufToBinary(arrayBuffer, options)};
48
+ case 'geojson':
49
+ return parseFlatGeobufToGeoJSON(arrayBuffer, options);
50
+ case 'binary':
51
+ return parseFlatGeobufToBinary(arrayBuffer, options);
52
+ default:
53
+ throw new Error(shape);
54
+ }
55
+ }
56
+
57
+ function parseFlatGeobufToBinary(arrayBuffer: ArrayBuffer, options: FlatGeobufLoaderOptions) {
58
+ // TODO: reproject binary features
59
+ // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};
60
+
61
+ const array = new Uint8Array(arrayBuffer);
62
+ return deserializeGeneric(array, binaryFromFeature);
63
+ }
64
+
65
+ function parseFlatGeobufToGeoJSON(
66
+ arrayBuffer: ArrayBuffer,
67
+ options: FlatGeobufLoaderOptions
68
+ ): Feature[] {
69
+ if (arrayBuffer.byteLength === 0) {
12
70
  return [];
13
71
  }
14
72
 
15
- const arr = new Uint8Array(input);
16
- const {features} = deserialize(arr);
73
+ const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};
74
+
75
+ const arr = new Uint8Array(arrayBuffer);
76
+
77
+ let headerMeta;
78
+ const {features} = deserializeGeoJson(arr, false, (header) => {
79
+ headerMeta = header;
80
+ });
81
+
82
+ const crs = headerMeta && headerMeta.crs;
83
+ let projection;
84
+ if (reproject && crs) {
85
+ // Constructing the projection may fail for some invalid WKT strings
86
+ try {
87
+ projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});
88
+ } catch (e) {
89
+ // no op
90
+ }
91
+ }
92
+
93
+ if (projection) {
94
+ return transformGeoJsonCoords(features, (coords) => projection.project(coords));
95
+ }
96
+
17
97
  return features;
18
98
  }
19
99
 
@@ -23,7 +103,49 @@ export default function parseFlatGeobuf(input, options) {
23
103
  * @param {ReadableStream} _ A FlatGeobuf arrayBuffer
24
104
  * @return A GeoJSON geometry object iterator
25
105
  */
26
- export function parseFlatGeobufInBatches(stream, options) {
27
- const iterator = deserializeStream(stream);
106
+ // eslint-disable-next-line complexity
107
+ export function parseFlatGeobufInBatches(stream, options: FlatGeobufLoaderOptions) {
108
+ if (options && options.gis && options.gis.format === 'binary') {
109
+ return parseFlatGeobufInBatchesToBinary(stream, options);
110
+ }
111
+
112
+ return parseFlatGeobufInBatchesToGeoJSON(stream, options);
113
+ }
114
+
115
+ function parseFlatGeobufInBatchesToBinary(stream, options: FlatGeobufLoaderOptions) {
116
+ // TODO: reproject binary streaming features
117
+ // const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};
118
+
119
+ const iterator = deserializeGeneric(stream, binaryFromFeature);
28
120
  return iterator;
29
121
  }
122
+
123
+ // eslint-disable-next-line complexity
124
+ async function* parseFlatGeobufInBatchesToGeoJSON(stream, options: FlatGeobufLoaderOptions) {
125
+ const {reproject = false, _targetCrs = 'WGS84'} = (options && options.gis) || {};
126
+
127
+ let headerMeta;
128
+ const iterator = deserializeGeoJson(stream, false, (header) => {
129
+ headerMeta = header;
130
+ });
131
+
132
+ let projection;
133
+ let firstRecord = true;
134
+ for await (const feature of iterator) {
135
+ if (firstRecord) {
136
+ const crs = headerMeta && headerMeta.crs;
137
+ if (reproject && crs) {
138
+ projection = new Proj4Projection({from: crs.wkt, to: _targetCrs});
139
+ }
140
+
141
+ firstRecord = false;
142
+ }
143
+
144
+ if (reproject && projection) {
145
+ // eslint-disable-next-line
146
+ yield transformGeoJsonCoords([feature], (coords) => projection.project(coords));
147
+ } else {
148
+ yield feature;
149
+ }
150
+ }
151
+ }
@@ -0,0 +1,13 @@
1
+ import type {LoaderOptions} from '@loaders.gl/loader-utils';
2
+
3
+ export type FlatGeobufLoaderOptions = LoaderOptions & {
4
+ flatgeobuf?: {
5
+ shape?: 'geojson-row-table' | 'columnar-table' | 'geojson' | 'binary';
6
+ };
7
+ gis?: {
8
+ reproject?: boolean;
9
+ _targetCrs?: string;
10
+ /** @deprecated Use options.flatgeobuf.shape */
11
+ format?: 'geojson-row-table' | 'columnar-table' | 'geojson' | 'binary';
12
+ };
13
+ };
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/flatgeobuf-loader.ts"],"names":["VERSION","FlatGeobufLoader","id","name","module","version","worker","extensions","mimeTypes","category","options","flatgeobuf","_typecheckFlatGeobufLoader"],"mappings":"AAIA,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAEA,OAAO,MAAMC,gBAAgB,GAAG;AAC9BC,EAAAA,EAAE,EAAE,YAD0B;AAE9BC,EAAAA,IAAI,EAAE,YAFwB;AAG9BC,EAAAA,MAAM,EAAE,YAHsB;AAI9BC,EAAAA,OAAO,EAAEL,OAJqB;AAK9BM,EAAAA,MAAM,EAAE,IALsB;AAM9BC,EAAAA,UAAU,EAAE,CAAC,KAAD,CANkB;AAO9BC,EAAAA,SAAS,EAAE,CAAC,0BAAD,CAPmB;AAQ9BC,EAAAA,QAAQ,EAAE,UARoB;AAS9BC,EAAAA,OAAO,EAAE;AACPC,IAAAA,UAAU,EAAE;AADL;AATqB,CAAzB;AAcP,OAAO,MAAMC,0BAAkC,GAAGX,gBAA3C","sourcesContent":["import type {Loader} 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 const FlatGeobufLoader = {\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 }\n};\n\nexport const _typecheckFlatGeobufLoader: Loader = FlatGeobufLoader;\n"],"file":"flatgeobuf-loader.js"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["FlatGeobufLoader","FlatGeobufWorkerLoader","parseFlatGeobuf","parseFlatGeobufInBatches","parse","arrayBuffer","options","parseSync","parseInBatchesFromStream","binary","_typecheckFlatGeobufLoader"],"mappings":"AACA,SAAQA,gBAAgB,IAAIC,sBAA5B,QAAyD,qBAAzD;AACA,OAAOC,eAAP,IAAyBC,wBAAzB,QAAwD,wBAAxD;AAEA,SAAQF,sBAAR;AAEA,OAAO,MAAMD,gBAAgB,GAAG,EAC9B,GAAGC,sBAD2B;AAE9BG,EAAAA,KAAK,EAAE,OAAOC,WAAP,EAAoBC,OAApB,KAAgCJ,eAAe,CAACG,WAAD,EAAcC,OAAd,CAFxB;AAG9BC,EAAAA,SAAS,EAAEL,eAHmB;AAI9BM,EAAAA,wBAAwB,EAAEL,wBAJI;AAK9BM,EAAAA,MAAM,EAAE;AALsB,CAAzB;AAQP,OAAO,MAAMC,0BAA4C,GAAGV,gBAArD","sourcesContent":["import type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {FlatGeobufLoader as FlatGeobufWorkerLoader} from './flatgeobuf-loader';\nimport parseFlatGeobuf, {parseFlatGeobufInBatches} from './lib/parse-flatgeobuf';\n\nexport {FlatGeobufWorkerLoader};\n\nexport const FlatGeobufLoader = {\n ...FlatGeobufWorkerLoader,\n parse: async (arrayBuffer, options) => parseFlatGeobuf(arrayBuffer, options),\n parseSync: parseFlatGeobuf,\n parseInBatchesFromStream: parseFlatGeobufInBatches,\n binary: true\n};\n\nexport const _typecheckFlatGeobufLoader: LoaderWithParser = FlatGeobufLoader;\n"],"file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/parse-flatgeobuf.ts"],"names":["deserialize","deserializeStream","parseFlatGeobuf","input","options","byteLength","arr","Uint8Array","features","parseFlatGeobufInBatches","stream","iterator"],"mappings":"AACA,SAAQA,WAAR,EAAqBC,iBAArB,QAA6C,wCAA7C;AAQA,eAAe,SAASC,eAAT,CAAyBC,KAAzB,EAAgCC,OAAhC,EAAyC;AACtD,MAAID,KAAK,CAACE,UAAN,KAAqB,CAAzB,EAA4B;AAC1B,WAAO,EAAP;AACD;;AAED,QAAMC,GAAG,GAAG,IAAIC,UAAJ,CAAeJ,KAAf,CAAZ;AACA,QAAM;AAACK,IAAAA;AAAD,MAAaR,WAAW,CAACM,GAAD,CAA9B;AACA,SAAOE,QAAP;AACD;AAQD,OAAO,SAASC,wBAAT,CAAkCC,MAAlC,EAA0CN,OAA1C,EAAmD;AACxD,QAAMO,QAAQ,GAAGV,iBAAiB,CAACS,MAAD,CAAlC;AACA,SAAOC,QAAP;AACD","sourcesContent":["// import {deserialize} from 'flatgeobuf/lib/geojson/featurecollection';\nimport {deserialize, deserializeStream} from 'flatgeobuf/dist/flatgeobuf-geojson.min';\n\n/*\n * Parse FlatGeobuf arrayBuffer and return GeoJSON.\n *\n * @param {arrayBuffer} _ A FlatGeobuf arrayBuffer\n * @return {?Object} A GeoJSON geometry object\n */\nexport default function parseFlatGeobuf(input, options) {\n if (input.byteLength === 0) {\n return [];\n }\n\n const arr = new Uint8Array(input);\n const {features} = deserialize(arr);\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 */\nexport function parseFlatGeobufInBatches(stream, options) {\n const iterator = deserializeStream(stream);\n return iterator;\n}\n"],"file":"parse-flatgeobuf.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/workers/flatgeobuf-worker.ts"],"names":["createLoaderWorker","FlatGeobufLoader"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,0BAAjC;AACA,SAAQC,gBAAR,QAA+B,UAA/B;AAEAD,kBAAkB,CAACC,gBAAD,CAAlB","sourcesContent":["import {createLoaderWorker} from '@loaders.gl/loader-utils';\nimport {FlatGeobufLoader} from '../index';\n\ncreateLoaderWorker(FlatGeobufLoader);\n"],"file":"flatgeobuf-worker.js"}