@loaders.gl/arrow 4.1.0-alpha.1 → 4.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arrow-worker.js +1 -1
- package/dist/dist.dev.js +72 -25
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts +4 -2
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts.map +1 -1
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js +25 -23
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js.map +1 -1
- package/dist/index.cjs +69 -16
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/triangulate-on-worker.d.ts +39 -5
- package/dist/triangulate-on-worker.d.ts.map +1 -1
- package/dist/triangulate-on-worker.js +11 -1
- package/dist/triangulate-on-worker.js.map +1 -1
- package/dist/triangulation-worker.js +11672 -10
- package/dist/workers/hard-clone.d.ts +23 -0
- package/dist/workers/hard-clone.d.ts.map +1 -0
- package/dist/workers/hard-clone.js +57 -0
- package/dist/workers/hard-clone.js.map +1 -0
- package/dist/workers/triangulation-worker.js +34 -1
- package/dist/workers/triangulation-worker.js.map +1 -1
- package/package.json +6 -6
- package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +26 -19
- package/src/index.ts +8 -2
- package/src/triangulate-on-worker.ts +50 -7
- package/src/workers/hard-clone.ts +162 -0
- package/src/workers/triangulation-worker.ts +56 -2
package/dist/arrow-worker.js
CHANGED
|
@@ -12174,7 +12174,7 @@ return true;`);
|
|
|
12174
12174
|
}
|
|
12175
12175
|
|
|
12176
12176
|
// src/arrow-loader.ts
|
|
12177
|
-
var VERSION = true ? "4.1.0-alpha.
|
|
12177
|
+
var VERSION = true ? "4.1.0-alpha.2" : "latest";
|
|
12178
12178
|
var ArrowWorkerLoader = {
|
|
12179
12179
|
name: "Apache Arrow",
|
|
12180
12180
|
id: "arrow",
|
package/dist/dist.dev.js
CHANGED
|
@@ -30,7 +30,6 @@ var __exports__ = (() => {
|
|
|
30
30
|
ArrowLoader: () => ArrowLoader,
|
|
31
31
|
ArrowWorkerLoader: () => ArrowWorkerLoader,
|
|
32
32
|
ArrowWriter: () => ArrowWriter,
|
|
33
|
-
BINARY_GEOMETRY_TEMPLATE: () => BINARY_GEOMETRY_TEMPLATE,
|
|
34
33
|
GeoArrowLoader: () => GeoArrowLoader,
|
|
35
34
|
GeoArrowWorkerLoader: () => GeoArrowWorkerLoader,
|
|
36
35
|
TriangulationWorker: () => TriangulationWorker,
|
|
@@ -42,8 +41,11 @@ var __exports__ = (() => {
|
|
|
42
41
|
deserializeArrowType: () => deserializeArrowType,
|
|
43
42
|
getArrowType: () => getArrowType,
|
|
44
43
|
getBinaryGeometriesFromArrow: () => getBinaryGeometriesFromArrow,
|
|
44
|
+
getBinaryGeometryTemplate: () => getBinaryGeometryTemplate,
|
|
45
45
|
getMeanCentersFromBinaryGeometries: () => getMeanCentersFromBinaryGeometries,
|
|
46
46
|
getTriangleIndices: () => getTriangleIndices,
|
|
47
|
+
hardClone: () => hardClone,
|
|
48
|
+
parseGeoArrowOnWorker: () => parseGeoArrowOnWorker,
|
|
47
49
|
parseGeometryFromArrow: () => parseGeometryFromArrow,
|
|
48
50
|
serializeArrowField: () => serializeArrowField,
|
|
49
51
|
serializeArrowMetadata: () => serializeArrowMetadata,
|
|
@@ -13603,31 +13605,33 @@ return true;`);
|
|
|
13603
13605
|
BinaryGeometryType2["polygons"] = "polygons";
|
|
13604
13606
|
return BinaryGeometryType2;
|
|
13605
13607
|
}(BinaryGeometryType || {});
|
|
13606
|
-
|
|
13607
|
-
|
|
13608
|
-
|
|
13609
|
-
|
|
13610
|
-
|
|
13611
|
-
|
|
13612
|
-
|
|
13613
|
-
|
|
13614
|
-
|
|
13615
|
-
|
|
13616
|
-
|
|
13617
|
-
|
|
13618
|
-
|
|
13619
|
-
|
|
13620
|
-
|
|
13621
|
-
|
|
13608
|
+
function getBinaryGeometryTemplate() {
|
|
13609
|
+
return {
|
|
13610
|
+
globalFeatureIds: {
|
|
13611
|
+
value: new Uint32Array(0),
|
|
13612
|
+
size: 1
|
|
13613
|
+
},
|
|
13614
|
+
positions: {
|
|
13615
|
+
value: new Float32Array(0),
|
|
13616
|
+
size: 2
|
|
13617
|
+
},
|
|
13618
|
+
properties: [],
|
|
13619
|
+
numericProps: {},
|
|
13620
|
+
featureIds: {
|
|
13621
|
+
value: new Uint32Array(0),
|
|
13622
|
+
size: 1
|
|
13623
|
+
}
|
|
13624
|
+
};
|
|
13625
|
+
}
|
|
13622
13626
|
function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
13623
13627
|
const featureTypes = {
|
|
13624
13628
|
polygon: geoEncoding === "geoarrow.multipolygon" || geoEncoding === "geoarrow.polygon",
|
|
13625
13629
|
point: geoEncoding === "geoarrow.multipoint" || geoEncoding === "geoarrow.point",
|
|
13626
13630
|
line: geoEncoding === "geoarrow.multilinestring" || geoEncoding === "geoarrow.linestring"
|
|
13627
13631
|
};
|
|
13628
|
-
const chunks = options?.chunkIndex ? [geoColumn.data[options?.chunkIndex]] : geoColumn.data;
|
|
13632
|
+
const chunks = options?.chunkIndex !== void 0 && options?.chunkIndex >= 0 ? [geoColumn.data[options?.chunkIndex]] : geoColumn.data;
|
|
13629
13633
|
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
13630
|
-
let globalFeatureIdOffset = 0;
|
|
13634
|
+
let globalFeatureIdOffset = options?.chunkOffset || 0;
|
|
13631
13635
|
const binaryGeometries = [];
|
|
13632
13636
|
chunks.forEach((chunk) => {
|
|
13633
13637
|
const {
|
|
@@ -13663,12 +13667,12 @@ return true;`);
|
|
|
13663
13667
|
shape: "binary-feature-collection",
|
|
13664
13668
|
points: {
|
|
13665
13669
|
type: "Point",
|
|
13666
|
-
...
|
|
13670
|
+
...getBinaryGeometryTemplate(),
|
|
13667
13671
|
...featureTypes.point ? binaryContent : {}
|
|
13668
13672
|
},
|
|
13669
13673
|
lines: {
|
|
13670
13674
|
type: "LineString",
|
|
13671
|
-
...
|
|
13675
|
+
...getBinaryGeometryTemplate(),
|
|
13672
13676
|
...featureTypes.line ? binaryContent : {},
|
|
13673
13677
|
pathIndices: {
|
|
13674
13678
|
value: featureTypes.line ? geomOffset : new Uint16Array(0),
|
|
@@ -13677,7 +13681,7 @@ return true;`);
|
|
|
13677
13681
|
},
|
|
13678
13682
|
polygons: {
|
|
13679
13683
|
type: "Polygon",
|
|
13680
|
-
...
|
|
13684
|
+
...getBinaryGeometryTemplate(),
|
|
13681
13685
|
...featureTypes.polygon ? binaryContent : {},
|
|
13682
13686
|
polygonIndices: {
|
|
13683
13687
|
value: featureTypes.polygon ? geomOffset : new Uint16Array(0),
|
|
@@ -13791,7 +13795,7 @@ return true;`);
|
|
|
13791
13795
|
}
|
|
13792
13796
|
const triangleIndices = earcut(slicedFlatCoords, holeIndices.length > 0 ? holeIndices : void 0, nDim);
|
|
13793
13797
|
if (triangleIndices.length === 0) {
|
|
13794
|
-
throw Error("
|
|
13798
|
+
throw Error("earcut failed e.g. invalid polygon");
|
|
13795
13799
|
}
|
|
13796
13800
|
for (let j = 0; j < triangleIndices.length; j++) {
|
|
13797
13801
|
triangles.push(triangleIndices[j] + startIdx);
|
|
@@ -13833,8 +13837,8 @@ return true;`);
|
|
|
13833
13837
|
const triangles = options?.triangulate ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim) : null;
|
|
13834
13838
|
return {
|
|
13835
13839
|
featureIds,
|
|
13836
|
-
flatCoordinateArray,
|
|
13837
13840
|
nDim,
|
|
13841
|
+
flatCoordinateArray,
|
|
13838
13842
|
geomOffset,
|
|
13839
13843
|
geometryIndicies,
|
|
13840
13844
|
...options?.triangulate && triangles ? {
|
|
@@ -14709,6 +14713,40 @@ return true;`);
|
|
|
14709
14713
|
};
|
|
14710
14714
|
}
|
|
14711
14715
|
|
|
14716
|
+
// src/workers/hard-clone.ts
|
|
14717
|
+
function hardClone(data, force = false) {
|
|
14718
|
+
if ("data" in data) {
|
|
14719
|
+
return new Vector(data.data.map((data2) => hardClone(data2, force)));
|
|
14720
|
+
}
|
|
14721
|
+
const clonedChildren = [];
|
|
14722
|
+
for (const childData of data.children) {
|
|
14723
|
+
clonedChildren.push(hardClone(childData, force));
|
|
14724
|
+
}
|
|
14725
|
+
let clonedDictionary;
|
|
14726
|
+
if (data.dictionary !== void 0) {
|
|
14727
|
+
clonedDictionary = hardClone(data.dictionary, force);
|
|
14728
|
+
}
|
|
14729
|
+
const clonedBuffers = {
|
|
14730
|
+
[BufferType.OFFSET]: cloneBuffer(data.buffers[BufferType.OFFSET], force),
|
|
14731
|
+
[BufferType.DATA]: cloneBuffer(data.buffers[BufferType.DATA], force),
|
|
14732
|
+
[BufferType.VALIDITY]: cloneBuffer(data.buffers[BufferType.VALIDITY], force),
|
|
14733
|
+
[BufferType.TYPE]: cloneBuffer(data.buffers[BufferType.TYPE], force)
|
|
14734
|
+
};
|
|
14735
|
+
return new Data(data.type, data.offset, data.length, data._nullCount, clonedBuffers, clonedChildren, clonedDictionary);
|
|
14736
|
+
}
|
|
14737
|
+
function isTypedArraySliced(arr) {
|
|
14738
|
+
return !(arr.byteOffset === 0 && arr.byteLength === arr.buffer.byteLength);
|
|
14739
|
+
}
|
|
14740
|
+
function cloneBuffer(arr, force) {
|
|
14741
|
+
if (arr === void 0) {
|
|
14742
|
+
return arr;
|
|
14743
|
+
}
|
|
14744
|
+
if (!force && !isTypedArraySliced(arr)) {
|
|
14745
|
+
return arr;
|
|
14746
|
+
}
|
|
14747
|
+
return arr.slice();
|
|
14748
|
+
}
|
|
14749
|
+
|
|
14712
14750
|
// ../worker-utils/src/lib/env-utils/version.ts
|
|
14713
14751
|
var NPM_TAG = "latest";
|
|
14714
14752
|
function getVersion() {
|
|
@@ -15269,7 +15307,16 @@ return true;`);
|
|
|
15269
15307
|
options: {}
|
|
15270
15308
|
};
|
|
15271
15309
|
function triangulateOnWorker(data, options = {}) {
|
|
15272
|
-
return processOnWorker(TriangulationWorker,
|
|
15310
|
+
return processOnWorker(TriangulationWorker, {
|
|
15311
|
+
...data,
|
|
15312
|
+
operation: "triangulate"
|
|
15313
|
+
}, options);
|
|
15314
|
+
}
|
|
15315
|
+
function parseGeoArrowOnWorker(data, options = {}) {
|
|
15316
|
+
return processOnWorker(TriangulationWorker, {
|
|
15317
|
+
...data,
|
|
15318
|
+
operation: "parse-geoarrow"
|
|
15319
|
+
}, options);
|
|
15273
15320
|
}
|
|
15274
15321
|
|
|
15275
15322
|
// src/index.ts
|
|
@@ -21,7 +21,7 @@ export type BinaryDataFromGeoArrow = {
|
|
|
21
21
|
/**
|
|
22
22
|
* binary geometry template, see deck.gl BinaryGeometry
|
|
23
23
|
*/
|
|
24
|
-
export declare
|
|
24
|
+
export declare function getBinaryGeometryTemplate(): {
|
|
25
25
|
globalFeatureIds: {
|
|
26
26
|
value: Uint32Array;
|
|
27
27
|
size: number;
|
|
@@ -40,6 +40,8 @@ export declare const BINARY_GEOMETRY_TEMPLATE: {
|
|
|
40
40
|
export type BinaryGeometriesFromArrowOptions = {
|
|
41
41
|
/** option to specify which chunk to get binary geometries from, for progressive rendering */
|
|
42
42
|
chunkIndex?: number;
|
|
43
|
+
/** The offset (beginning index of rows) of input chunk. Used for reconstructing globalFeatureIds in web workers */
|
|
44
|
+
chunkOffset?: number;
|
|
43
45
|
/** option to get mean centers from geometries, for polygon filtering */
|
|
44
46
|
calculateMeanCenters?: boolean;
|
|
45
47
|
/** option to compute the triangle indices by tesselating polygons */
|
|
@@ -66,7 +68,7 @@ export declare function getMeanCentersFromBinaryGeometries(binaryGeometries: Bin
|
|
|
66
68
|
* @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring
|
|
67
69
|
* @param flatCoordinateArray Array of x, y or x, y, z positions
|
|
68
70
|
* @param nDim - number of dimensions per position
|
|
69
|
-
* @returns
|
|
71
|
+
* @returns triangle indices or null if invalid polygon and earcut fails
|
|
70
72
|
*/
|
|
71
73
|
export declare function getTriangleIndices(polygonIndices: Uint16Array, primitivePolygonIndices: Int32Array, flatCoordinateArray: Float64Array, nDim: number): Uint32Array | null;
|
|
72
74
|
//# sourceMappingURL=convert-geoarrow-to-binary-geometry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-geoarrow-to-binary-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAC,uBAAuB,IAAI,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAajD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,oEAAoE;IACpE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,wCAAwC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,6CAA6C;IAC7C,YAAY,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC;IAChE,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAsBF;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"convert-geoarrow-to-binary-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAC,uBAAuB,IAAI,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAajD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,oEAAoE;IACpE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,wCAAwC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,6CAA6C;IAC7C,YAAY,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC;IAChE,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAsBF;;GAEG;AACH,wBAAgB,yBAAyB;;;;;;;;;;;;;;;EAQxC;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mHAAmH;IACnH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,KAAK,CAAC,MAAM,EACvB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,CAAC,EAAE,gCAAgC,GACzC,sBAAsB,CAiFxB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,EAAE,CAiCjG;AA2ED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,WAAW,EAC3B,uBAAuB,EAAE,UAAU,EACnC,mBAAmB,EAAE,YAAY,EACjC,IAAI,EAAE,MAAM,GACX,WAAW,GAAG,IAAI,CAyCpB"}
|
|
@@ -6,31 +6,33 @@ var BinaryGeometryType = function (BinaryGeometryType) {
|
|
|
6
6
|
BinaryGeometryType["polygons"] = "polygons";
|
|
7
7
|
return BinaryGeometryType;
|
|
8
8
|
}(BinaryGeometryType || {});
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
9
|
+
export function getBinaryGeometryTemplate() {
|
|
10
|
+
return {
|
|
11
|
+
globalFeatureIds: {
|
|
12
|
+
value: new Uint32Array(0),
|
|
13
|
+
size: 1
|
|
14
|
+
},
|
|
15
|
+
positions: {
|
|
16
|
+
value: new Float32Array(0),
|
|
17
|
+
size: 2
|
|
18
|
+
},
|
|
19
|
+
properties: [],
|
|
20
|
+
numericProps: {},
|
|
21
|
+
featureIds: {
|
|
22
|
+
value: new Uint32Array(0),
|
|
23
|
+
size: 1
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
25
27
|
export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
26
28
|
const featureTypes = {
|
|
27
29
|
polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',
|
|
28
30
|
point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',
|
|
29
31
|
line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'
|
|
30
32
|
};
|
|
31
|
-
const chunks = options
|
|
33
|
+
const chunks = (options === null || options === void 0 ? void 0 : options.chunkIndex) !== undefined && (options === null || options === void 0 ? void 0 : options.chunkIndex) >= 0 ? [geoColumn.data[options === null || options === void 0 ? void 0 : options.chunkIndex]] : geoColumn.data;
|
|
32
34
|
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
33
|
-
let globalFeatureIdOffset = 0;
|
|
35
|
+
let globalFeatureIdOffset = (options === null || options === void 0 ? void 0 : options.chunkOffset) || 0;
|
|
34
36
|
const binaryGeometries = [];
|
|
35
37
|
chunks.forEach(chunk => {
|
|
36
38
|
const {
|
|
@@ -66,12 +68,12 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
|
66
68
|
shape: 'binary-feature-collection',
|
|
67
69
|
points: {
|
|
68
70
|
type: 'Point',
|
|
69
|
-
...
|
|
71
|
+
...getBinaryGeometryTemplate(),
|
|
70
72
|
...(featureTypes.point ? binaryContent : {})
|
|
71
73
|
},
|
|
72
74
|
lines: {
|
|
73
75
|
type: 'LineString',
|
|
74
|
-
...
|
|
76
|
+
...getBinaryGeometryTemplate(),
|
|
75
77
|
...(featureTypes.line ? binaryContent : {}),
|
|
76
78
|
pathIndices: {
|
|
77
79
|
value: featureTypes.line ? geomOffset : new Uint16Array(0),
|
|
@@ -80,7 +82,7 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
|
80
82
|
},
|
|
81
83
|
polygons: {
|
|
82
84
|
type: 'Polygon',
|
|
83
|
-
...
|
|
85
|
+
...getBinaryGeometryTemplate(),
|
|
84
86
|
...(featureTypes.polygon ? binaryContent : {}),
|
|
85
87
|
polygonIndices: {
|
|
86
88
|
value: featureTypes.polygon ? geomOffset : new Uint16Array(0),
|
|
@@ -195,7 +197,7 @@ export function getTriangleIndices(polygonIndices, primitivePolygonIndices, flat
|
|
|
195
197
|
}
|
|
196
198
|
const triangleIndices = earcut(slicedFlatCoords, holeIndices.length > 0 ? holeIndices : undefined, nDim);
|
|
197
199
|
if (triangleIndices.length === 0) {
|
|
198
|
-
throw Error('
|
|
200
|
+
throw Error('earcut failed e.g. invalid polygon');
|
|
199
201
|
}
|
|
200
202
|
for (let j = 0; j < triangleIndices.length; j++) {
|
|
201
203
|
triangles.push(triangleIndices[j] + startIdx);
|
|
@@ -237,8 +239,8 @@ function getBinaryPolygonsFromChunk(chunk, geoEncoding, options) {
|
|
|
237
239
|
const triangles = options !== null && options !== void 0 && options.triangulate ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim) : null;
|
|
238
240
|
return {
|
|
239
241
|
featureIds,
|
|
240
|
-
flatCoordinateArray,
|
|
241
242
|
nDim,
|
|
243
|
+
flatCoordinateArray,
|
|
242
244
|
geomOffset,
|
|
243
245
|
geometryIndicies,
|
|
244
246
|
...(options !== null && options !== void 0 && options.triangulate && triangles ? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BinaryGeometryType","BINARY_GEOMETRY_TEMPLATE","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","data","bounds","Infinity","globalFeatureIdOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","calculateMeanCenters","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","undefined","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","coordIdx","primitiveIdx","featureId","vertexCountInFeature","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","j","trianglesUint32","error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","triangulate","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {earcut} from '@math.gl/polygon';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\nimport {TypedArray} from '@loaders.gl/loader-utils';\n\n/**\n * Binary geometry type\n */\nenum BinaryGeometryType {\n points = 'points',\n lines = 'lines',\n polygons = 'polygons'\n}\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n /** Binary format geometries, an array of BinaryFeatureCollection */\n binaryGeometries: BinaryFeatures[];\n /** Boundary of the binary geometries */\n bounds: [number, number, number, number];\n /** Feature types of the binary geometries */\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n /** (Optional) mean centers of the binary geometries for e.g. polygon filtering */\n meanCenters?: number[][];\n};\n\n/**\n * Binary geometry content returned from getBinaryGeometriesFromChunk\n */\ntype BinaryGeometryContent = {\n // Array of Point feature indexes by vertex\n featureIds: Uint32Array;\n /** Flat coordinate array of e.g. x, y or x,y,z */\n flatCoordinateArray: Float64Array;\n /** Dimention of each position */\n nDim: number;\n /** Array of geometry offsets: the start index of primitive geometry */\n geomOffset: Int32Array;\n /** Array of geometry indicies: the start index of each geometry */\n geometryIndicies: Uint16Array;\n /** (Optional) indices of triangels returned from polygon tessellation (Polygon only) */\n triangles?: Uint32Array;\n /** (Optional) array of mean center of each geometry */\n meanCenters?: Float64Array;\n};\n\n/**\n * binary geometry template, see deck.gl BinaryGeometry\n */\nexport const BINARY_GEOMETRY_TEMPLATE = {\n globalFeatureIds: {value: new Uint32Array(0), size: 1},\n positions: {value: new Float32Array(0), size: 2},\n properties: [],\n numericProps: {},\n featureIds: {value: new Uint32Array(0), size: 1}\n};\n\nexport type BinaryGeometriesFromArrowOptions = {\n /** option to specify which chunk to get binary geometries from, for progressive rendering */\n chunkIndex?: number;\n /** option to get mean centers from geometries, for polygon filtering */\n calculateMeanCenters?: boolean;\n /** option to compute the triangle indices by tesselating polygons */\n triangulate?: boolean;\n};\n\n/**\n * get binary geometries from geoarrow column\n *\n * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)\n * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)\n * @param options options for getting binary geometries {meanCenter: boolean}\n * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryDataFromGeoArrow {\n const featureTypes = {\n polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',\n point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',\n line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'\n };\n\n const chunks = options?.chunkIndex ? [geoColumn.data[options?.chunkIndex]] : geoColumn.data;\n let bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n chunks.forEach((chunk) => {\n const {featureIds, flatCoordinateArray, nDim, geomOffset, triangles} =\n getBinaryGeometriesFromChunk(chunk, geoEncoding, options);\n\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\n }\n\n const binaryContent = {\n globalFeatureIds: {value: globalFeatureIds, size: 1},\n positions: {\n value: flatCoordinateArray,\n size: nDim\n },\n featureIds: {value: featureIds, size: 1},\n properties: [...Array(chunk.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatures structure must have points, lines, polygons even if they are empty\n binaryGeometries.push({\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.point ? binaryContent : {})\n },\n lines: {\n type: 'LineString',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.line ? binaryContent : {}),\n pathIndices: {value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1}\n },\n polygons: {\n type: 'Polygon',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.polygon ? binaryContent : {}),\n polygonIndices: {\n // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n primitivePolygonIndices: {\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n ...(triangles ? {triangles: {value: triangles, size: 1}} : {})\n }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.calculateMeanCenters\n ? {meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)}\n : {})\n };\n}\n\n/**\n * Get mean centers from binary geometries\n * @param binaryGeometries binary geometries from geoarrow column, an array of BinaryFeatureCollection\n * @returns mean centers of the binary geometries\n */\nexport function getMeanCentersFromBinaryGeometries(binaryGeometries: BinaryFeatures[]): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatures) => {\n let binaryGeometryType: keyof typeof BinaryGeometryType | null = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.points;\n } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.lines;\n } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.polygons;\n }\n\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices =\n binaryContent.type === 'Polygon' ? binaryContent.primitivePolygonIndices?.value : undefined;\n\n const meanCenters = getMeanCentersFromGeometry(\n featureIds,\n flatCoordinateArray,\n nDim,\n binaryGeometryType,\n primitivePolygonIndices\n );\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\n}\n\n/**\n * Get mean centers from raw coordinates and feature ids\n * @param featureIds Array of feature ids indexes by vertex\n * @param flatCoordinateArray Array of vertex, e.g. x, y or x, y, z, positions\n * @param nDim number of dimensions per position\n * @returns - mean centers of each polygon\n */\nfunction getMeanCentersFromGeometry(\n featureIds: TypedArray,\n flatCoordinateArray: TypedArray,\n nDim: number,\n geometryType: keyof typeof BinaryGeometryType,\n primitivePolygonIndices?: TypedArray\n) {\n const meanCenters: number[][] = [];\n const vertexCount = flatCoordinateArray.length;\n let vertexIndex = 0;\n let coordIdx = 0;\n let primitiveIdx = 0;\n while (vertexIndex < vertexCount) {\n const featureId = featureIds[vertexIndex / nDim];\n const center = [0, 0];\n let vertexCountInFeature = 0;\n while (vertexIndex < vertexCount && featureIds[coordIdx] === featureId) {\n if (\n geometryType === BinaryGeometryType.polygons &&\n primitivePolygonIndices?.[primitiveIdx] === coordIdx\n ) {\n // skip the first point since it is the same as the last point in each ring for polygons\n vertexIndex += nDim;\n primitiveIdx++;\n } else {\n center[0] += flatCoordinateArray[vertexIndex];\n center[1] += flatCoordinateArray[vertexIndex + 1];\n vertexIndex += nDim;\n vertexCountInFeature++;\n }\n coordIdx += 1;\n }\n center[0] /= vertexCountInFeature;\n center[1] /= vertexCountInFeature;\n meanCenters.push(center);\n }\n return meanCenters;\n}\n\n/**\n * get binary geometries from geoarrow column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: arrow.Data,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n switch (geoEncoding) {\n case 'geoarrow.point':\n case 'geoarrow.multipoint':\n return getBinaryPointsFromChunk(chunk, geoEncoding);\n case 'geoarrow.linestring':\n case 'geoarrow.multilinestring':\n return getBinaryLinesFromChunk(chunk, geoEncoding);\n case 'geoarrow.polygon':\n case 'geoarrow.multipolygon':\n return getBinaryPolygonsFromChunk(chunk, geoEncoding, options);\n default:\n throw Error('invalid geoarrow encoding');\n }\n}\n\n/**\n * get triangle indices. Allows deck.gl to skip performing costly triangulation on main thread.\n * @param polygonIndices Indices within positions of the start of each simple Polygon\n * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring\n * @param flatCoordinateArray Array of x, y or x, y, z positions\n * @param nDim - number of dimensions per position\n * @returns\n */\nexport function getTriangleIndices(\n polygonIndices: Uint16Array,\n primitivePolygonIndices: Int32Array,\n flatCoordinateArray: Float64Array,\n nDim: number\n): Uint32Array | null {\n try {\n let primitiveIndex = 0;\n const triangles: number[] = [];\n // loop polygonIndices to get triangles\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startIdx = polygonIndices[i];\n const endIdx = polygonIndices[i + 1];\n // get subarray of flatCoordinateArray\n const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);\n // get holeIndices for earcut\n const holeIndices: number[] = [];\n while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n }\n primitiveIndex++;\n }\n const triangleIndices = earcut(\n slicedFlatCoords,\n holeIndices.length > 0 ? holeIndices : undefined,\n nDim\n );\n if (triangleIndices.length === 0) {\n throw Error('can not tesselate invalid polygon');\n }\n for (let j = 0; j < triangleIndices.length; j++) {\n triangles.push(triangleIndices[j] + startIdx);\n }\n }\n // convert traingles to Uint32Array\n const trianglesUint32 = new Uint32Array(triangles.length);\n for (let i = 0; i < triangles.length; i++) {\n trianglesUint32[i] = triangles[i];\n }\n return trianglesUint32;\n } catch (error) {\n // TODO - add logging\n // there is an expection when tesselating invalid polygon, e.g. polygon with self-intersection\n // return null to skip tesselating\n return null;\n }\n}\n\n/**\n * get binary polygons from geoarrow polygon column\n * @param chunk one chunk of geoarrow polygon column\n * @param geoEncoding the geo encoding of the geoarrow polygon column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(\n chunk: arrow.Data,\n geoEncoding: string,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\n const polygonOffset = polygonData.valueOffsets;\n const partData = isMultiPolygon\n ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i)\n : chunk.valueOffsets;\n const ringData = polygonData.children[0];\n const pointData = ringData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = ringData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n const geometryIndicies = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndicies[i] = geomOffset[polygonOffset[i]];\n }\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n const triangles = options?.triangulate\n ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim)\n : null;\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies,\n ...(options?.triangulate && triangles ? {triangles} : {})\n };\n}\n\n/**\n * get binary lines from geoarrow line column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding the geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryLinesFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndicies is not needed for line string\n const geometryIndicies = new Uint16Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiLineString) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n const startIdx = geomOffset[i];\n const endIdx = geomOffset[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n\n/**\n * get binary points from geoarrow point column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPointsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndices is not needed for point\n const geometryIndicies = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiPoint) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = partData[i];\n const endIdx = partData[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BinaryGeometryType","getBinaryGeometryTemplate","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","undefined","data","bounds","Infinity","globalFeatureIdOffset","chunkOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","calculateMeanCenters","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","coordIdx","primitiveIdx","featureId","vertexCountInFeature","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","j","trianglesUint32","error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","triangulate","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {earcut} from '@math.gl/polygon';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\nimport {TypedArray} from '@loaders.gl/loader-utils';\n\n/**\n * Binary geometry type\n */\nenum BinaryGeometryType {\n points = 'points',\n lines = 'lines',\n polygons = 'polygons'\n}\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n /** Binary format geometries, an array of BinaryFeatureCollection */\n binaryGeometries: BinaryFeatures[];\n /** Boundary of the binary geometries */\n bounds: [number, number, number, number];\n /** Feature types of the binary geometries */\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n /** (Optional) mean centers of the binary geometries for e.g. polygon filtering */\n meanCenters?: number[][];\n};\n\n/**\n * Binary geometry content returned from getBinaryGeometriesFromChunk\n */\ntype BinaryGeometryContent = {\n // Array of Point feature indexes by vertex\n featureIds: Uint32Array;\n /** Flat coordinate array of e.g. x, y or x,y,z */\n flatCoordinateArray: Float64Array;\n /** Dimention of each position */\n nDim: number;\n /** Array of geometry offsets: the start index of primitive geometry */\n geomOffset: Int32Array;\n /** Array of geometry indicies: the start index of each geometry */\n geometryIndicies: Uint16Array;\n /** (Optional) indices of triangels returned from polygon triangulation (Polygon only) */\n triangles?: Uint32Array;\n /** (Optional) array of mean center of each geometry */\n meanCenters?: Float64Array;\n};\n\n/**\n * binary geometry template, see deck.gl BinaryGeometry\n */\nexport function getBinaryGeometryTemplate() {\n return {\n globalFeatureIds: {value: new Uint32Array(0), size: 1},\n positions: {value: new Float32Array(0), size: 2},\n properties: [],\n numericProps: {},\n featureIds: {value: new Uint32Array(0), size: 1}\n };\n}\n\nexport type BinaryGeometriesFromArrowOptions = {\n /** option to specify which chunk to get binary geometries from, for progressive rendering */\n chunkIndex?: number;\n /** The offset (beginning index of rows) of input chunk. Used for reconstructing globalFeatureIds in web workers */\n chunkOffset?: number;\n /** option to get mean centers from geometries, for polygon filtering */\n calculateMeanCenters?: boolean;\n /** option to compute the triangle indices by tesselating polygons */\n triangulate?: boolean;\n};\n\n/**\n * get binary geometries from geoarrow column\n *\n * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)\n * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)\n * @param options options for getting binary geometries {meanCenter: boolean}\n * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryDataFromGeoArrow {\n const featureTypes = {\n polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',\n point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',\n line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'\n };\n\n const chunks =\n options?.chunkIndex !== undefined && options?.chunkIndex >= 0\n ? [geoColumn.data[options?.chunkIndex]]\n : geoColumn.data;\n let bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = options?.chunkOffset || 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n chunks.forEach((chunk) => {\n const {featureIds, flatCoordinateArray, nDim, geomOffset, triangles} =\n getBinaryGeometriesFromChunk(chunk, geoEncoding, options);\n\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\n }\n\n const binaryContent = {\n globalFeatureIds: {value: globalFeatureIds, size: 1},\n positions: {\n value: flatCoordinateArray,\n size: nDim\n },\n featureIds: {value: featureIds, size: 1},\n // eslint-disable-next-line no-loop-func\n properties: [...Array(chunk.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatures structure must have points, lines, polygons even if they are empty\n binaryGeometries.push({\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.point ? binaryContent : {})\n },\n lines: {\n type: 'LineString',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.line ? binaryContent : {}),\n pathIndices: {value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1}\n },\n polygons: {\n type: 'Polygon',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.polygon ? binaryContent : {}),\n polygonIndices: {\n // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n primitivePolygonIndices: {\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n ...(triangles ? {triangles: {value: triangles, size: 1}} : {})\n }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.calculateMeanCenters\n ? {meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)}\n : {})\n };\n}\n\n/**\n * Get mean centers from binary geometries\n * @param binaryGeometries binary geometries from geoarrow column, an array of BinaryFeatureCollection\n * @returns mean centers of the binary geometries\n */\nexport function getMeanCentersFromBinaryGeometries(binaryGeometries: BinaryFeatures[]): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatures) => {\n let binaryGeometryType: keyof typeof BinaryGeometryType | null = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.points;\n } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.lines;\n } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.polygons;\n }\n\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices =\n binaryContent.type === 'Polygon' ? binaryContent.primitivePolygonIndices?.value : undefined;\n\n const meanCenters = getMeanCentersFromGeometry(\n featureIds,\n flatCoordinateArray,\n nDim,\n binaryGeometryType,\n primitivePolygonIndices\n );\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\n}\n\n/**\n * Get mean centers from raw coordinates and feature ids\n * @param featureIds Array of feature ids indexes by vertex\n * @param flatCoordinateArray Array of vertex, e.g. x, y or x, y, z, positions\n * @param nDim number of dimensions per position\n * @returns - mean centers of each polygon\n */\nfunction getMeanCentersFromGeometry(\n featureIds: TypedArray,\n flatCoordinateArray: TypedArray,\n nDim: number,\n geometryType: keyof typeof BinaryGeometryType,\n primitivePolygonIndices?: TypedArray\n) {\n const meanCenters: number[][] = [];\n const vertexCount = flatCoordinateArray.length;\n let vertexIndex = 0;\n let coordIdx = 0;\n let primitiveIdx = 0;\n while (vertexIndex < vertexCount) {\n const featureId = featureIds[vertexIndex / nDim];\n const center = [0, 0];\n let vertexCountInFeature = 0;\n while (vertexIndex < vertexCount && featureIds[coordIdx] === featureId) {\n if (\n geometryType === BinaryGeometryType.polygons &&\n primitivePolygonIndices?.[primitiveIdx] === coordIdx\n ) {\n // skip the first point since it is the same as the last point in each ring for polygons\n vertexIndex += nDim;\n primitiveIdx++;\n } else {\n center[0] += flatCoordinateArray[vertexIndex];\n center[1] += flatCoordinateArray[vertexIndex + 1];\n vertexIndex += nDim;\n vertexCountInFeature++;\n }\n coordIdx += 1;\n }\n center[0] /= vertexCountInFeature;\n center[1] /= vertexCountInFeature;\n meanCenters.push(center);\n }\n return meanCenters;\n}\n\n/**\n * get binary geometries from geoarrow column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: arrow.Data,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n switch (geoEncoding) {\n case 'geoarrow.point':\n case 'geoarrow.multipoint':\n return getBinaryPointsFromChunk(chunk, geoEncoding);\n case 'geoarrow.linestring':\n case 'geoarrow.multilinestring':\n return getBinaryLinesFromChunk(chunk, geoEncoding);\n case 'geoarrow.polygon':\n case 'geoarrow.multipolygon':\n return getBinaryPolygonsFromChunk(chunk, geoEncoding, options);\n default:\n throw Error('invalid geoarrow encoding');\n }\n}\n\n/**\n * get triangle indices. Allows deck.gl to skip performing costly triangulation on main thread.\n * @param polygonIndices Indices within positions of the start of each simple Polygon\n * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring\n * @param flatCoordinateArray Array of x, y or x, y, z positions\n * @param nDim - number of dimensions per position\n * @returns triangle indices or null if invalid polygon and earcut fails\n */\nexport function getTriangleIndices(\n polygonIndices: Uint16Array,\n primitivePolygonIndices: Int32Array,\n flatCoordinateArray: Float64Array,\n nDim: number\n): Uint32Array | null {\n try {\n let primitiveIndex = 0;\n const triangles: number[] = [];\n // loop polygonIndices to get triangles\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startIdx = polygonIndices[i];\n const endIdx = polygonIndices[i + 1];\n // get subarray of flatCoordinateArray\n const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);\n // get holeIndices for earcut\n const holeIndices: number[] = [];\n while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n }\n primitiveIndex++;\n }\n // TODO check if each ring is closed\n const triangleIndices = earcut(\n slicedFlatCoords,\n holeIndices.length > 0 ? holeIndices : undefined,\n nDim\n );\n if (triangleIndices.length === 0) {\n throw Error('earcut failed e.g. invalid polygon');\n }\n for (let j = 0; j < triangleIndices.length; j++) {\n triangles.push(triangleIndices[j] + startIdx);\n }\n }\n // convert traingles to Uint32Array\n const trianglesUint32 = new Uint32Array(triangles.length);\n for (let i = 0; i < triangles.length; i++) {\n trianglesUint32[i] = triangles[i];\n }\n return trianglesUint32;\n } catch (error) {\n // if earcut fails, return null\n return null;\n }\n}\n\n/**\n * get binary polygons from geoarrow polygon column\n * @param chunk one chunk of geoarrow polygon column\n * @param geoEncoding the geo encoding of the geoarrow polygon column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(\n chunk: arrow.Data,\n geoEncoding: string,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\n const polygonOffset = polygonData.valueOffsets;\n const partData = isMultiPolygon\n ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i)\n : chunk.valueOffsets;\n const ringData = polygonData.children[0];\n const pointData = ringData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = ringData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n const geometryIndicies = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndicies[i] = geomOffset[polygonOffset[i]];\n }\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n const triangles = options?.triangulate\n ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim)\n : null;\n\n return {\n featureIds,\n nDim,\n flatCoordinateArray,\n geomOffset,\n geometryIndicies,\n ...(options?.triangulate && triangles ? {triangles} : {})\n };\n}\n\n/**\n * get binary lines from geoarrow line column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding the geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryLinesFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndicies is not needed for line string\n const geometryIndicies = new Uint16Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiLineString) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n const startIdx = geomOffset[i];\n const endIdx = geomOffset[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n\n/**\n * get binary points from geoarrow point column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPointsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndices is not needed for point\n const geometryIndicies = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiPoint) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = partData[i];\n const endIdx = partData[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -33,7 +33,6 @@ __export(src_exports, {
|
|
|
33
33
|
ArrowLoader: () => ArrowLoader,
|
|
34
34
|
ArrowWorkerLoader: () => ArrowWorkerLoader,
|
|
35
35
|
ArrowWriter: () => ArrowWriter,
|
|
36
|
-
BINARY_GEOMETRY_TEMPLATE: () => BINARY_GEOMETRY_TEMPLATE,
|
|
37
36
|
GeoArrowLoader: () => GeoArrowLoader,
|
|
38
37
|
GeoArrowWorkerLoader: () => GeoArrowWorkerLoader,
|
|
39
38
|
TriangulationWorker: () => TriangulationWorker,
|
|
@@ -45,8 +44,11 @@ __export(src_exports, {
|
|
|
45
44
|
deserializeArrowType: () => deserializeArrowType,
|
|
46
45
|
getArrowType: () => getArrowType,
|
|
47
46
|
getBinaryGeometriesFromArrow: () => getBinaryGeometriesFromArrow,
|
|
47
|
+
getBinaryGeometryTemplate: () => getBinaryGeometryTemplate,
|
|
48
48
|
getMeanCentersFromBinaryGeometries: () => getMeanCentersFromBinaryGeometries,
|
|
49
49
|
getTriangleIndices: () => getTriangleIndices,
|
|
50
|
+
hardClone: () => hardClone,
|
|
51
|
+
parseGeoArrowOnWorker: () => parseGeoArrowOnWorker,
|
|
50
52
|
parseGeometryFromArrow: () => parseGeometryFromArrow2,
|
|
51
53
|
serializeArrowField: () => serializeArrowField,
|
|
52
54
|
serializeArrowMetadata: () => serializeArrowMetadata,
|
|
@@ -653,22 +655,24 @@ function updateBoundsFromGeoArrowSamples(flatCoords, nDim, bounds, sampleSize =
|
|
|
653
655
|
}
|
|
654
656
|
|
|
655
657
|
// src/geoarrow/convert-geoarrow-to-binary-geometry.ts
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
}
|
|
658
|
+
function getBinaryGeometryTemplate() {
|
|
659
|
+
return {
|
|
660
|
+
globalFeatureIds: { value: new Uint32Array(0), size: 1 },
|
|
661
|
+
positions: { value: new Float32Array(0), size: 2 },
|
|
662
|
+
properties: [],
|
|
663
|
+
numericProps: {},
|
|
664
|
+
featureIds: { value: new Uint32Array(0), size: 1 }
|
|
665
|
+
};
|
|
666
|
+
}
|
|
663
667
|
function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
664
668
|
const featureTypes = {
|
|
665
669
|
polygon: geoEncoding === "geoarrow.multipolygon" || geoEncoding === "geoarrow.polygon",
|
|
666
670
|
point: geoEncoding === "geoarrow.multipoint" || geoEncoding === "geoarrow.point",
|
|
667
671
|
line: geoEncoding === "geoarrow.multilinestring" || geoEncoding === "geoarrow.linestring"
|
|
668
672
|
};
|
|
669
|
-
const chunks = (options == null ? void 0 : options.chunkIndex) ? [geoColumn.data[options == null ? void 0 : options.chunkIndex]] : geoColumn.data;
|
|
673
|
+
const chunks = (options == null ? void 0 : options.chunkIndex) !== void 0 && (options == null ? void 0 : options.chunkIndex) >= 0 ? [geoColumn.data[options == null ? void 0 : options.chunkIndex]] : geoColumn.data;
|
|
670
674
|
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
671
|
-
let globalFeatureIdOffset = 0;
|
|
675
|
+
let globalFeatureIdOffset = (options == null ? void 0 : options.chunkOffset) || 0;
|
|
672
676
|
const binaryGeometries = [];
|
|
673
677
|
chunks.forEach((chunk) => {
|
|
674
678
|
const { featureIds, flatCoordinateArray, nDim, geomOffset, triangles } = getBinaryGeometriesFromChunk(chunk, geoEncoding, options);
|
|
@@ -683,6 +687,7 @@ function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
|
683
687
|
size: nDim
|
|
684
688
|
},
|
|
685
689
|
featureIds: { value: featureIds, size: 1 },
|
|
690
|
+
// eslint-disable-next-line no-loop-func
|
|
686
691
|
properties: [...Array(chunk.length).keys()].map((i) => ({
|
|
687
692
|
index: i + globalFeatureIdOffset
|
|
688
693
|
}))
|
|
@@ -692,18 +697,18 @@ function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
|
|
|
692
697
|
shape: "binary-feature-collection",
|
|
693
698
|
points: {
|
|
694
699
|
type: "Point",
|
|
695
|
-
...
|
|
700
|
+
...getBinaryGeometryTemplate(),
|
|
696
701
|
...featureTypes.point ? binaryContent : {}
|
|
697
702
|
},
|
|
698
703
|
lines: {
|
|
699
704
|
type: "LineString",
|
|
700
|
-
...
|
|
705
|
+
...getBinaryGeometryTemplate(),
|
|
701
706
|
...featureTypes.line ? binaryContent : {},
|
|
702
707
|
pathIndices: { value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1 }
|
|
703
708
|
},
|
|
704
709
|
polygons: {
|
|
705
710
|
type: "Polygon",
|
|
706
|
-
...
|
|
711
|
+
...getBinaryGeometryTemplate(),
|
|
707
712
|
...featureTypes.polygon ? binaryContent : {},
|
|
708
713
|
polygonIndices: {
|
|
709
714
|
// use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices
|
|
@@ -822,7 +827,7 @@ function getTriangleIndices(polygonIndices, primitivePolygonIndices, flatCoordin
|
|
|
822
827
|
nDim
|
|
823
828
|
);
|
|
824
829
|
if (triangleIndices.length === 0) {
|
|
825
|
-
throw Error("
|
|
830
|
+
throw Error("earcut failed e.g. invalid polygon");
|
|
826
831
|
}
|
|
827
832
|
for (let j = 0; j < triangleIndices.length; j++) {
|
|
828
833
|
triangles.push(triangleIndices[j] + startIdx);
|
|
@@ -864,8 +869,8 @@ function getBinaryPolygonsFromChunk(chunk, geoEncoding, options) {
|
|
|
864
869
|
const triangles = (options == null ? void 0 : options.triangulate) ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim) : null;
|
|
865
870
|
return {
|
|
866
871
|
featureIds,
|
|
867
|
-
flatCoordinateArray,
|
|
868
872
|
nDim,
|
|
873
|
+
flatCoordinateArray,
|
|
869
874
|
geomOffset,
|
|
870
875
|
geometryIndicies,
|
|
871
876
|
...(options == null ? void 0 : options.triangulate) && triangles ? { triangles } : {}
|
|
@@ -1092,6 +1097,51 @@ function arrowLineStringToFeature(arrowLineString) {
|
|
|
1092
1097
|
};
|
|
1093
1098
|
}
|
|
1094
1099
|
|
|
1100
|
+
// src/workers/hard-clone.ts
|
|
1101
|
+
var arrow7 = __toESM(require("apache-arrow"), 1);
|
|
1102
|
+
function hardClone(data, force = false) {
|
|
1103
|
+
if ("data" in data) {
|
|
1104
|
+
return new arrow7.Vector(data.data.map((data2) => hardClone(data2, force)));
|
|
1105
|
+
}
|
|
1106
|
+
const clonedChildren = [];
|
|
1107
|
+
for (const childData of data.children) {
|
|
1108
|
+
clonedChildren.push(hardClone(childData, force));
|
|
1109
|
+
}
|
|
1110
|
+
let clonedDictionary;
|
|
1111
|
+
if (data.dictionary !== void 0) {
|
|
1112
|
+
clonedDictionary = hardClone(data.dictionary, force);
|
|
1113
|
+
}
|
|
1114
|
+
const clonedBuffers = {
|
|
1115
|
+
[arrow7.BufferType.OFFSET]: cloneBuffer(data.buffers[arrow7.BufferType.OFFSET], force),
|
|
1116
|
+
[arrow7.BufferType.DATA]: cloneBuffer(data.buffers[arrow7.BufferType.DATA], force),
|
|
1117
|
+
[arrow7.BufferType.VALIDITY]: cloneBuffer(data.buffers[arrow7.BufferType.VALIDITY], force),
|
|
1118
|
+
[arrow7.BufferType.TYPE]: cloneBuffer(data.buffers[arrow7.BufferType.TYPE], force)
|
|
1119
|
+
};
|
|
1120
|
+
return new arrow7.Data(
|
|
1121
|
+
data.type,
|
|
1122
|
+
data.offset,
|
|
1123
|
+
data.length,
|
|
1124
|
+
// @ts-expect-error _nullCount is protected. We're using it here to mimic
|
|
1125
|
+
// `Data.clone`
|
|
1126
|
+
data._nullCount,
|
|
1127
|
+
clonedBuffers,
|
|
1128
|
+
clonedChildren,
|
|
1129
|
+
clonedDictionary
|
|
1130
|
+
);
|
|
1131
|
+
}
|
|
1132
|
+
function isTypedArraySliced(arr) {
|
|
1133
|
+
return !(arr.byteOffset === 0 && arr.byteLength === arr.buffer.byteLength);
|
|
1134
|
+
}
|
|
1135
|
+
function cloneBuffer(arr, force) {
|
|
1136
|
+
if (arr === void 0) {
|
|
1137
|
+
return arr;
|
|
1138
|
+
}
|
|
1139
|
+
if (!force && !isTypedArraySliced(arr)) {
|
|
1140
|
+
return arr;
|
|
1141
|
+
}
|
|
1142
|
+
return arr.slice();
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1095
1145
|
// src/triangulate-on-worker.ts
|
|
1096
1146
|
var import_worker_utils = require("@loaders.gl/worker-utils");
|
|
1097
1147
|
var VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
@@ -1103,7 +1153,10 @@ var TriangulationWorker = {
|
|
|
1103
1153
|
options: {}
|
|
1104
1154
|
};
|
|
1105
1155
|
function triangulateOnWorker(data, options = {}) {
|
|
1106
|
-
return (0, import_worker_utils.processOnWorker)(TriangulationWorker, data, options);
|
|
1156
|
+
return (0, import_worker_utils.processOnWorker)(TriangulationWorker, { ...data, operation: "triangulate" }, options);
|
|
1157
|
+
}
|
|
1158
|
+
function parseGeoArrowOnWorker(data, options = {}) {
|
|
1159
|
+
return (0, import_worker_utils.processOnWorker)(TriangulationWorker, { ...data, operation: "parse-geoarrow" }, options);
|
|
1107
1160
|
}
|
|
1108
1161
|
|
|
1109
1162
|
// src/index.ts
|
package/dist/index.d.ts
CHANGED
|
@@ -9,9 +9,11 @@ export { GeoArrowLoader, GeoArrowWorkerLoader } from './geoarrow-loader';
|
|
|
9
9
|
export { serializeArrowSchema, deserializeArrowSchema, serializeArrowMetadata, deserializeArrowMetadata, serializeArrowField, deserializeArrowField, serializeArrowType, deserializeArrowType } from './schema/convert-arrow-schema';
|
|
10
10
|
export type { GeoArrowEncoding } from '@loaders.gl/gis';
|
|
11
11
|
export type { BinaryDataFromGeoArrow, BinaryGeometriesFromArrowOptions } from './geoarrow/convert-geoarrow-to-binary-geometry';
|
|
12
|
-
export {
|
|
12
|
+
export { getBinaryGeometryTemplate, getBinaryGeometriesFromArrow, getTriangleIndices, getMeanCentersFromBinaryGeometries } from './geoarrow/convert-geoarrow-to-binary-geometry';
|
|
13
13
|
export { updateBoundsFromGeoArrowSamples } from './geoarrow/get-arrow-bounds';
|
|
14
14
|
export { parseGeometryFromArrow } from './geoarrow/convert-geoarrow-to-geojson-geometry';
|
|
15
15
|
export { convertArrowToGeoJSONTable } from './tables/convert-arrow-to-geojson-table';
|
|
16
|
-
export {
|
|
16
|
+
export { hardClone } from './workers/hard-clone';
|
|
17
|
+
export type { ParseGeoArrowInput, ParseGeoArrowResult } from './triangulate-on-worker';
|
|
18
|
+
export { TriangulationWorker, triangulateOnWorker, parseGeoArrowOnWorker } from './triangulate-on-worker';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|