@loaders.gl/arrow 4.0.1 → 4.0.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 +33 -25
- 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 +18 -14
- 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 +8 -9
- 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 +135 -122
- 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 +81 -81
- 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 +6 -3
- package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +14 -16
- 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 +98 -142
- 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.2" : "latest";
|
|
949
957
|
var ArrowLoader = {
|
|
950
958
|
name: "Apache Arrow",
|
|
951
959
|
id: "arrow",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-writer.d.ts","sourceRoot":"","sources":["../src/arrow-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,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,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"arrow-writer.d.ts","sourceRoot":"","sources":["../src/arrow-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AACpE,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,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAmBxE,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 {Writer, 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: Writer<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,WAA6D,GAAG;EAC3EC,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
|
}
|
|
@@ -12747,11 +12749,14 @@ return true;`);
|
|
|
12747
12749
|
version: VERSION2,
|
|
12748
12750
|
extensions: ["arrow", "feather"],
|
|
12749
12751
|
mimeTypes: ["application/vnd.apache.arrow.file", "application/vnd.apache.arrow.stream", "application/octet-stream"],
|
|
12750
|
-
|
|
12752
|
+
binary: true,
|
|
12753
|
+
options: {},
|
|
12754
|
+
encode: async function encodeArrow(data, options) {
|
|
12751
12755
|
return encodeArrowSync(data);
|
|
12752
12756
|
},
|
|
12753
|
-
|
|
12754
|
-
|
|
12757
|
+
encodeSync(data, options) {
|
|
12758
|
+
return encodeArrowSync(data);
|
|
12759
|
+
}
|
|
12755
12760
|
};
|
|
12756
12761
|
|
|
12757
12762
|
// src/geoarrow/get-arrow-bounds.ts
|
|
@@ -12762,7 +12767,7 @@ return true;`);
|
|
|
12762
12767
|
for (let i = 0; i < numberOfFeatures; i += sampleStep) {
|
|
12763
12768
|
const lng = flatCoords[i * nDim];
|
|
12764
12769
|
const lat = flatCoords[i * nDim + 1];
|
|
12765
|
-
if (lng <
|
|
12770
|
+
if (lng < newBounds[0]) {
|
|
12766
12771
|
newBounds[0] = lng;
|
|
12767
12772
|
}
|
|
12768
12773
|
if (lat < newBounds[1]) {
|
|
@@ -12802,17 +12807,16 @@ return true;`);
|
|
|
12802
12807
|
line: geoEncoding === "geoarrow.multilinestring" || geoEncoding === "geoarrow.linestring"
|
|
12803
12808
|
};
|
|
12804
12809
|
const chunks = geoColumn.data;
|
|
12805
|
-
|
|
12810
|
+
let bounds = [Infinity, Infinity, -Infinity, -Infinity];
|
|
12806
12811
|
let globalFeatureIdOffset = 0;
|
|
12807
12812
|
const binaryGeometries = [];
|
|
12808
|
-
|
|
12809
|
-
const geometries = chunks[c];
|
|
12813
|
+
chunks.forEach((chunk) => {
|
|
12810
12814
|
const {
|
|
12811
12815
|
featureIds,
|
|
12812
12816
|
flatCoordinateArray,
|
|
12813
12817
|
nDim,
|
|
12814
12818
|
geomOffset
|
|
12815
|
-
} = getBinaryGeometriesFromChunk(
|
|
12819
|
+
} = getBinaryGeometriesFromChunk(chunk, geoEncoding);
|
|
12816
12820
|
const numOfVertices = flatCoordinateArray.length / nDim;
|
|
12817
12821
|
const globalFeatureIds = new Uint32Array(numOfVertices);
|
|
12818
12822
|
for (let i = 0; i < numOfVertices; i++) {
|
|
@@ -12831,11 +12835,11 @@ return true;`);
|
|
|
12831
12835
|
value: featureIds,
|
|
12832
12836
|
size: 1
|
|
12833
12837
|
},
|
|
12834
|
-
properties: [...Array(
|
|
12838
|
+
properties: [...Array(chunk.length).keys()].map((i) => ({
|
|
12835
12839
|
index: i + globalFeatureIdOffset
|
|
12836
12840
|
}))
|
|
12837
12841
|
};
|
|
12838
|
-
globalFeatureIdOffset +=
|
|
12842
|
+
globalFeatureIdOffset += chunk.length;
|
|
12839
12843
|
binaryGeometries.push({
|
|
12840
12844
|
shape: "binary-feature-collection",
|
|
12841
12845
|
points: {
|
|
@@ -12866,8 +12870,8 @@ return true;`);
|
|
|
12866
12870
|
}
|
|
12867
12871
|
}
|
|
12868
12872
|
});
|
|
12869
|
-
updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
12870
|
-
}
|
|
12873
|
+
bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
12874
|
+
});
|
|
12871
12875
|
return {
|
|
12872
12876
|
binaryGeometries,
|
|
12873
12877
|
bounds,
|
|
@@ -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,CA0ExB"}
|
|
@@ -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,17 +22,16 @@ 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(
|
|
34
|
+
} = getBinaryGeometriesFromChunk(chunk, geoEncoding);
|
|
36
35
|
const numOfVertices = flatCoordinateArray.length / nDim;
|
|
37
36
|
const globalFeatureIds = new Uint32Array(numOfVertices);
|
|
38
37
|
for (let i = 0; i < numOfVertices; i++) {
|
|
@@ -51,11 +50,11 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
|
|
|
51
50
|
value: featureIds,
|
|
52
51
|
size: 1
|
|
53
52
|
},
|
|
54
|
-
properties: [...Array(
|
|
53
|
+
properties: [...Array(chunk.length).keys()].map(i => ({
|
|
55
54
|
index: i + globalFeatureIdOffset
|
|
56
55
|
}))
|
|
57
56
|
};
|
|
58
|
-
globalFeatureIdOffset +=
|
|
57
|
+
globalFeatureIdOffset += chunk.length;
|
|
59
58
|
binaryGeometries.push({
|
|
60
59
|
shape: 'binary-feature-collection',
|
|
61
60
|
points: {
|
|
@@ -86,8 +85,8 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
|
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
87
|
});
|
|
89
|
-
updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
90
|
-
}
|
|
88
|
+
bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
|
|
89
|
+
});
|
|
91
90
|
return {
|
|
92
91
|
binaryGeometries,
|
|
93
92
|
bounds,
|
|
@@ -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":"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"}
|
|
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","numOfVertices","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","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 * 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 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 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 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: 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-geoarrow-to-geojson.js","names":["parseGeometryFromArrow","rawData","_rawData$encoding","encoding","toLowerCase","data","geometry","arrowMultiPolygonToFeature","arrowPolygonToFeature","arrowMultiPointToFeature","arrowPointToFeature","arrowMultiLineStringToFeature","arrowLineStringToFeature","Error","type","properties","arrowMultiPolygon","multiPolygon","m","length","arrowPolygon","get","polygon","i","arrowRing","ring","j","arrowCoord","coord","Array","from","push","coordinates","coords","arrowMultiPoint","multiPoint","arrowPoint","point","arrowMultiLineString","multiLineString","arrowLineString","lineString"],"sources":["../../src/geoarrow/convert-geoarrow-to-geojson.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Vector} from 'apache-arrow';\nimport {\n Feature,\n MultiPolygon,\n Position,\n Polygon,\n MultiPoint,\n Point,\n MultiLineString,\n LineString\n} from '@loaders.gl/schema';\nimport type {GeoArrowEncoding} from '@loaders.gl/gis';\n\ntype RawArrowFeature = {\n encoding?: GeoArrowEncoding;\n data: any;\n};\n\n/**\n * parse geometry from arrow data that is returned from processArrowData()\n * NOTE: this function could be duplicated with the binaryToFeature() in deck.gl,\n * it is currently only used for picking because currently deck.gl returns only the index of the feature\n * So the following functions could be deprecated once deck.gl returns the feature directly for binary geojson layer\n *\n * @param rawData the raw geometry data returned from processArrowData, which is an object with two properties: encoding and data\n * @see processArrowData\n * @returns Feature or null\n */\nexport function parseGeometryFromArrow(rawData: RawArrowFeature): Feature | null {\n const encoding = rawData.encoding?.toLowerCase();\n const data = rawData.data;\n if (!encoding || !data) {\n return null;\n }\n\n let geometry;\n\n switch (encoding) {\n case 'geoarrow.multipolygon':\n geometry = arrowMultiPolygonToFeature(data);\n break;\n case 'geoarrow.polygon':\n geometry = arrowPolygonToFeature(data);\n break;\n case 'geoarrow.multipoint':\n geometry = arrowMultiPointToFeature(data);\n break;\n case 'geoarrow.point':\n geometry = arrowPointToFeature(data);\n break;\n case 'geoarrow.multilinestring':\n geometry = arrowMultiLineStringToFeature(data);\n break;\n case 'geoarrow.linestring':\n geometry = arrowLineStringToFeature(data);\n break;\n default: {\n throw Error(`GeoArrow encoding not supported ${encoding}`);\n }\n }\n return {\n type: 'Feature',\n geometry,\n properties: {}\n };\n}\n\n/**\n * convert Arrow MultiPolygon to geojson Feature\n */\nfunction arrowMultiPolygonToFeature(arrowMultiPolygon: Vector): MultiPolygon {\n const multiPolygon: Position[][][] = [];\n for (let m = 0; m < arrowMultiPolygon.length; m++) {\n const arrowPolygon = arrowMultiPolygon.get(m);\n const polygon: Position[][] = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon?.length; i++) {\n const arrowRing = arrowPolygon?.get(i);\n const ring: Position[] = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coord: Position = Array.from(arrowCoord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n multiPolygon.push(polygon);\n }\n const geometry: MultiPolygon = {\n type: 'MultiPolygon',\n coordinates: multiPolygon\n };\n return geometry;\n}\n\n/**\n * convert Arrow Polygon to geojson Feature\n */\nfunction arrowPolygonToFeature(arrowPolygon: Vector): Polygon {\n const polygon: Position[][] = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon.length; i++) {\n const arrowRing = arrowPolygon.get(i);\n const ring: Position[] = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coords: Position = Array.from(arrowCoord);\n ring.push(coords);\n }\n polygon.push(ring);\n }\n const geometry: Polygon = {\n type: 'Polygon',\n coordinates: polygon\n };\n return geometry;\n}\n\n/**\n * convert Arrow MultiPoint to geojson MultiPoint\n */\nfunction arrowMultiPointToFeature(arrowMultiPoint: Vector): MultiPoint {\n const multiPoint: Position[] = [];\n for (let i = 0; arrowMultiPoint && i < arrowMultiPoint.length; i++) {\n const arrowPoint = arrowMultiPoint.get(i);\n if (arrowPoint) {\n const coord: Position = Array.from(arrowPoint);\n multiPoint.push(coord);\n }\n }\n const geometry: MultiPoint = {\n type: 'MultiPoint',\n coordinates: multiPoint\n };\n return geometry;\n}\n\n/**\n * convert Arrow Point to geojson Point\n */\nfunction arrowPointToFeature(arrowPoint: Vector): Point {\n const point: Position = Array.from(arrowPoint);\n const geometry: Point = {\n type: 'Point',\n coordinates: point\n };\n return geometry;\n}\n\n/**\n * convert Arrow MultiLineString to geojson MultiLineString\n */\nfunction arrowMultiLineStringToFeature(arrowMultiLineString: Vector): MultiLineString {\n const multiLineString: Position[][] = [];\n for (let i = 0; arrowMultiLineString && i < arrowMultiLineString.length; i++) {\n const arrowLineString = arrowMultiLineString.get(i);\n const lineString: Position[] = [];\n for (let j = 0; arrowLineString && j < arrowLineString.length; j++) {\n const arrowCoord = arrowLineString.get(j);\n if (arrowCoord) {\n const coords: Position = Array.from(arrowCoord);\n lineString.push(coords);\n }\n }\n multiLineString.push(lineString);\n }\n const geometry: MultiLineString = {\n type: 'MultiLineString',\n coordinates: multiLineString\n };\n return geometry;\n}\n\n/**\n * convert Arrow LineString to geojson LineString\n */\nfunction arrowLineStringToFeature(arrowLineString: Vector): LineString {\n const lineString: Position[] = [];\n for (let i = 0; arrowLineString && i < arrowLineString.length; i++) {\n const arrowCoord = arrowLineString.get(i);\n if (arrowCoord) {\n const coords: Position = Array.from(arrowCoord);\n lineString.push(coords);\n }\n }\n const geometry: LineString = {\n type: 'LineString',\n coordinates: lineString\n };\n return geometry;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convert-geoarrow-to-geojson.js","names":["parseGeometryFromArrow","rawData","_rawData$encoding","encoding","toLowerCase","data","geometry","arrowMultiPolygonToFeature","arrowPolygonToFeature","arrowMultiPointToFeature","arrowPointToFeature","arrowMultiLineStringToFeature","arrowLineStringToFeature","Error","type","properties","arrowMultiPolygon","multiPolygon","m","length","arrowPolygon","get","polygon","i","arrowRing","ring","j","arrowCoord","coord","Array","from","push","coordinates","coords","arrowMultiPoint","multiPoint","arrowPoint","point","arrowMultiLineString","multiLineString","arrowLineString","lineString"],"sources":["../../src/geoarrow/convert-geoarrow-to-geojson.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {\n Feature,\n MultiPolygon,\n Position,\n Polygon,\n MultiPoint,\n Point,\n MultiLineString,\n LineString\n} from '@loaders.gl/schema';\nimport type {GeoArrowEncoding} from '@loaders.gl/gis';\n\ntype RawArrowFeature = {\n encoding?: GeoArrowEncoding;\n data: any;\n};\n\n/**\n * parse geometry from arrow data that is returned from processArrowData()\n * NOTE: this function could be duplicated with the binaryToFeature() in deck.gl,\n * it is currently only used for picking because currently deck.gl returns only the index of the feature\n * So the following functions could be deprecated once deck.gl returns the feature directly for binary geojson layer\n *\n * @param rawData the raw geometry data returned from processArrowData, which is an object with two properties: encoding and data\n * @see processArrowData\n * @returns Feature or null\n */\nexport function parseGeometryFromArrow(rawData: RawArrowFeature): Feature | null {\n const encoding = rawData.encoding?.toLowerCase();\n const data = rawData.data;\n if (!encoding || !data) {\n return null;\n }\n\n let geometry;\n\n switch (encoding) {\n case 'geoarrow.multipolygon':\n geometry = arrowMultiPolygonToFeature(data);\n break;\n case 'geoarrow.polygon':\n geometry = arrowPolygonToFeature(data);\n break;\n case 'geoarrow.multipoint':\n geometry = arrowMultiPointToFeature(data);\n break;\n case 'geoarrow.point':\n geometry = arrowPointToFeature(data);\n break;\n case 'geoarrow.multilinestring':\n geometry = arrowMultiLineStringToFeature(data);\n break;\n case 'geoarrow.linestring':\n geometry = arrowLineStringToFeature(data);\n break;\n default: {\n throw Error(`GeoArrow encoding not supported ${encoding}`);\n }\n }\n return {\n type: 'Feature',\n geometry,\n properties: {}\n };\n}\n\n/**\n * convert Arrow MultiPolygon to geojson Feature\n */\nfunction arrowMultiPolygonToFeature(arrowMultiPolygon: arrow.Vector): MultiPolygon {\n const multiPolygon: Position[][][] = [];\n for (let m = 0; m < arrowMultiPolygon.length; m++) {\n const arrowPolygon = arrowMultiPolygon.get(m);\n const polygon: Position[][] = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon?.length; i++) {\n const arrowRing = arrowPolygon?.get(i);\n const ring: Position[] = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coord: Position = Array.from(arrowCoord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n multiPolygon.push(polygon);\n }\n const geometry: MultiPolygon = {\n type: 'MultiPolygon',\n coordinates: multiPolygon\n };\n return geometry;\n}\n\n/**\n * convert Arrow Polygon to geojson Feature\n */\nfunction arrowPolygonToFeature(arrowPolygon: arrow.Vector): Polygon {\n const polygon: Position[][] = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon.length; i++) {\n const arrowRing = arrowPolygon.get(i);\n const ring: Position[] = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coords: Position = Array.from(arrowCoord);\n ring.push(coords);\n }\n polygon.push(ring);\n }\n const geometry: Polygon = {\n type: 'Polygon',\n coordinates: polygon\n };\n return geometry;\n}\n\n/**\n * convert Arrow MultiPoint to geojson MultiPoint\n */\nfunction arrowMultiPointToFeature(arrowMultiPoint: arrow.Vector): MultiPoint {\n const multiPoint: Position[] = [];\n for (let i = 0; arrowMultiPoint && i < arrowMultiPoint.length; i++) {\n const arrowPoint = arrowMultiPoint.get(i);\n if (arrowPoint) {\n const coord: Position = Array.from(arrowPoint);\n multiPoint.push(coord);\n }\n }\n const geometry: MultiPoint = {\n type: 'MultiPoint',\n coordinates: multiPoint\n };\n return geometry;\n}\n\n/**\n * convert Arrow Point to geojson Point\n */\nfunction arrowPointToFeature(arrowPoint: arrow.Vector): Point {\n const point: Position = Array.from(arrowPoint);\n const geometry: Point = {\n type: 'Point',\n coordinates: point\n };\n return geometry;\n}\n\n/**\n * convert Arrow MultiLineString to geojson MultiLineString\n */\nfunction arrowMultiLineStringToFeature(arrowMultiLineString: arrow.Vector): MultiLineString {\n const multiLineString: Position[][] = [];\n for (let i = 0; arrowMultiLineString && i < arrowMultiLineString.length; i++) {\n const arrowLineString = arrowMultiLineString.get(i);\n const lineString: Position[] = [];\n for (let j = 0; arrowLineString && j < arrowLineString.length; j++) {\n const arrowCoord = arrowLineString.get(j);\n if (arrowCoord) {\n const coords: Position = Array.from(arrowCoord);\n lineString.push(coords);\n }\n }\n multiLineString.push(lineString);\n }\n const geometry: MultiLineString = {\n type: 'MultiLineString',\n coordinates: multiLineString\n };\n return geometry;\n}\n\n/**\n * convert Arrow LineString to geojson LineString\n */\nfunction arrowLineStringToFeature(arrowLineString: arrow.Vector): LineString {\n const lineString: Position[] = [];\n for (let i = 0; arrowLineString && i < arrowLineString.length; i++) {\n const arrowCoord = arrowLineString.get(i);\n if (arrowCoord) {\n const coords: Position = Array.from(arrowCoord);\n lineString.push(coords);\n }\n }\n const geometry: LineString = {\n type: 'LineString',\n coordinates: lineString\n };\n return geometry;\n}\n"],"mappings":"AA+BA,OAAO,SAASA,sBAAsBA,CAACC,OAAwB,EAAkB;EAAA,IAAAC,iBAAA;EAC/E,MAAMC,QAAQ,IAAAD,iBAAA,GAAGD,OAAO,CAACE,QAAQ,cAAAD,iBAAA,uBAAhBA,iBAAA,CAAkBE,WAAW,CAAC,CAAC;EAChD,MAAMC,IAAI,GAAGJ,OAAO,CAACI,IAAI;EACzB,IAAI,CAACF,QAAQ,IAAI,CAACE,IAAI,EAAE;IACtB,OAAO,IAAI;EACb;EAEA,IAAIC,QAAQ;EAEZ,QAAQH,QAAQ;IACd,KAAK,uBAAuB;MAC1BG,QAAQ,GAAGC,0BAA0B,CAACF,IAAI,CAAC;MAC3C;IACF,KAAK,kBAAkB;MACrBC,QAAQ,GAAGE,qBAAqB,CAACH,IAAI,CAAC;MACtC;IACF,KAAK,qBAAqB;MACxBC,QAAQ,GAAGG,wBAAwB,CAACJ,IAAI,CAAC;MACzC;IACF,KAAK,gBAAgB;MACnBC,QAAQ,GAAGI,mBAAmB,CAACL,IAAI,CAAC;MACpC;IACF,KAAK,0BAA0B;MAC7BC,QAAQ,GAAGK,6BAA6B,CAACN,IAAI,CAAC;MAC9C;IACF,KAAK,qBAAqB;MACxBC,QAAQ,GAAGM,wBAAwB,CAACP,IAAI,CAAC;MACzC;IACF;MAAS;QACP,MAAMQ,KAAK,CAAE,mCAAkCV,QAAS,EAAC,CAAC;MAC5D;EACF;EACA,OAAO;IACLW,IAAI,EAAE,SAAS;IACfR,QAAQ;IACRS,UAAU,EAAE,CAAC;EACf,CAAC;AACH;AAKA,SAASR,0BAA0BA,CAACS,iBAA+B,EAAgB;EACjF,MAAMC,YAA4B,GAAG,EAAE;EACvC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,iBAAiB,CAACG,MAAM,EAAED,CAAC,EAAE,EAAE;IACjD,MAAME,YAAY,GAAGJ,iBAAiB,CAACK,GAAG,CAACH,CAAC,CAAC;IAC7C,MAAMI,OAAqB,GAAG,EAAE;IAChC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEH,YAAY,IAAIG,CAAC,IAAGH,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAED,MAAM,GAAEI,CAAC,EAAE,EAAE;MAC7D,MAAMC,SAAS,GAAGJ,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEC,GAAG,CAACE,CAAC,CAAC;MACtC,MAAME,IAAgB,GAAG,EAAE;MAC3B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEF,SAAS,IAAIE,CAAC,GAAGF,SAAS,CAACL,MAAM,EAAEO,CAAC,EAAE,EAAE;QACtD,MAAMC,UAAU,GAAGH,SAAS,CAACH,GAAG,CAACK,CAAC,CAAC;QACnC,MAAME,KAAe,GAAGC,KAAK,CAACC,IAAI,CAACH,UAAU,CAAC;QAC9CF,IAAI,CAACM,IAAI,CAACH,KAAK,CAAC;MAClB;MACAN,OAAO,CAACS,IAAI,CAACN,IAAI,CAAC;IACpB;IACAR,YAAY,CAACc,IAAI,CAACT,OAAO,CAAC;EAC5B;EACA,MAAMhB,QAAsB,GAAG;IAC7BQ,IAAI,EAAE,cAAc;IACpBkB,WAAW,EAAEf;EACf,CAAC;EACD,OAAOX,QAAQ;AACjB;AAKA,SAASE,qBAAqBA,CAACY,YAA0B,EAAW;EAClE,MAAME,OAAqB,GAAG,EAAE;EAChC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEH,YAAY,IAAIG,CAAC,GAAGH,YAAY,CAACD,MAAM,EAAEI,CAAC,EAAE,EAAE;IAC5D,MAAMC,SAAS,GAAGJ,YAAY,CAACC,GAAG,CAACE,CAAC,CAAC;IACrC,MAAME,IAAgB,GAAG,EAAE;IAC3B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEF,SAAS,IAAIE,CAAC,GAAGF,SAAS,CAACL,MAAM,EAAEO,CAAC,EAAE,EAAE;MACtD,MAAMC,UAAU,GAAGH,SAAS,CAACH,GAAG,CAACK,CAAC,CAAC;MACnC,MAAMO,MAAgB,GAAGJ,KAAK,CAACC,IAAI,CAACH,UAAU,CAAC;MAC/CF,IAAI,CAACM,IAAI,CAACE,MAAM,CAAC;IACnB;IACAX,OAAO,CAACS,IAAI,CAACN,IAAI,CAAC;EACpB;EACA,MAAMnB,QAAiB,GAAG;IACxBQ,IAAI,EAAE,SAAS;IACfkB,WAAW,EAAEV;EACf,CAAC;EACD,OAAOhB,QAAQ;AACjB;AAKA,SAASG,wBAAwBA,CAACyB,eAA6B,EAAc;EAC3E,MAAMC,UAAsB,GAAG,EAAE;EACjC,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEW,eAAe,IAAIX,CAAC,GAAGW,eAAe,CAACf,MAAM,EAAEI,CAAC,EAAE,EAAE;IAClE,MAAMa,UAAU,GAAGF,eAAe,CAACb,GAAG,CAACE,CAAC,CAAC;IACzC,IAAIa,UAAU,EAAE;MACd,MAAMR,KAAe,GAAGC,KAAK,CAACC,IAAI,CAACM,UAAU,CAAC;MAC9CD,UAAU,CAACJ,IAAI,CAACH,KAAK,CAAC;IACxB;EACF;EACA,MAAMtB,QAAoB,GAAG;IAC3BQ,IAAI,EAAE,YAAY;IAClBkB,WAAW,EAAEG;EACf,CAAC;EACD,OAAO7B,QAAQ;AACjB;AAKA,SAASI,mBAAmBA,CAAC0B,UAAwB,EAAS;EAC5D,MAAMC,KAAe,GAAGR,KAAK,CAACC,IAAI,CAACM,UAAU,CAAC;EAC9C,MAAM9B,QAAe,GAAG;IACtBQ,IAAI,EAAE,OAAO;IACbkB,WAAW,EAAEK;EACf,CAAC;EACD,OAAO/B,QAAQ;AACjB;AAKA,SAASK,6BAA6BA,CAAC2B,oBAAkC,EAAmB;EAC1F,MAAMC,eAA6B,GAAG,EAAE;EACxC,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEe,oBAAoB,IAAIf,CAAC,GAAGe,oBAAoB,CAACnB,MAAM,EAAEI,CAAC,EAAE,EAAE;IAC5E,MAAMiB,eAAe,GAAGF,oBAAoB,CAACjB,GAAG,CAACE,CAAC,CAAC;IACnD,MAAMkB,UAAsB,GAAG,EAAE;IACjC,KAAK,IAAIf,CAAC,GAAG,CAAC,EAAEc,eAAe,IAAId,CAAC,GAAGc,eAAe,CAACrB,MAAM,EAAEO,CAAC,EAAE,EAAE;MAClE,MAAMC,UAAU,GAAGa,eAAe,CAACnB,GAAG,CAACK,CAAC,CAAC;MACzC,IAAIC,UAAU,EAAE;QACd,MAAMM,MAAgB,GAAGJ,KAAK,CAACC,IAAI,CAACH,UAAU,CAAC;QAC/Cc,UAAU,CAACV,IAAI,CAACE,MAAM,CAAC;MACzB;IACF;IACAM,eAAe,CAACR,IAAI,CAACU,UAAU,CAAC;EAClC;EACA,MAAMnC,QAAyB,GAAG;IAChCQ,IAAI,EAAE,iBAAiB;IACvBkB,WAAW,EAAEO;EACf,CAAC;EACD,OAAOjC,QAAQ;AACjB;AAKA,SAASM,wBAAwBA,CAAC4B,eAA6B,EAAc;EAC3E,MAAMC,UAAsB,GAAG,EAAE;EACjC,KAAK,IAAIlB,CAAC,GAAG,CAAC,EAAEiB,eAAe,IAAIjB,CAAC,GAAGiB,eAAe,CAACrB,MAAM,EAAEI,CAAC,EAAE,EAAE;IAClE,MAAMI,UAAU,GAAGa,eAAe,CAACnB,GAAG,CAACE,CAAC,CAAC;IACzC,IAAII,UAAU,EAAE;MACd,MAAMM,MAAgB,GAAGJ,KAAK,CAACC,IAAI,CAACH,UAAU,CAAC;MAC/Cc,UAAU,CAACV,IAAI,CAACE,MAAM,CAAC;IACzB;EACF;EACA,MAAM3B,QAAoB,GAAG;IAC3BQ,IAAI,EAAE,YAAY;IAClBkB,WAAW,EAAES;EACf,CAAC;EACD,OAAOnC,QAAQ;AACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-arrow-bounds.d.ts","sourceRoot":"","sources":["../../src/geoarrow/get-arrow-bounds.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxC,UAAU,GAAE,MAAY,GACvB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"get-arrow-bounds.d.ts","sourceRoot":"","sources":["../../src/geoarrow/get-arrow-bounds.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxC,UAAU,GAAE,MAAY,GACvB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAsBlC"}
|
|
@@ -6,7 +6,7 @@ export function updateBoundsFromGeoArrowSamples(flatCoords, nDim, bounds) {
|
|
|
6
6
|
for (let i = 0; i < numberOfFeatures; i += sampleStep) {
|
|
7
7
|
const lng = flatCoords[i * nDim];
|
|
8
8
|
const lat = flatCoords[i * nDim + 1];
|
|
9
|
-
if (lng <
|
|
9
|
+
if (lng < newBounds[0]) {
|
|
10
10
|
newBounds[0] = lng;
|
|
11
11
|
}
|
|
12
12
|
if (lat < newBounds[1]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-arrow-bounds.js","names":["updateBoundsFromGeoArrowSamples","flatCoords","nDim","bounds","sampleSize","arguments","length","undefined","numberOfFeatures","sampleStep","Math","max","floor","newBounds","i","lng","lat"],"sources":["../../src/geoarrow/get-arrow-bounds.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n/**\n * Update bounds from geoarrow sample data\n *\n * @param flatCoords the flattend coordinates array from one chunk of geoarrow column\n * @param nDim the number of dimensions of the coordinates\n * @param bounds the bounds to be updated\n * @param sampleSize how many samples to be used to update the bounds, default is 1000 per chunk\n * @returns the updated bounds\n */\nexport function updateBoundsFromGeoArrowSamples(\n flatCoords: Float64Array,\n nDim: number,\n bounds: [number, number, number, number],\n sampleSize: number = 100\n): [number, number, number, number] {\n const numberOfFeatures = flatCoords.length / nDim;\n const sampleStep = Math.max(Math.floor(numberOfFeatures / sampleSize), 1);\n\n const newBounds: [number, number, number, number] = [...bounds];\n for (let i = 0; i < numberOfFeatures; i += sampleStep) {\n const lng = flatCoords[i * nDim];\n const lat = flatCoords[i * nDim + 1];\n if (lng <
|
|
1
|
+
{"version":3,"file":"get-arrow-bounds.js","names":["updateBoundsFromGeoArrowSamples","flatCoords","nDim","bounds","sampleSize","arguments","length","undefined","numberOfFeatures","sampleStep","Math","max","floor","newBounds","i","lng","lat"],"sources":["../../src/geoarrow/get-arrow-bounds.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n/**\n * Update bounds from geoarrow sample data\n *\n * @param flatCoords the flattend coordinates array from one chunk of geoarrow column\n * @param nDim the number of dimensions of the coordinates\n * @param bounds the bounds to be updated\n * @param sampleSize how many samples to be used to update the bounds, default is 1000 per chunk\n * @returns the updated bounds\n */\nexport function updateBoundsFromGeoArrowSamples(\n flatCoords: Float64Array,\n nDim: number,\n bounds: [number, number, number, number],\n sampleSize: number = 100\n): [number, number, number, number] {\n const numberOfFeatures = flatCoords.length / nDim;\n const sampleStep = Math.max(Math.floor(numberOfFeatures / sampleSize), 1);\n\n const newBounds: [number, number, number, number] = [...bounds];\n for (let i = 0; i < numberOfFeatures; i += sampleStep) {\n const lng = flatCoords[i * nDim];\n const lat = flatCoords[i * nDim + 1];\n if (lng < newBounds[0]) {\n newBounds[0] = lng;\n }\n if (lat < newBounds[1]) {\n newBounds[1] = lat;\n }\n if (lng > newBounds[2]) {\n newBounds[2] = lng;\n }\n if (lat > newBounds[3]) {\n newBounds[3] = lat;\n }\n }\n return newBounds;\n}\n"],"mappings":"AAYA,OAAO,SAASA,+BAA+BA,CAC7CC,UAAwB,EACxBC,IAAY,EACZC,MAAwC,EAEN;EAAA,IADlCC,UAAkB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,GAAG;EAExB,MAAMG,gBAAgB,GAAGP,UAAU,CAACK,MAAM,GAAGJ,IAAI;EACjD,MAAMO,UAAU,GAAGC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,KAAK,CAACJ,gBAAgB,GAAGJ,UAAU,CAAC,EAAE,CAAC,CAAC;EAEzE,MAAMS,SAA2C,GAAG,CAAC,GAAGV,MAAM,CAAC;EAC/D,KAAK,IAAIW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,gBAAgB,EAAEM,CAAC,IAAIL,UAAU,EAAE;IACrD,MAAMM,GAAG,GAAGd,UAAU,CAACa,CAAC,GAAGZ,IAAI,CAAC;IAChC,MAAMc,GAAG,GAAGf,UAAU,CAACa,CAAC,GAAGZ,IAAI,GAAG,CAAC,CAAC;IACpC,IAAIa,GAAG,GAAGF,SAAS,CAAC,CAAC,CAAC,EAAE;MACtBA,SAAS,CAAC,CAAC,CAAC,GAAGE,GAAG;IACpB;IACA,IAAIC,GAAG,GAAGH,SAAS,CAAC,CAAC,CAAC,EAAE;MACtBA,SAAS,CAAC,CAAC,CAAC,GAAGG,GAAG;IACpB;IACA,IAAID,GAAG,GAAGF,SAAS,CAAC,CAAC,CAAC,EAAE;MACtBA,SAAS,CAAC,CAAC,CAAC,GAAGE,GAAG;IACpB;IACA,IAAIC,GAAG,GAAGH,SAAS,CAAC,CAAC,CAAC,EAAE;MACtBA,SAAS,CAAC,CAAC,CAAC,GAAGG,GAAG;IACpB;EACF;EACA,OAAOH,SAAS;AAClB"}
|