@loaders.gl/arrow 4.0.0 → 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.
Files changed (82) hide show
  1. package/dist/arrow-loader.d.ts.map +1 -1
  2. package/dist/arrow-loader.js.map +1 -1
  3. package/dist/arrow-worker.js +34 -26
  4. package/dist/arrow-writer.d.ts.map +1 -1
  5. package/dist/arrow-writer.js +6 -3
  6. package/dist/arrow-writer.js.map +1 -1
  7. package/dist/dist.dev.js +658 -6
  8. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts +40 -0
  9. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts.map +1 -0
  10. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js +189 -0
  11. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js.map +1 -0
  12. package/dist/geoarrow/convert-geoarrow-to-geojson.d.ts +19 -0
  13. package/dist/geoarrow/convert-geoarrow-to-geojson.d.ts.map +1 -0
  14. package/dist/geoarrow/convert-geoarrow-to-geojson.js +138 -0
  15. package/dist/geoarrow/convert-geoarrow-to-geojson.js.map +1 -0
  16. package/dist/geoarrow/get-arrow-bounds.d.ts +11 -0
  17. package/dist/geoarrow/get-arrow-bounds.d.ts.map +1 -0
  18. package/dist/geoarrow/get-arrow-bounds.js +24 -0
  19. package/dist/geoarrow/get-arrow-bounds.js.map +1 -0
  20. package/dist/index.cjs +627 -32
  21. package/dist/index.d.ts +6 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +5 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/arrow-table-batch.d.ts +2 -2
  26. package/dist/lib/arrow-table-batch.d.ts.map +1 -1
  27. package/dist/lib/arrow-table-batch.js +7 -7
  28. package/dist/lib/arrow-table-batch.js.map +1 -1
  29. package/dist/lib/arrow-table.d.ts +3 -3
  30. package/dist/lib/arrow-table.d.ts.map +1 -1
  31. package/dist/lib/arrow-table.js.map +1 -1
  32. package/dist/lib/encode-arrow.js +5 -5
  33. package/dist/lib/encode-arrow.js.map +1 -1
  34. package/dist/lib/parse-arrow-in-batches.js +3 -3
  35. package/dist/lib/parse-arrow-in-batches.js.map +1 -1
  36. package/dist/lib/parse-arrow-sync.d.ts.map +1 -1
  37. package/dist/lib/parse-arrow-sync.js +3 -3
  38. package/dist/lib/parse-arrow-sync.js.map +1 -1
  39. package/dist/schema/arrow-type-utils.d.ts +3 -2
  40. package/dist/schema/arrow-type-utils.d.ts.map +1 -1
  41. package/dist/schema/arrow-type-utils.js +9 -9
  42. package/dist/schema/arrow-type-utils.js.map +1 -1
  43. package/dist/schema/convert-arrow-schema.d.ts +19 -0
  44. package/dist/schema/convert-arrow-schema.d.ts.map +1 -0
  45. package/dist/schema/convert-arrow-schema.js +232 -0
  46. package/dist/schema/convert-arrow-schema.js.map +1 -0
  47. package/dist/{lib/convert-table.d.ts → tables/convert-arrow-to-table.d.ts} +4 -4
  48. package/dist/tables/convert-arrow-to-table.d.ts.map +1 -0
  49. package/dist/{lib/convert-table.js → tables/convert-arrow-to-table.js} +1 -1
  50. package/dist/tables/convert-arrow-to-table.js.map +1 -0
  51. package/dist/{schema → tables}/convert-table-to-arrow.d.ts.map +1 -1
  52. package/dist/{schema → tables}/convert-table-to-arrow.js.map +1 -1
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js.map +1 -1
  55. package/dist/workers/arrow-worker.js.map +1 -1
  56. package/package.json +5 -4
  57. package/src/arrow-loader.ts +1 -0
  58. package/src/arrow-writer.ts +7 -3
  59. package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +260 -0
  60. package/src/geoarrow/convert-geoarrow-to-geojson.ts +192 -0
  61. package/src/geoarrow/get-arrow-bounds.ts +40 -0
  62. package/src/index.ts +33 -4
  63. package/src/lib/arrow-table-batch.ts +13 -23
  64. package/src/lib/arrow-table.ts +3 -3
  65. package/src/lib/encode-arrow.ts +8 -8
  66. package/src/lib/parse-arrow-in-batches.ts +4 -4
  67. package/src/lib/parse-arrow-sync.ts +6 -3
  68. package/src/schema/arrow-type-utils.ts +11 -29
  69. package/src/schema/convert-arrow-schema.ts +265 -0
  70. package/src/{lib/convert-table.ts → tables/convert-arrow-to-table.ts} +4 -3
  71. package/src/types.ts +3 -0
  72. package/src/workers/arrow-worker.ts +3 -0
  73. package/dist/lib/convert-table.d.ts.map +0 -1
  74. package/dist/lib/convert-table.js.map +0 -1
  75. package/dist/schema/convert-schema-arrow.d.ts +0 -13
  76. package/dist/schema/convert-schema-arrow.d.ts.map +0 -1
  77. package/dist/schema/convert-schema-arrow.js +0 -158
  78. package/dist/schema/convert-schema-arrow.js.map +0 -1
  79. package/src/schema/convert-schema-arrow.ts +0 -233
  80. /package/dist/{schema → tables}/convert-table-to-arrow.d.ts +0 -0
  81. /package/dist/{schema → tables}/convert-table-to-arrow.js +0 -0
  82. /package/src/{schema → tables}/convert-table-to-arrow.ts +0 -0
