@loaders.gl/arrow 4.0.1 → 4.0.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/arrow-worker.js +33 -25
- package/dist/arrow-writer.d.ts +2 -2
- package/dist/arrow-writer.d.ts.map +1 -1
- package/dist/arrow-writer.js +6 -3
- package/dist/arrow-writer.js.map +1 -1
- package/dist/dist.dev.js +60 -29
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts +18 -2
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts.map +1 -1
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js +18 -19
- package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js.map +1 -1
- package/dist/geoarrow/convert-geoarrow-to-geojson.js.map +1 -1
- package/dist/geoarrow/get-arrow-bounds.d.ts.map +1 -1
- package/dist/geoarrow/get-arrow-bounds.js +1 -1
- package/dist/geoarrow/get-arrow-bounds.js.map +1 -1
- package/dist/index.cjs +177 -137
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/arrow-table-batch.d.ts +2 -2
- package/dist/lib/arrow-table-batch.d.ts.map +1 -1
- package/dist/lib/arrow-table-batch.js +7 -7
- package/dist/lib/arrow-table-batch.js.map +1 -1
- package/dist/lib/arrow-table.d.ts +3 -3
- package/dist/lib/arrow-table.d.ts.map +1 -1
- package/dist/lib/arrow-table.js.map +1 -1
- package/dist/lib/encode-arrow.js +5 -5
- package/dist/lib/encode-arrow.js.map +1 -1
- package/dist/lib/parse-arrow-in-batches.js +3 -3
- package/dist/lib/parse-arrow-in-batches.js.map +1 -1
- package/dist/lib/parse-arrow-sync.js +2 -2
- package/dist/lib/parse-arrow-sync.js.map +1 -1
- package/dist/schema/arrow-type-utils.d.ts +2 -2
- package/dist/schema/arrow-type-utils.d.ts.map +1 -1
- package/dist/schema/arrow-type-utils.js +9 -9
- package/dist/schema/arrow-type-utils.js.map +1 -1
- package/dist/schema/convert-arrow-schema.d.ts +7 -7
- package/dist/schema/convert-arrow-schema.d.ts.map +1 -1
- package/dist/schema/convert-arrow-schema.js +113 -86
- package/dist/schema/convert-arrow-schema.js.map +1 -1
- package/dist/tables/convert-arrow-to-table.d.ts +2 -2
- package/dist/tables/convert-arrow-to-table.d.ts.map +1 -1
- package/dist/tables/convert-arrow-to-table.js.map +1 -1
- package/package.json +5 -5
- package/src/arrow-writer.ts +8 -5
- package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +26 -26
- package/src/geoarrow/convert-geoarrow-to-geojson.ts +7 -7
- package/src/geoarrow/get-arrow-bounds.ts +1 -2
- package/src/index.ts +6 -1
- package/src/lib/arrow-table-batch.ts +13 -23
- package/src/lib/arrow-table.ts +3 -3
- package/src/lib/encode-arrow.ts +8 -8
- package/src/lib/parse-arrow-in-batches.ts +4 -4
- package/src/lib/parse-arrow-sync.ts +2 -2
- package/src/schema/arrow-type-utils.ts +10 -29
- package/src/schema/convert-arrow-schema.ts +126 -145
- package/src/tables/convert-arrow-to-table.ts +2 -2
package/dist/arrow-worker.js
CHANGED
|
@@ -42,61 +42,69 @@
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
// ../worker-utils/src/lib/worker-farm/worker-body.ts
|
|
45
|
-
function getParentPort() {
|
|
45
|
+
async function getParentPort() {
|
|
46
46
|
let parentPort;
|
|
47
47
|
try {
|
|
48
48
|
eval("globalThis.parentPort = require('worker_threads').parentPort");
|
|
49
49
|
parentPort = globalThis.parentPort;
|
|
50
50
|
} catch {
|
|
51
|
+
try {
|
|
52
|
+
eval("globalThis.workerThreadsPromise = import('worker_threads')");
|
|
53
|
+
const workerThreads = await globalThis.workerThreadsPromise;
|
|
54
|
+
parentPort = workerThreads.parentPort;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error(error.message);
|
|
57
|
+
}
|
|
51
58
|
}
|
|
52
59
|
return parentPort;
|
|
53
60
|
}
|
|
54
61
|
var onMessageWrapperMap = /* @__PURE__ */ new Map();
|
|
55
62
|
var WorkerBody = class {
|
|
56
63
|
/** Check that we are actually in a worker thread */
|
|
57
|
-
static inWorkerThread() {
|
|
58
|
-
return typeof self !== "undefined" || Boolean(getParentPort());
|
|
64
|
+
static async inWorkerThread() {
|
|
65
|
+
return typeof self !== "undefined" || Boolean(await getParentPort());
|
|
59
66
|
}
|
|
60
67
|
/*
|
|
61
68
|
* (type: WorkerMessageType, payload: WorkerMessagePayload) => any
|
|
62
69
|
*/
|
|
63
70
|
static set onmessage(onMessage) {
|
|
64
|
-
function handleMessage(message) {
|
|
65
|
-
const
|
|
66
|
-
const { type, payload } =
|
|
71
|
+
async function handleMessage(message) {
|
|
72
|
+
const parentPort2 = await getParentPort();
|
|
73
|
+
const { type, payload } = parentPort2 ? message : message.data;
|
|
67
74
|
onMessage(type, payload);
|
|
68
75
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
getParentPort().then((parentPort2) => {
|
|
77
|
+
if (parentPort2) {
|
|
78
|
+
parentPort2.on("message", handleMessage);
|
|
79
|
+
parentPort2.on("exit", () => console.debug("Node worker closing"));
|
|
80
|
+
} else {
|
|
81
|
+
globalThis.onmessage = handleMessage;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
76
84
|
}
|
|
77
|
-
static addEventListener(onMessage) {
|
|
85
|
+
static async addEventListener(onMessage) {
|
|
78
86
|
let onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
79
87
|
if (!onMessageWrapper) {
|
|
80
|
-
onMessageWrapper = (message) => {
|
|
88
|
+
onMessageWrapper = async (message) => {
|
|
81
89
|
if (!isKnownMessage(message)) {
|
|
82
90
|
return;
|
|
83
91
|
}
|
|
84
|
-
const parentPort3 = getParentPort();
|
|
92
|
+
const parentPort3 = await getParentPort();
|
|
85
93
|
const { type, payload } = parentPort3 ? message : message.data;
|
|
86
94
|
onMessage(type, payload);
|
|
87
95
|
};
|
|
88
96
|
}
|
|
89
|
-
const parentPort2 = getParentPort();
|
|
97
|
+
const parentPort2 = await getParentPort();
|
|
90
98
|
if (parentPort2) {
|
|
91
99
|
console.error("not implemented");
|
|
92
100
|
} else {
|
|
93
101
|
globalThis.addEventListener("message", onMessageWrapper);
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
|
-
static removeEventListener(onMessage) {
|
|
104
|
+
static async removeEventListener(onMessage) {
|
|
97
105
|
const onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
98
106
|
onMessageWrapperMap.delete(onMessage);
|
|
99
|
-
const parentPort2 = getParentPort();
|
|
107
|
+
const parentPort2 = await getParentPort();
|
|
100
108
|
if (parentPort2) {
|
|
101
109
|
console.error("not implemented");
|
|
102
110
|
} else {
|
|
@@ -108,10 +116,10 @@
|
|
|
108
116
|
* @param type
|
|
109
117
|
* @param payload
|
|
110
118
|
*/
|
|
111
|
-
static postMessage(type, payload) {
|
|
119
|
+
static async postMessage(type, payload) {
|
|
112
120
|
const data = { source: "loaders.gl", type, payload };
|
|
113
121
|
const transferList = getTransferList(payload);
|
|
114
|
-
const parentPort2 = getParentPort();
|
|
122
|
+
const parentPort2 = await getParentPort();
|
|
115
123
|
if (parentPort2) {
|
|
116
124
|
parentPort2.postMessage(data, transferList);
|
|
117
125
|
} else {
|
|
@@ -126,8 +134,8 @@
|
|
|
126
134
|
|
|
127
135
|
// ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
|
|
128
136
|
var requestId = 0;
|
|
129
|
-
function createLoaderWorker(loader) {
|
|
130
|
-
if (!WorkerBody.inWorkerThread()) {
|
|
137
|
+
async function createLoaderWorker(loader) {
|
|
138
|
+
if (!await WorkerBody.inWorkerThread()) {
|
|
131
139
|
return;
|
|
132
140
|
}
|
|
133
141
|
WorkerBody.onmessage = async (type, payload) => {
|
|
@@ -886,7 +894,7 @@
|
|
|
886
894
|
}
|
|
887
895
|
}
|
|
888
896
|
function makeArrowTable(table) {
|
|
889
|
-
const _makeArrowTable = globalThis.
|
|
897
|
+
const _makeArrowTable = globalThis.__loaders?._makeArrowTable;
|
|
890
898
|
if (!_makeArrowTable) {
|
|
891
899
|
throw new Error("");
|
|
892
900
|
}
|
|
@@ -945,7 +953,7 @@
|
|
|
945
953
|
}
|
|
946
954
|
|
|
947
955
|
// src/arrow-loader.ts
|
|
948
|
-
var VERSION = true ? "4.0.
|
|
956
|
+
var VERSION = true ? "4.0.3" : "latest";
|
|
949
957
|
var ArrowLoader = {
|
|
950
958
|
name: "Apache Arrow",
|
|
951
959
|
id: "arrow",
|
package/dist/arrow-writer.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { WriterWithEncoder, WriterOptions } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { ColumnarTable } from './lib/encode-arrow';
|
|
3
3
|
type ArrowWriterOptions = WriterOptions & {
|
|
4
4
|
arrow?: {};
|
|
5
5
|
};
|
|
6
6
|
/** Apache Arrow writer */
|
|
7
|
-
export declare const ArrowWriter:
|
|
7
|
+
export declare const ArrowWriter: WriterWithEncoder<ColumnarTable, never, ArrowWriterOptions>;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=arrow-writer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-writer.d.ts","sourceRoot":"","sources":["../src/arrow-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,
|
|
1
|
+
{"version":3,"file":"arrow-writer.d.ts","sourceRoot":"","sources":["../src/arrow-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,iBAAiB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAOjD,KAAK,kBAAkB,GAAG,aAAa,GAAG;IACxC,KAAK,CAAC,EAAE,EAAE,CAAC;CACZ,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,WAAW,EAAE,iBAAiB,CAAC,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAmBnF,CAAC"}
|
package/dist/arrow-writer.js
CHANGED
|
@@ -7,10 +7,13 @@ export const ArrowWriter = {
|
|
|
7
7
|
version: VERSION,
|
|
8
8
|
extensions: ['arrow', 'feather'],
|
|
9
9
|
mimeTypes: ['application/vnd.apache.arrow.file', 'application/vnd.apache.arrow.stream', 'application/octet-stream'],
|
|
10
|
-
|
|
10
|
+
binary: true,
|
|
11
|
+
options: {},
|
|
12
|
+
encode: async function encodeArrow(data, options) {
|
|
11
13
|
return encodeArrowSync(data);
|
|
12
14
|
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
encodeSync(data, options) {
|
|
16
|
+
return encodeArrowSync(data);
|
|
17
|
+
}
|
|
15
18
|
};
|
|
16
19
|
//# sourceMappingURL=arrow-writer.js.map
|
package/dist/arrow-writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-writer.js","names":["encodeArrowSync","VERSION","__VERSION__","ArrowWriter","name","id","module","version","extensions","mimeTypes","
|
|
1
|
+
{"version":3,"file":"arrow-writer.js","names":["encodeArrowSync","VERSION","__VERSION__","ArrowWriter","name","id","module","version","extensions","mimeTypes","binary","options","encode","encodeArrow","data","encodeSync"],"sources":["../src/arrow-writer.ts"],"sourcesContent":["// import type {} from '@loaders.gl/loader-utils';\n\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport {ColumnarTable} from './lib/encode-arrow';\nimport {encodeArrowSync} from './lib/encode-arrow';\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\ntype ArrowWriterOptions = WriterOptions & {\n arrow?: {};\n};\n\n/** Apache Arrow writer */\nexport const ArrowWriter: WriterWithEncoder<ColumnarTable, never, ArrowWriterOptions> = {\n name: 'Apache Arrow',\n id: 'arrow',\n module: 'arrow',\n version: VERSION,\n extensions: ['arrow', 'feather'],\n mimeTypes: [\n 'application/vnd.apache.arrow.file',\n 'application/vnd.apache.arrow.stream',\n 'application/octet-stream'\n ],\n binary: true,\n options: {},\n encode: async function encodeArrow(data, options?): Promise<ArrayBuffer> {\n return encodeArrowSync(data);\n },\n encodeSync(data, options?) {\n return encodeArrowSync(data);\n }\n};\n"],"mappings":"SAIQA,eAAe;AAIvB,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAO3E,OAAO,MAAMC,WAAwE,GAAG;EACtFC,IAAI,EAAE,cAAc;EACpBC,EAAE,EAAE,OAAO;EACXC,MAAM,EAAE,OAAO;EACfC,OAAO,EAAEN,OAAO;EAChBO,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;EAChCC,SAAS,EAAE,CACT,mCAAmC,EACnC,qCAAqC,EACrC,0BAA0B,CAC3B;EACDC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE,CAAC,CAAC;EACXC,MAAM,EAAE,eAAeC,WAAWA,CAACC,IAAI,EAAEH,OAAQ,EAAwB;IACvE,OAAOX,eAAe,CAACc,IAAI,CAAC;EAC9B,CAAC;EACDC,UAAUA,CAACD,IAAI,EAAEH,OAAQ,EAAE;IACzB,OAAOX,eAAe,CAACc,IAAI,CAAC;EAC9B;AACF,CAAC"}
|
package/dist/dist.dev.js
CHANGED
|
@@ -30,6 +30,7 @@ var __exports__ = (() => {
|
|
|
30
30
|
ArrowLoader: () => ArrowLoader2,
|
|
31
31
|
ArrowWorkerLoader: () => ArrowLoader,
|
|
32
32
|
ArrowWriter: () => ArrowWriter,
|
|
33
|
+
BINARY_GEOMETRY_TEMPLATE: () => BINARY_GEOMETRY_TEMPLATE,
|
|
33
34
|
VECTOR_TYPES: () => VECTOR_TYPES,
|
|
34
35
|
deserializeArrowField: () => deserializeArrowField,
|
|
35
36
|
deserializeArrowMetadata: () => deserializeArrowMetadata,
|
|
@@ -41,7 +42,8 @@ var __exports__ = (() => {
|
|
|
41
42
|
serializeArrowField: () => serializeArrowField,
|
|
42
43
|
serializeArrowMetadata: () => serializeArrowMetadata,
|
|
43
44
|
serializeArrowSchema: () => serializeArrowSchema,
|
|
44
|
-
serializeArrowType: () => serializeArrowType
|
|
45
|
+
serializeArrowType: () => serializeArrowType,
|
|
46
|
+
updateBoundsFromGeoArrowSamples: () => updateBoundsFromGeoArrowSamples
|
|
45
47
|
});
|
|
46
48
|
|
|
47
49
|
// ../schema/src/lib/table/batches/base-table-batch-aggregator.ts
|
|
@@ -729,7 +731,7 @@ var __exports__ = (() => {
|
|
|
729
731
|
}
|
|
730
732
|
}
|
|
731
733
|
function makeArrowTable(table) {
|
|
732
|
-
const _makeArrowTable = globalThis.
|
|
734
|
+
const _makeArrowTable = globalThis.__loaders?._makeArrowTable;
|
|
733
735
|
if (!_makeArrowTable) {
|
|
734
736
|
throw new Error("");
|
|
735
737
|
}
|
|
@@ -12552,7 +12554,15 @@ return true;`);
|
|
|
12552
12554
|
return "float64";
|
|
12553
12555
|
case Utf8:
|
|
12554
12556
|
return "utf8";
|
|
12555
|
-
case
|
|
12557
|
+
case Decimal:
|
|
12558
|
+
const decimal = arrowType;
|
|
12559
|
+
return {
|
|
12560
|
+
type: "decimal",
|
|
12561
|
+
bitWidth: decimal.bitWidth,
|
|
12562
|
+
precision: decimal.precision,
|
|
12563
|
+
scale: decimal.scale
|
|
12564
|
+
};
|
|
12565
|
+
case Date_:
|
|
12556
12566
|
const dateUnit = arrowType.unit;
|
|
12557
12567
|
return dateUnit === DateUnit.DAY ? "date-day" : "date-millisecond";
|
|
12558
12568
|
case DateDay:
|
|
@@ -12617,6 +12627,13 @@ return true;`);
|
|
|
12617
12627
|
return "interval-daytime";
|
|
12618
12628
|
case IntervalYearMonth:
|
|
12619
12629
|
return "interval-yearmonth";
|
|
12630
|
+
case Map_:
|
|
12631
|
+
const mapType = arrowType;
|
|
12632
|
+
return {
|
|
12633
|
+
type: "map",
|
|
12634
|
+
keysSorted: mapType.keysSorted,
|
|
12635
|
+
children: mapType.children.map((arrowField) => serializeArrowField(arrowField))
|
|
12636
|
+
};
|
|
12620
12637
|
case List:
|
|
12621
12638
|
const listType = arrowType;
|
|
12622
12639
|
const listField = listType.valueField;
|
|
@@ -12625,18 +12642,30 @@ return true;`);
|
|
|
12625
12642
|
children: [serializeArrowField(listField)]
|
|
12626
12643
|
};
|
|
12627
12644
|
case FixedSizeList:
|
|
12645
|
+
const fixedSizeList = arrowType;
|
|
12628
12646
|
return {
|
|
12629
12647
|
type: "fixed-size-list",
|
|
12630
|
-
listSize:
|
|
12631
|
-
children: [serializeArrowField(
|
|
12648
|
+
listSize: fixedSizeList.listSize,
|
|
12649
|
+
children: [serializeArrowField(fixedSizeList.children[0])]
|
|
12650
|
+
};
|
|
12651
|
+
case Struct:
|
|
12652
|
+
const structType = arrowType;
|
|
12653
|
+
return {
|
|
12654
|
+
type: "struct",
|
|
12655
|
+
children: structType.children.map((arrowField) => serializeArrowField(arrowField))
|
|
12632
12656
|
};
|
|
12633
12657
|
default:
|
|
12634
|
-
throw new Error(
|
|
12658
|
+
throw new Error(`arrow type not supported: ${arrowType.constructor.name}`);
|
|
12635
12659
|
}
|
|
12636
12660
|
}
|
|
12637
12661
|
function deserializeArrowType(dataType) {
|
|
12638
12662
|
if (typeof dataType === "object") {
|
|
12639
12663
|
switch (dataType.type) {
|
|
12664
|
+
case "decimal":
|
|
12665
|
+
return new Decimal(dataType.precision, dataType.scale, dataType.bitWidth);
|
|
12666
|
+
case "map":
|
|
12667
|
+
let children = dataType.children.map((arrowField) => deserializeArrowField(arrowField));
|
|
12668
|
+
return new Map_(children, dataType.keysSorted);
|
|
12640
12669
|
case "list":
|
|
12641
12670
|
const field = deserializeArrowField(dataType.children[0]);
|
|
12642
12671
|
return new List(field);
|
|
@@ -12644,7 +12673,7 @@ return true;`);
|
|
|
12644
12673
|
const child = deserializeArrowField(dataType.children[0]);
|
|
12645
12674
|
return new FixedSizeList(dataType.listSize, child);
|
|
12646
12675
|
case "struct":
|
|
12647
|
-
|
|
12676
|
+
children = dataType.children.map((arrowField) => deserializeArrowField(arrowField));
|
|
12648
12677
|
return new Struct(children);
|
|
12649
12678
|
default:
|
|
12650
12679
|
throw new Error("array type not supported");
|
|
@@ -12747,11 +12776,14 @@ return true;`);
|
|
|
12747
12776
|
version: VERSION2,
|
|
12748
12777
|
extensions: ["arrow", "feather"],
|
|
12749
12778
|
mimeTypes: ["application/vnd.apache.arrow.file", "application/vnd.apache.arrow.stream", "application/octet-stream"],
|
|
12750
|
-
|
|
12779
|
+
binary: true,
|
|
12780
|
+
options: {},
|
|
12781
|
+
encode: async function encodeArrow(data, options) {
|
|
12751
12782
|
return encodeArrowSync(data);
|
|
12752
12783
|
},
|
|
12753
|
-
|
|
12754
|
-
|
|
12784
|
+
encodeSync(data, options) {
|
|
12785
|
+
return encodeArrowSync(data);
|
|
12786
|
+
}
|
|
12755
12787
|
};
|
|
12756
12788
|
|
|
12757
12789
|
// src/geoarrow/get-arrow-bounds.ts
|
|
@@ -12762,7 +12794,7 @@ return true;`);
|
|
|
12762
12794
|
for (let i = 0; i < numberOfFeatures; i += sampleStep) {
|
|
12763
12795
|
const lng = flatCoords[i * nDim];
|
|
12764
12796
|
const lat = flatCoords[i * nDim + 1];
|
|
12765
|
-
if (lng <
|
|
12797
|
+
if (lng < newBounds[0]) {
|
|
12766
12798
|
newBounds[0] = lng;
|
|
12767
12799
|
}
|
|
12768
12800
|
if (lat < newBounds[1]) {
|
|
@@ -12802,20 +12834,18 @@ return true;`);
|
|
|
12802
12834
|
line: geoEncoding === "geoarrow.multilinestring" || geoEncoding === "geoarrow.linestring"
|
|
12803
12835
|
};
|
|
12804
12836
|
const chunks = geoColumn.data;
|
|
12805
|
-
|
|
12837
|
+
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
12806
12838
|
let globalFeatureIdOffset = 0;
|
|
12807
12839
|
const binaryGeometries = [];
|
|
12808
|
-
|
|
12809
|
-
const geometries = chunks[c];
|
|
12840
|
+
chunks.forEach((chunk) => {
|
|
12810
12841
|
const {
|
|
12811
12842
|
featureIds,
|
|
12812
12843
|
flatCoordinateArray,
|
|
12813
12844
|
nDim,
|
|
12814
12845
|
geomOffset
|
|
12815
|
-
} = getBinaryGeometriesFromChunk(
|
|
12816
|
-
const
|
|
12817
|
-
|
|
12818
|
-
for (let i = 0; i < numOfVertices; i++) {
|
|
12846
|
+
} = getBinaryGeometriesFromChunk(chunk, geoEncoding);
|
|
12847
|
+
const globalFeatureIds = new Uint32Array(featureIds.length);
|
|
12848
|
+
for (let i = 0; i < featureIds.length; i++) {
|
|
12819
12849
|
globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;
|
|
12820
12850
|
}
|
|
12821
12851
|
const binaryContent = {
|
|
@@ -12831,11 +12861,11 @@ return true;`);
|
|
|
12831
12861
|
value: featureIds,
|
|
12832
12862
|
size: 1
|
|
12833
12863
|
},
|
|
12834
|
-
properties: [...Array(
|
|
12864
|
+
properties: [...Array(chunk.length).keys()].map((i) => ({
|
|
12835
12865
|
index: i + globalFeatureIdOffset
|
|
12836
12866
|
}))
|
|
12837
12867
|
};
|
|
12838
|
-
globalFeatureIdOffset +=
|
|
12868
|
+
globalFeatureIdOffset += chunk.length;
|
|
12839
12869
|
binaryGeometries.push({
|
|
12840
12870
|
shape: "binary-feature-collection",
|
|
12841
12871
|
points: {
|
|
@@ -12866,8 +12896,8 @@ return true;`);
|
|
|
12866
12896
|
}
|
|
12867
12897
|
}
|
|
12868
12898
|
});
|
|
12869
|
-
updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
12870
|
-
}
|
|
12899
|
+
bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
12900
|
+
});
|
|
12871
12901
|
return {
|
|
12872
12902
|
binaryGeometries,
|
|
12873
12903
|
bounds,
|
|
@@ -12892,22 +12922,23 @@ return true;`);
|
|
|
12892
12922
|
function getBinaryPolygonsFromChunk(chunk, geoEncoding) {
|
|
12893
12923
|
const isMultiPolygon = geoEncoding === "geoarrow.multipolygon";
|
|
12894
12924
|
const polygonData = isMultiPolygon ? chunk.children[0] : chunk;
|
|
12925
|
+
const polygonOffset = polygonData.valueOffsets;
|
|
12926
|
+
const partData = isMultiPolygon ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i) : chunk.valueOffsets;
|
|
12895
12927
|
const ringData = polygonData.children[0];
|
|
12896
12928
|
const pointData = ringData.children[0];
|
|
12897
12929
|
const coordData = pointData.children[0];
|
|
12898
12930
|
const nDim = pointData.stride;
|
|
12899
12931
|
const geomOffset = ringData.valueOffsets;
|
|
12900
12932
|
const flatCoordinateArray = coordData.values;
|
|
12901
|
-
const geometryIndicies = new Uint16Array(
|
|
12902
|
-
for (let i = 0; i <
|
|
12903
|
-
geometryIndicies[i] = geomOffset[
|
|
12933
|
+
const geometryIndicies = new Uint16Array(polygonOffset.length);
|
|
12934
|
+
for (let i = 0; i < polygonOffset.length; i++) {
|
|
12935
|
+
geometryIndicies[i] = geomOffset[polygonOffset[i]];
|
|
12904
12936
|
}
|
|
12905
|
-
geometryIndicies[chunk.length] = flatCoordinateArray.length / nDim;
|
|
12906
12937
|
const numOfVertices = flatCoordinateArray.length / nDim;
|
|
12907
12938
|
const featureIds = new Uint32Array(numOfVertices);
|
|
12908
|
-
for (let i = 0; i <
|
|
12909
|
-
const startIdx = geomOffset[
|
|
12910
|
-
const endIdx = geomOffset[
|
|
12939
|
+
for (let i = 0; i < partData.length - 1; i++) {
|
|
12940
|
+
const startIdx = geomOffset[partData[i]];
|
|
12941
|
+
const endIdx = geomOffset[partData[i + 1]];
|
|
12911
12942
|
for (let j = startIdx; j < endIdx; j++) {
|
|
12912
12943
|
featureIds[j] = i;
|
|
12913
12944
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
|
2
2
|
import { BinaryFeatureCollection as BinaryFeatures } from '@loaders.gl/schema';
|
|
3
3
|
import { GeoArrowEncoding } from '@loaders.gl/gis';
|
|
4
4
|
/**
|
|
@@ -13,6 +13,22 @@ export type BinaryDataFromGeoArrow = {
|
|
|
13
13
|
line: boolean;
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
|
+
export declare const BINARY_GEOMETRY_TEMPLATE: {
|
|
17
|
+
globalFeatureIds: {
|
|
18
|
+
value: Uint32Array;
|
|
19
|
+
size: number;
|
|
20
|
+
};
|
|
21
|
+
positions: {
|
|
22
|
+
value: Float32Array;
|
|
23
|
+
size: number;
|
|
24
|
+
};
|
|
25
|
+
properties: never[];
|
|
26
|
+
numericProps: {};
|
|
27
|
+
featureIds: {
|
|
28
|
+
value: Uint32Array;
|
|
29
|
+
size: number;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
16
32
|
/**
|
|
17
33
|
* get binary geometries from geoarrow column
|
|
18
34
|
*
|
|
@@ -20,5 +36,5 @@ export type BinaryDataFromGeoArrow = {
|
|
|
20
36
|
* @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)
|
|
21
37
|
* @returns BinaryDataFromGeoArrow
|
|
22
38
|
*/
|
|
23
|
-
export declare function getBinaryGeometriesFromArrow(geoColumn: Vector, geoEncoding: GeoArrowEncoding): BinaryDataFromGeoArrow;
|
|
39
|
+
export declare function getBinaryGeometriesFromArrow(geoColumn: arrow.Vector, geoEncoding: GeoArrowEncoding): BinaryDataFromGeoArrow;
|
|
24
40
|
//# 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,
|
|
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;AACtC,OAAO,EAAC,uBAAuB,IAAI,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC;CACjE,CAAC;AAWF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;CAMpC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,KAAK,CAAC,MAAM,EACvB,WAAW,EAAE,gBAAgB,GAC5B,sBAAsB,CAyExB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { updateBoundsFromGeoArrowSamples } from "./get-arrow-bounds.js";
|
|
2
|
-
const BINARY_GEOMETRY_TEMPLATE = {
|
|
2
|
+
export const BINARY_GEOMETRY_TEMPLATE = {
|
|
3
3
|
globalFeatureIds: {
|
|
4
4
|
value: new Uint32Array(0),
|
|
5
5
|
size: 1
|
|
@@ -22,20 +22,18 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
|
|
|
22
22
|
line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'
|
|
23
23
|
};
|
|
24
24
|
const chunks = geoColumn.data;
|
|
25
|
-
|
|
25
|
+
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
26
26
|
let globalFeatureIdOffset = 0;
|
|
27
27
|
const binaryGeometries = [];
|
|
28
|
-
|
|
29
|
-
const geometries = chunks[c];
|
|
28
|
+
chunks.forEach(chunk => {
|
|
30
29
|
const {
|
|
31
30
|
featureIds,
|
|
32
31
|
flatCoordinateArray,
|
|
33
32
|
nDim,
|
|
34
33
|
geomOffset
|
|
35
|
-
} = getBinaryGeometriesFromChunk(
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
for (let i = 0; i < numOfVertices; i++) {
|
|
34
|
+
} = getBinaryGeometriesFromChunk(chunk, geoEncoding);
|
|
35
|
+
const globalFeatureIds = new Uint32Array(featureIds.length);
|
|
36
|
+
for (let i = 0; i < featureIds.length; i++) {
|
|
39
37
|
globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;
|
|
40
38
|
}
|
|
41
39
|
const binaryContent = {
|
|
@@ -51,11 +49,11 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
|
|
|
51
49
|
value: featureIds,
|
|
52
50
|
size: 1
|
|
53
51
|
},
|
|
54
|
-
properties: [...Array(
|
|
52
|
+
properties: [...Array(chunk.length).keys()].map(i => ({
|
|
55
53
|
index: i + globalFeatureIdOffset
|
|
56
54
|
}))
|
|
57
55
|
};
|
|
58
|
-
globalFeatureIdOffset +=
|
|
56
|
+
globalFeatureIdOffset += chunk.length;
|
|
59
57
|
binaryGeometries.push({
|
|
60
58
|
shape: 'binary-feature-collection',
|
|
61
59
|
points: {
|
|
@@ -86,8 +84,8 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
|
|
|
86
84
|
}
|
|
87
85
|
}
|
|
88
86
|
});
|
|
89
|
-
updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
90
|
-
}
|
|
87
|
+
bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
88
|
+
});
|
|
91
89
|
return {
|
|
92
90
|
binaryGeometries,
|
|
93
91
|
bounds,
|
|
@@ -112,22 +110,23 @@ function getBinaryGeometriesFromChunk(chunk, geoEncoding) {
|
|
|
112
110
|
function getBinaryPolygonsFromChunk(chunk, geoEncoding) {
|
|
113
111
|
const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';
|
|
114
112
|
const polygonData = isMultiPolygon ? chunk.children[0] : chunk;
|
|
113
|
+
const polygonOffset = polygonData.valueOffsets;
|
|
114
|
+
const partData = isMultiPolygon ? chunk.valueOffsets.map(i => polygonOffset.at(i) || i) : chunk.valueOffsets;
|
|
115
115
|
const ringData = polygonData.children[0];
|
|
116
116
|
const pointData = ringData.children[0];
|
|
117
117
|
const coordData = pointData.children[0];
|
|
118
118
|
const nDim = pointData.stride;
|
|
119
119
|
const geomOffset = ringData.valueOffsets;
|
|
120
120
|
const flatCoordinateArray = coordData.values;
|
|
121
|
-
const geometryIndicies = new Uint16Array(
|
|
122
|
-
for (let i = 0; i <
|
|
123
|
-
geometryIndicies[i] = geomOffset[
|
|
121
|
+
const geometryIndicies = new Uint16Array(polygonOffset.length);
|
|
122
|
+
for (let i = 0; i < polygonOffset.length; i++) {
|
|
123
|
+
geometryIndicies[i] = geomOffset[polygonOffset[i]];
|
|
124
124
|
}
|
|
125
|
-
geometryIndicies[chunk.length] = flatCoordinateArray.length / nDim;
|
|
126
125
|
const numOfVertices = flatCoordinateArray.length / nDim;
|
|
127
126
|
const featureIds = new Uint32Array(numOfVertices);
|
|
128
|
-
for (let i = 0; i <
|
|
129
|
-
const startIdx = geomOffset[
|
|
130
|
-
const endIdx = geomOffset[
|
|
127
|
+
for (let i = 0; i < partData.length - 1; i++) {
|
|
128
|
+
const startIdx = geomOffset[partData[i]];
|
|
129
|
+
const endIdx = geomOffset[partData[i + 1]];
|
|
131
130
|
for (let j = startIdx; j < endIdx; j++) {
|
|
132
131
|
featureIds[j] = i;
|
|
133
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["updateBoundsFromGeoArrowSamples","BINARY_GEOMETRY_TEMPLATE","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","featureTypes","polygon","point","line","chunks","data","bounds","Infinity","globalFeatureIdOffset","binaryGeometries","c","length","geometries","flatCoordinateArray","nDim","geomOffset","getBinaryGeometriesFromChunk","numOfVertices","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","chunk","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","isMultiPolygon","polygonData","children","ringData","pointData","coordData","stride","valueOffsets","values","geometryIndicies","startIdx","endIdx","j","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 {Data, Vector} from 'apache-arrow';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n binaryGeometries: BinaryFeatures[];\n bounds: [number, number, number, number];\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n};\n\ntype BinaryGeometryContent = {\n featureIds: Uint32Array;\n flatCoordinateArray: Float64Array;\n nDim: number;\n geomOffset: Int32Array;\n geometryIndicies: Uint16Array;\n};\n\n// binary geometry template, see deck.gl BinaryGeometry\nconst 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\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 * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: Vector,\n geoEncoding: GeoArrowEncoding\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 = geoColumn.data;\n const bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n for (let c = 0; c < chunks.length; c++) {\n const geometries = chunks[c];\n const {featureIds, flatCoordinateArray, nDim, geomOffset} = getBinaryGeometriesFromChunk(\n geometries,\n geoEncoding\n );\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const globalFeatureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < numOfVertices; 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(geometries.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += geometries.length;\n\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 // TODO why deck.gl's tessellatePolygon performance is not good when using geometryIndicies\n // even when there is no hole in any polygon\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 }\n });\n\n updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n }\n\n return {binaryGeometries, bounds, featureTypes};\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 * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: Data,\n geoEncoding: GeoArrowEncoding\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);\n default:\n throw Error('invalid geoarrow encoding');\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 * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(chunk: Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\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(chunk.length + 1);\n for (let i = 0; i < chunk.length; i++) {\n geometryIndicies[i] = geomOffset[chunk.valueOffsets[i]];\n }\n geometryIndicies[chunk.length] = flatCoordinateArray.length / nDim;\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < chunk.length - 1; i++) {\n const startIdx = geomOffset[chunk.valueOffsets[i]];\n const endIdx = geomOffset[chunk.valueOffsets[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\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: 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 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 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: 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 for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"SAMQA,+BAA+B;AAoBvC,MAAMC,wBAAwB,GAAG;EAC/BC,gBAAgB,EAAE;IAACC,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;IAAEC,IAAI,EAAE;EAAC,CAAC;EACtDC,SAAS,EAAE;IAACH,KAAK,EAAE,IAAII,YAAY,CAAC,CAAC,CAAC;IAAEF,IAAI,EAAE;EAAC,CAAC;EAChDG,UAAU,EAAE,EAAE;EACdC,YAAY,EAAE,CAAC,CAAC;EAChBC,UAAU,EAAE;IAACP,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;IAAEC,IAAI,EAAE;EAAC;AACjD,CAAC;AASD,OAAO,SAASM,4BAA4BA,CAC1CC,SAAiB,EACjBC,WAA6B,EACL;EACxB,MAAMC,YAAY,GAAG;IACnBC,OAAO,EAAEF,WAAW,KAAK,uBAAuB,IAAIA,WAAW,KAAK,kBAAkB;IACtFG,KAAK,EAAEH,WAAW,KAAK,qBAAqB,IAAIA,WAAW,KAAK,gBAAgB;IAChFI,IAAI,EAAEJ,WAAW,KAAK,0BAA0B,IAAIA,WAAW,KAAK;EACtE,CAAC;EAED,MAAMK,MAAM,GAAGN,SAAS,CAACO,IAAI;EAC7B,MAAMC,MAAwC,GAAG,CAACC,QAAQ,EAAEA,QAAQ,EAAE,CAACA,QAAQ,EAAE,CAACA,QAAQ,CAAC;EAC3F,IAAIC,qBAAqB,GAAG,CAAC;EAC7B,MAAMC,gBAAkC,GAAG,EAAE;EAE7C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,MAAM,CAACO,MAAM,EAAED,CAAC,EAAE,EAAE;IACtC,MAAME,UAAU,GAAGR,MAAM,CAACM,CAAC,CAAC;IAC5B,MAAM;MAACd,UAAU;MAAEiB,mBAAmB;MAAEC,IAAI;MAAEC;IAAU,CAAC,GAAGC,4BAA4B,CACtFJ,UAAU,EACVb,WACF,CAAC;IAED,MAAMkB,aAAa,GAAGJ,mBAAmB,CAACF,MAAM,GAAGG,IAAI;IACvD,MAAM1B,gBAAgB,GAAG,IAAIE,WAAW,CAAC2B,aAAa,CAAC;IACvD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,aAAa,EAAEC,CAAC,EAAE,EAAE;MACtC9B,gBAAgB,CAAC8B,CAAC,CAAC,GAAGtB,UAAU,CAACsB,CAAC,CAAC,GAAGV,qBAAqB;IAC7D;IAEA,MAAMW,aAAa,GAAG;MACpB/B,gBAAgB,EAAE;QAACC,KAAK,EAAED,gBAAgB;QAAEG,IAAI,EAAE;MAAC,CAAC;MACpDC,SAAS,EAAE;QACTH,KAAK,EAAEwB,mBAAmB;QAC1BtB,IAAI,EAAEuB;MACR,CAAC;MACDlB,UAAU,EAAE;QAACP,KAAK,EAAEO,UAAU;QAAEL,IAAI,EAAE;MAAC,CAAC;MAExCG,UAAU,EAAE,CAAC,GAAG0B,KAAK,CAACR,UAAU,CAACD,MAAM,CAAC,CAACU,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAAEJ,CAAC,KAAM;QAC3DK,KAAK,EAAEL,CAAC,GAAGV;MACb,CAAC,CAAC;IACJ,CAAC;IAGDA,qBAAqB,IAAII,UAAU,CAACD,MAAM;IAG1CF,gBAAgB,CAACe,IAAI,CAAC;MACpBC,KAAK,EAAE,2BAA2B;MAClCC,MAAM,EAAE;QACNC,IAAI,EAAE,OAAO;QACb,GAAGxC,wBAAwB;QAC3B,IAAIa,YAAY,CAACE,KAAK,GAAGiB,aAAa,GAAG,CAAC,CAAC;MAC7C,CAAC;MACDS,KAAK,EAAE;QACLD,IAAI,EAAE,YAAY;QAClB,GAAGxC,wBAAwB;QAC3B,IAAIa,YAAY,CAACG,IAAI,GAAGgB,aAAa,GAAG,CAAC,CAAC,CAAC;QAC3CU,WAAW,EAAE;UAACxC,KAAK,EAAEW,YAAY,CAACG,IAAI,GAAGY,UAAU,GAAG,IAAIe,WAAW,CAAC,CAAC,CAAC;UAAEvC,IAAI,EAAE;QAAC;MACnF,CAAC;MACDwC,QAAQ,EAAE;QACRJ,IAAI,EAAE,SAAS;QACf,GAAGxC,wBAAwB;QAC3B,IAAIa,YAAY,CAACC,OAAO,GAAGkB,aAAa,GAAG,CAAC,CAAC,CAAC;QAC9Ca,cAAc,EAAE;UAGd3C,KAAK,EAAEW,YAAY,CAACC,OAAO,GAAGc,UAAU,GAAG,IAAIe,WAAW,CAAC,CAAC,CAAC;UAC7DvC,IAAI,EAAE;QACR,CAAC;QACD0C,uBAAuB,EAAE;UACvB5C,KAAK,EAAEW,YAAY,CAACC,OAAO,GAAGc,UAAU,GAAG,IAAIe,WAAW,CAAC,CAAC,CAAC;UAC7DvC,IAAI,EAAE;QACR;MACF;IACF,CAAC,CAAC;IAEFL,+BAA+B,CAAC2B,mBAAmB,EAAEC,IAAI,EAAER,MAAM,CAAC;EACpE;EAEA,OAAO;IAACG,gBAAgB;IAAEH,MAAM;IAAEN;EAAY,CAAC;AACjD;AAQA,SAASgB,4BAA4BA,CACnCkB,KAAW,EACXnC,WAA6B,EACN;EACvB,QAAQA,WAAW;IACjB,KAAK,gBAAgB;IACrB,KAAK,qBAAqB;MACxB,OAAOoC,wBAAwB,CAACD,KAAK,EAAEnC,WAAW,CAAC;IACrD,KAAK,qBAAqB;IAC1B,KAAK,0BAA0B;MAC7B,OAAOqC,uBAAuB,CAACF,KAAK,EAAEnC,WAAW,CAAC;IACpD,KAAK,kBAAkB;IACvB,KAAK,uBAAuB;MAC1B,OAAOsC,0BAA0B,CAACH,KAAK,EAAEnC,WAAW,CAAC;IACvD;MACE,MAAMuC,KAAK,CAAC,2BAA2B,CAAC;EAC5C;AACF;AAQA,SAASD,0BAA0BA,CAACH,KAAW,EAAEnC,WAAmB,EAAyB;EAC3F,MAAMwC,cAAc,GAAGxC,WAAW,KAAK,uBAAuB;EAE9D,MAAMyC,WAAW,GAAGD,cAAc,GAAGL,KAAK,CAACO,QAAQ,CAAC,CAAC,CAAC,GAAGP,KAAK;EAC9D,MAAMQ,QAAQ,GAAGF,WAAW,CAACC,QAAQ,CAAC,CAAC,CAAC;EACxC,MAAME,SAAS,GAAGD,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC;EACtC,MAAMG,SAAS,GAAGD,SAAS,CAACF,QAAQ,CAAC,CAAC,CAAC;EACvC,MAAM3B,IAAI,GAAG6B,SAAS,CAACE,MAAM;EAC7B,MAAM9B,UAAU,GAAG2B,QAAQ,CAACI,YAAY;EACxC,MAAMjC,mBAAmB,GAAG+B,SAAS,CAACG,MAAM;EAE5C,MAAMC,gBAAgB,GAAG,IAAIlB,WAAW,CAACI,KAAK,CAACvB,MAAM,GAAG,CAAC,CAAC;EAC1D,KAAK,IAAIO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,KAAK,CAACvB,MAAM,EAAEO,CAAC,EAAE,EAAE;IACrC8B,gBAAgB,CAAC9B,CAAC,CAAC,GAAGH,UAAU,CAACmB,KAAK,CAACY,YAAY,CAAC5B,CAAC,CAAC,CAAC;EACzD;EACA8B,gBAAgB,CAACd,KAAK,CAACvB,MAAM,CAAC,GAAGE,mBAAmB,CAACF,MAAM,GAAGG,IAAI;EAElE,MAAMG,aAAa,GAAGJ,mBAAmB,CAACF,MAAM,GAAGG,IAAI;EACvD,MAAMlB,UAAU,GAAG,IAAIN,WAAW,CAAC2B,aAAa,CAAC;EACjD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,KAAK,CAACvB,MAAM,GAAG,CAAC,EAAEO,CAAC,EAAE,EAAE;IACzC,MAAM+B,QAAQ,GAAGlC,UAAU,CAACmB,KAAK,CAACY,YAAY,CAAC5B,CAAC,CAAC,CAAC;IAClD,MAAMgC,MAAM,GAAGnC,UAAU,CAACmB,KAAK,CAACY,YAAY,CAAC5B,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,KAAK,IAAIiC,CAAC,GAAGF,QAAQ,EAAEE,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,EAAE;MACtCvD,UAAU,CAACuD,CAAC,CAAC,GAAGjC,CAAC;IACnB;EACF;EAEA,OAAO;IACLtB,UAAU;IACViB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACViC;EACF,CAAC;AACH;AAQA,SAASZ,uBAAuBA,CAACF,KAAW,EAAEnC,WAAmB,EAAyB;EACxF,MAAMqD,iBAAiB,GAAGrD,WAAW,KAAK,0BAA0B;EAEpE,MAAMsD,QAAQ,GAAGD,iBAAiB,GAAGlB,KAAK,CAACO,QAAQ,CAAC,CAAC,CAAC,GAAGP,KAAK;EAC9D,MAAMS,SAAS,GAAGU,QAAQ,CAACZ,QAAQ,CAAC,CAAC,CAAC;EACtC,MAAMG,SAAS,GAAGD,SAAS,CAACF,QAAQ,CAAC,CAAC,CAAC;EAEvC,MAAM3B,IAAI,GAAG6B,SAAS,CAACE,MAAM;EAC7B,MAAM9B,UAAU,GAAGsC,QAAQ,CAACP,YAAY;EACxC,MAAMjC,mBAAmB,GAAG+B,SAAS,CAACG,MAAM;EAG5C,MAAMC,gBAAgB,GAAG,IAAIlB,WAAW,CAAC,CAAC,CAAC;EAE3C,MAAMb,aAAa,GAAGJ,mBAAmB,CAACF,MAAM,GAAGG,IAAI;EACvD,MAAMlB,UAAU,GAAG,IAAIN,WAAW,CAAC2B,aAAa,CAAC;EACjD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,KAAK,CAACvB,MAAM,EAAEO,CAAC,EAAE,EAAE;IACrC,MAAM+B,QAAQ,GAAGlC,UAAU,CAACG,CAAC,CAAC;IAC9B,MAAMgC,MAAM,GAAGnC,UAAU,CAACG,CAAC,GAAG,CAAC,CAAC;IAChC,KAAK,IAAIiC,CAAC,GAAGF,QAAQ,EAAEE,CAAC,GAAGD,MAAM,EAAEC,CAAC,EAAE,EAAE;MACtCvD,UAAU,CAACuD,CAAC,CAAC,GAAGjC,CAAC;IACnB;EACF;EAEA,OAAO;IACLtB,UAAU;IACViB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACViC;EACF,CAAC;AACH;AAQA,SAASb,wBAAwBA,CAACD,KAAW,EAAEnC,WAAmB,EAAyB;EACzF,MAAMuD,YAAY,GAAGvD,WAAW,KAAK,qBAAqB;EAE1D,MAAM4C,SAAS,GAAGW,YAAY,GAAGpB,KAAK,CAACO,QAAQ,CAAC,CAAC,CAAC,GAAGP,KAAK;EAC1D,MAAMU,SAAS,GAAGD,SAAS,CAACF,QAAQ,CAAC,CAAC,CAAC;EAEvC,MAAM3B,IAAI,GAAG6B,SAAS,CAACE,MAAM;EAC7B,MAAMhC,mBAAmB,GAAG+B,SAAS,CAACG,MAAM;EAG5C,MAAMC,gBAAgB,GAAG,IAAIlB,WAAW,CAAC,CAAC,CAAC;EAE3C,MAAMf,UAAU,GAAG,IAAIwC,UAAU,CAAC,CAAC,CAAC;EAEpC,MAAMtC,aAAa,GAAGJ,mBAAmB,CAACF,MAAM,GAAGG,IAAI;EACvD,MAAMlB,UAAU,GAAG,IAAIN,WAAW,CAAC2B,aAAa,CAAC;EACjD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgB,KAAK,CAACvB,MAAM,EAAEO,CAAC,EAAE,EAAE;IACrCtB,UAAU,CAACsB,CAAC,CAAC,GAAGA,CAAC;EACnB;EAEA,OAAO;IACLtB,UAAU;IACViB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACViC;EACF,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["updateBoundsFromGeoArrowSamples","BINARY_GEOMETRY_TEMPLATE","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","featureTypes","polygon","point","line","chunks","data","bounds","Infinity","globalFeatureIdOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","startIdx","endIdx","j","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 {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n binaryGeometries: BinaryFeatures[];\n bounds: [number, number, number, number];\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n};\n\ntype BinaryGeometryContent = {\n featureIds: Uint32Array;\n flatCoordinateArray: Float64Array;\n nDim: number;\n geomOffset: Int32Array;\n geometryIndicies: Uint16Array;\n};\n\n// binary geometry template, see deck.gl BinaryGeometry\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\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 * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding\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 = 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} = getBinaryGeometriesFromChunk(\n chunk,\n geoEncoding\n );\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\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 // TODO why deck.gl's tessellatePolygon performance is not good when using geometryIndicies\n // even when there is no hole in any polygon\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 }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {binaryGeometries, bounds, featureTypes};\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 * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: arrow.Data,\n geoEncoding: GeoArrowEncoding\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);\n default:\n throw Error('invalid geoarrow encoding');\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 * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(chunk: arrow.Data, geoEncoding: string): 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 return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\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 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 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 for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"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"}
|