@@ -0,0 +1,40 @@
1
+ import * as arrow from 'apache-arrow';
2
+ import { BinaryFeatureCollection as BinaryFeatures } from '@loaders.gl/schema';
3
+ import { GeoArrowEncoding } from '@loaders.gl/gis';
4
+ /**
5
+ * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer
6
+ */
7
+ export type BinaryDataFromGeoArrow = {
8
+ binaryGeometries: BinaryFeatures[];
9
+ bounds: [number, number, number, number];
10
+ featureTypes: {
11
+ polygon: boolean;
12
+ point: boolean;
13
+ line: boolean;
14
+ };
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
+ };
32
+ /**
33
+ * get binary geometries from geoarrow column
34
+ *
35
+ * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)
36
+ * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)
37
+ * @returns BinaryDataFromGeoArrow
38
+ */
39
+ export declare function getBinaryGeometriesFromArrow(geoColumn: arrow.Vector, geoEncoding: GeoArrowEncoding): BinaryDataFromGeoArrow;
40
+ //# sourceMappingURL=convert-geoarrow-to-binary-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-geoarrow-to-binary-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;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"}
@@ -0,0 +1,189 @@
1
+ import { updateBoundsFromGeoArrowSamples } from "./get-arrow-bounds.js";
2
+ export const BINARY_GEOMETRY_TEMPLATE = {
3
+ globalFeatureIds: {
4
+ value: new Uint32Array(0),
5
+ size: 1
6
+ },
7
+ positions: {
8
+ value: new Float32Array(0),
9
+ size: 2
10
+ },
11
+ properties: [],
12
+ numericProps: {},
13
+ featureIds: {
14
+ value: new Uint32Array(0),
15
+ size: 1
16
+ }
17
+ };
18
+ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding) {
19
+ const featureTypes = {
20
+ polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',
21
+ point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',
22
+ line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'
23
+ };
24
+ const chunks = geoColumn.data;
25
+ let bounds = [Infinity, Infinity, -Infinity, -Infinity];
26
+ let globalFeatureIdOffset = 0;
27
+ const binaryGeometries = [];
28
+ chunks.forEach(chunk => {
29
+ const {
30
+ featureIds,
31
+ flatCoordinateArray,
32
+ nDim,
33
+ geomOffset
34
+ } = getBinaryGeometriesFromChunk(chunk, geoEncoding);
35
+ const numOfVertices = flatCoordinateArray.length / nDim;
36
+ const globalFeatureIds = new Uint32Array(numOfVertices);
37
+ for (let i = 0; i < numOfVertices; i++) {
38
+ globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;
39
+ }
40
+ const binaryContent = {
41
+ globalFeatureIds: {
42
+ value: globalFeatureIds,
43
+ size: 1
44
+ },
45
+ positions: {
46
+ value: flatCoordinateArray,
47
+ size: nDim
48
+ },
49
+ featureIds: {
50
+ value: featureIds,
51
+ size: 1
52
+ },
53
+ properties: [...Array(chunk.length).keys()].map(i => ({
54
+ index: i + globalFeatureIdOffset
55
+ }))
56
+ };
57
+ globalFeatureIdOffset += chunk.length;
58
+ binaryGeometries.push({
59
+ shape: 'binary-feature-collection',
60
+ points: {
61
+ type: 'Point',
62
+ ...BINARY_GEOMETRY_TEMPLATE,
63
+ ...(featureTypes.point ? binaryContent : {})
64
+ },
65
+ lines: {
66
+ type: 'LineString',
67
+ ...BINARY_GEOMETRY_TEMPLATE,
68
+ ...(featureTypes.line ? binaryContent : {}),
69
+ pathIndices: {
70
+ value: featureTypes.line ? geomOffset : new Uint16Array(0),
71
+ size: 1
72
+ }
73
+ },
74
+ polygons: {
75
+ type: 'Polygon',
76
+ ...BINARY_GEOMETRY_TEMPLATE,
77
+ ...(featureTypes.polygon ? binaryContent : {}),
78
+ polygonIndices: {
79
+ value: featureTypes.polygon ? geomOffset : new Uint16Array(0),
80
+ size: 1
81
+ },
82
+ primitivePolygonIndices: {
83
+ value: featureTypes.polygon ? geomOffset : new Uint16Array(0),
84
+ size: 1
85
+ }
86
+ }
87
+ });
88
+ bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);
89
+ });
90
+ return {
91
+ binaryGeometries,
92
+ bounds,
93
+ featureTypes
94
+ };
95
+ }
96
+ function getBinaryGeometriesFromChunk(chunk, geoEncoding) {
97
+ switch (geoEncoding) {
98
+ case 'geoarrow.point':
99
+ case 'geoarrow.multipoint':
100
+ return getBinaryPointsFromChunk(chunk, geoEncoding);
101
+ case 'geoarrow.linestring':
102
+ case 'geoarrow.multilinestring':
103
+ return getBinaryLinesFromChunk(chunk, geoEncoding);
104
+ case 'geoarrow.polygon':
105
+ case 'geoarrow.multipolygon':
106
+ return getBinaryPolygonsFromChunk(chunk, geoEncoding);
107
+ default:
108
+ throw Error('invalid geoarrow encoding');
109
+ }
110
+ }
111
+ function getBinaryPolygonsFromChunk(chunk, geoEncoding) {
112
+ const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';
113
+ const polygonData = isMultiPolygon ? chunk.children[0] : chunk;
114
+ const ringData = polygonData.children[0];
115
+ const pointData = ringData.children[0];
116
+ const coordData = pointData.children[0];
117
+ const nDim = pointData.stride;
118
+ const geomOffset = ringData.valueOffsets;
119
+ const flatCoordinateArray = coordData.values;
120
+ const geometryIndicies = new Uint16Array(chunk.length + 1);
121
+ for (let i = 0; i < chunk.length; i++) {
122
+ geometryIndicies[i] = geomOffset[chunk.valueOffsets[i]];
123
+ }
124
+ geometryIndicies[chunk.length] = flatCoordinateArray.length / nDim;
125
+ const numOfVertices = flatCoordinateArray.length / nDim;
126
+ const featureIds = new Uint32Array(numOfVertices);
127
+ for (let i = 0; i < chunk.length - 1; i++) {
128
+ const startIdx = geomOffset[chunk.valueOffsets[i]];
129
+ const endIdx = geomOffset[chunk.valueOffsets[i + 1]];
130
+ for (let j = startIdx; j < endIdx; j++) {
131
+ featureIds[j] = i;
132
+ }
133
+ }
134
+ return {
135
+ featureIds,
136
+ flatCoordinateArray,
137
+ nDim,
138
+ geomOffset,
139
+ geometryIndicies
140
+ };
141
+ }
142
+ function getBinaryLinesFromChunk(chunk, geoEncoding) {
143
+ const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';
144
+ const lineData = isMultiLineString ? chunk.children[0] : chunk;
145
+ const pointData = lineData.children[0];
146
+ const coordData = pointData.children[0];
147
+ const nDim = pointData.stride;
148
+ const geomOffset = lineData.valueOffsets;
149
+ const flatCoordinateArray = coordData.values;
150
+ const geometryIndicies = new Uint16Array(0);
151
+ const numOfVertices = flatCoordinateArray.length / nDim;
152
+ const featureIds = new Uint32Array(numOfVertices);
153
+ for (let i = 0; i < chunk.length; i++) {
154
+ const startIdx = geomOffset[i];
155
+ const endIdx = geomOffset[i + 1];
156
+ for (let j = startIdx; j < endIdx; j++) {
157
+ featureIds[j] = i;
158
+ }
159
+ }
160
+ return {
161
+ featureIds,
162
+ flatCoordinateArray,
163
+ nDim,
164
+ geomOffset,
165
+ geometryIndicies
166
+ };
167
+ }
168
+ function getBinaryPointsFromChunk(chunk, geoEncoding) {
169
+ const isMultiPoint = geoEncoding === 'geoarrow.multipoint';
170
+ const pointData = isMultiPoint ? chunk.children[0] : chunk;
171
+ const coordData = pointData.children[0];
172
+ const nDim = pointData.stride;
173
+ const flatCoordinateArray = coordData.values;
174
+ const geometryIndicies = new Uint16Array(0);
175
+ const geomOffset = new Int32Array(0);
176
+ const numOfVertices = flatCoordinateArray.length / nDim;
177
+ const featureIds = new Uint32Array(numOfVertices);
178
+ for (let i = 0; i < chunk.length; i++) {
179
+ featureIds[i] = i;
180
+ }
181
+ return {
182
+ featureIds,
183
+ flatCoordinateArray,
184
+ nDim,
185
+ geomOffset,
186
+ geometryIndicies
187
+ };
188
+ }
189
+ //# sourceMappingURL=convert-geoarrow-to-binary-geometry.js.map
@@ -0,0 +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","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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"}
@@ -0,0 +1,19 @@
1
+ import { Feature } from '@loaders.gl/schema';
2
+ import type { GeoArrowEncoding } from '@loaders.gl/gis';
3
+ type RawArrowFeature = {
4
+ encoding?: GeoArrowEncoding;
5
+ data: any;
6
+ };
7
+ /**
8
+ * parse geometry from arrow data that is returned from processArrowData()
9
+ * NOTE: this function could be duplicated with the binaryToFeature() in deck.gl,
10
+ * it is currently only used for picking because currently deck.gl returns only the index of the feature
11
+ * So the following functions could be deprecated once deck.gl returns the feature directly for binary geojson layer
12
+ *
13
+ * @param rawData the raw geometry data returned from processArrowData, which is an object with two properties: encoding and data
14
+ * @see processArrowData
15
+ * @returns Feature or null
16
+ */
17
+ export declare function parseGeometryFromArrow(rawData: RawArrowFeature): Feature | null;
18
+ export {};
19
+ //# sourceMappingURL=convert-geoarrow-to-geojson.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-geoarrow-to-geojson.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-geojson.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,OAAO,EAQR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEtD,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,GAAG,IAAI,CAqC/E"}
@@ -0,0 +1,138 @@
1
+ export function parseGeometryFromArrow(rawData) {
2
+ var _rawData$encoding;
3
+ const encoding = (_rawData$encoding = rawData.encoding) === null || _rawData$encoding === void 0 ? void 0 : _rawData$encoding.toLowerCase();
4
+ const data = rawData.data;
5
+ if (!encoding || !data) {
6
+ return null;
7
+ }
8
+ let geometry;
9
+ switch (encoding) {
10
+ case 'geoarrow.multipolygon':
11
+ geometry = arrowMultiPolygonToFeature(data);
12
+ break;
13
+ case 'geoarrow.polygon':
14
+ geometry = arrowPolygonToFeature(data);
15
+ break;
16
+ case 'geoarrow.multipoint':
17
+ geometry = arrowMultiPointToFeature(data);
18
+ break;
19
+ case 'geoarrow.point':
20
+ geometry = arrowPointToFeature(data);
21
+ break;
22
+ case 'geoarrow.multilinestring':
23
+ geometry = arrowMultiLineStringToFeature(data);
24
+ break;
25
+ case 'geoarrow.linestring':
26
+ geometry = arrowLineStringToFeature(data);
27
+ break;
28
+ default:
29
+ {
30
+ throw Error(`GeoArrow encoding not supported ${encoding}`);
31
+ }
32
+ }
33
+ return {
34
+ type: 'Feature',
35
+ geometry,
36
+ properties: {}
37
+ };
38
+ }
39
+ function arrowMultiPolygonToFeature(arrowMultiPolygon) {
40
+ const multiPolygon = [];
41
+ for (let m = 0; m < arrowMultiPolygon.length; m++) {
42
+ const arrowPolygon = arrowMultiPolygon.get(m);
43
+ const polygon = [];
44
+ for (let i = 0; arrowPolygon && i < (arrowPolygon === null || arrowPolygon === void 0 ? void 0 : arrowPolygon.length); i++) {
45
+ const arrowRing = arrowPolygon === null || arrowPolygon === void 0 ? void 0 : arrowPolygon.get(i);
46
+ const ring = [];
47
+ for (let j = 0; arrowRing && j < arrowRing.length; j++) {
48
+ const arrowCoord = arrowRing.get(j);
49
+ const coord = Array.from(arrowCoord);
50
+ ring.push(coord);
51
+ }
52
+ polygon.push(ring);
53
+ }
54
+ multiPolygon.push(polygon);
55
+ }
56
+ const geometry = {
57
+ type: 'MultiPolygon',
58
+ coordinates: multiPolygon
59
+ };
60
+ return geometry;
61
+ }
62
+ function arrowPolygonToFeature(arrowPolygon) {
63
+ const polygon = [];
64
+ for (let i = 0; arrowPolygon && i < arrowPolygon.length; i++) {
65
+ const arrowRing = arrowPolygon.get(i);
66
+ const ring = [];
67
+ for (let j = 0; arrowRing && j < arrowRing.length; j++) {
68
+ const arrowCoord = arrowRing.get(j);
69
+ const coords = Array.from(arrowCoord);
70
+ ring.push(coords);
71
+ }
72
+ polygon.push(ring);
73
+ }
74
+ const geometry = {
75
+ type: 'Polygon',
76
+ coordinates: polygon
77
+ };
78
+ return geometry;
79
+ }
80
+ function arrowMultiPointToFeature(arrowMultiPoint) {
81
+ const multiPoint = [];
82
+ for (let i = 0; arrowMultiPoint && i < arrowMultiPoint.length; i++) {
83
+ const arrowPoint = arrowMultiPoint.get(i);
84
+ if (arrowPoint) {
85
+ const coord = Array.from(arrowPoint);
86
+ multiPoint.push(coord);
87
+ }
88
+ }
89
+ const geometry = {
90
+ type: 'MultiPoint',
91
+ coordinates: multiPoint
92
+ };
93
+ return geometry;
94
+ }
95
+ function arrowPointToFeature(arrowPoint) {
96
+ const point = Array.from(arrowPoint);
97
+ const geometry = {
98
+ type: 'Point',
99
+ coordinates: point
100
+ };
101
+ return geometry;
102
+ }
103
+ function arrowMultiLineStringToFeature(arrowMultiLineString) {
104
+ const multiLineString = [];
105
+ for (let i = 0; arrowMultiLineString && i < arrowMultiLineString.length; i++) {
106
+ const arrowLineString = arrowMultiLineString.get(i);
107
+ const lineString = [];
108
+ for (let j = 0; arrowLineString && j < arrowLineString.length; j++) {
109
+ const arrowCoord = arrowLineString.get(j);
110
+ if (arrowCoord) {
111
+ const coords = Array.from(arrowCoord);
112
+ lineString.push(coords);
113
+ }
114
+ }
115
+ multiLineString.push(lineString);
116
+ }
117
+ const geometry = {
118
+ type: 'MultiLineString',
119
+ coordinates: multiLineString
120
+ };
121
+ return geometry;
122
+ }
123
+ function arrowLineStringToFeature(arrowLineString) {
124
+ const lineString = [];
125
+ for (let i = 0; arrowLineString && i < arrowLineString.length; i++) {
126
+ const arrowCoord = arrowLineString.get(i);
127
+ if (arrowCoord) {
128
+ const coords = Array.from(arrowCoord);
129
+ lineString.push(coords);
130
+ }
131
+ }
132
+ const geometry = {
133
+ type: 'LineString',
134
+ coordinates: lineString
135
+ };
136
+ return geometry;
137
+ }
138
+ //# sourceMappingURL=convert-geoarrow-to-geojson.js.map
@@ -0,0 +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 * 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":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Update bounds from geoarrow sample data
3
+ *
4
+ * @param flatCoords the flattend coordinates array from one chunk of geoarrow column
5
+ * @param nDim the number of dimensions of the coordinates
6
+ * @param bounds the bounds to be updated
7
+ * @param sampleSize how many samples to be used to update the bounds, default is 1000 per chunk
8
+ * @returns the updated bounds
9
+ */
10
+ export declare function updateBoundsFromGeoArrowSamples(flatCoords: Float64Array, nDim: number, bounds: [number, number, number, number], sampleSize?: number): [number, number, number, number];
11
+ //# sourceMappingURL=get-arrow-bounds.d.ts.map
@@ -0,0 +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,CAsBlC"}
@@ -0,0 +1,24 @@
1
+ export function updateBoundsFromGeoArrowSamples(flatCoords, nDim, bounds) {
2
+ let sampleSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 100;
3
+ const numberOfFeatures = flatCoords.length / nDim;
4
+ const sampleStep = Math.max(Math.floor(numberOfFeatures / sampleSize), 1);
5
+ const newBounds = [...bounds];
6
+ for (let i = 0; i < numberOfFeatures; i += sampleStep) {
7
+ const lng = flatCoords[i * nDim];
8
+ const lat = flatCoords[i * nDim + 1];
9
+ if (lng < newBounds[0]) {
10
+ newBounds[0] = lng;
11
+ }
12
+ if (lat < newBounds[1]) {
13
+ newBounds[1] = lat;
14
+ }
15
+ if (lng > newBounds[2]) {
16
+ newBounds[2] = lng;
17
+ }
18
+ if (lat > newBounds[3]) {
19
+ newBounds[3] = lat;
20
+ }
21
+ }
22
+ return newBounds;
23
+ }
24
+ //# sourceMappingURL=get-arrow-bounds.js.map
@@ -0,0 +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 < 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"}