@loaders.gl/arrow 4.0.4 → 4.1.0-alpha.10

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 (109) hide show
  1. package/dist/arrow-loader.d.ts +1 -0
  2. package/dist/arrow-loader.d.ts.map +1 -1
  3. package/dist/arrow-loader.js +1 -1
  4. package/dist/arrow-loader.js.map +1 -1
  5. package/dist/arrow-worker.js +241 -3
  6. package/dist/arrow-writer.js +1 -1
  7. package/dist/arrow-writer.js.map +1 -1
  8. package/dist/dist.dev.js +1496 -641
  9. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts +8 -4
  10. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts.map +1 -1
  11. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js +75 -54
  12. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js.map +1 -1
  13. package/dist/geoarrow/convert-geoarrow-to-geojson-geometry.d.ts +13 -0
  14. package/dist/geoarrow/convert-geoarrow-to-geojson-geometry.d.ts.map +1 -0
  15. package/dist/geoarrow/{convert-geoarrow-to-geojson.js → convert-geoarrow-to-geojson-geometry.js} +34 -27
  16. package/dist/geoarrow/convert-geoarrow-to-geojson-geometry.js.map +1 -0
  17. package/dist/geoarrow/get-arrow-bounds.d.ts.map +1 -1
  18. package/dist/geoarrow/get-arrow-bounds.js.map +1 -1
  19. package/dist/geoarrow-loader.d.ts.map +1 -1
  20. package/dist/geoarrow-loader.js +0 -1
  21. package/dist/geoarrow-loader.js.map +1 -1
  22. package/dist/geoarrow-writer.js +1 -1
  23. package/dist/geoarrow-writer.js.map +1 -1
  24. package/dist/index.cjs +436 -347
  25. package/dist/index.d.ts +5 -3
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +4 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/lib/arrow-table-batch.d.ts.map +1 -1
  30. package/dist/lib/arrow-table-batch.js.map +1 -1
  31. package/dist/lib/arrow-table.d.ts.map +1 -1
  32. package/dist/lib/arrow-table.js.map +1 -1
  33. package/dist/lib/encode-arrow.d.ts.map +1 -1
  34. package/dist/lib/encode-arrow.js.map +1 -1
  35. package/dist/lib/encode-geoarrow.d.ts.map +1 -1
  36. package/dist/lib/encode-geoarrow.js.map +1 -1
  37. package/dist/parsers/parse-arrow-in-batches.d.ts +2 -1
  38. package/dist/parsers/parse-arrow-in-batches.d.ts.map +1 -1
  39. package/dist/parsers/parse-arrow-in-batches.js +8 -1
  40. package/dist/parsers/parse-arrow-in-batches.js.map +1 -1
  41. package/dist/parsers/parse-arrow-sync.d.ts.map +1 -1
  42. package/dist/parsers/parse-arrow-sync.js +2 -0
  43. package/dist/parsers/parse-arrow-sync.js.map +1 -1
  44. package/dist/parsers/parse-geoarrow-in-batches.d.ts.map +1 -1
  45. package/dist/parsers/parse-geoarrow-in-batches.js.map +1 -1
  46. package/dist/parsers/parse-geoarrow-sync.d.ts.map +1 -1
  47. package/dist/parsers/parse-geoarrow-sync.js.map +1 -1
  48. package/dist/schema/arrow-type-utils.d.ts.map +1 -1
  49. package/dist/schema/arrow-type-utils.js.map +1 -1
  50. package/dist/schema/convert-arrow-schema.d.ts.map +1 -1
  51. package/dist/schema/convert-arrow-schema.js.map +1 -1
  52. package/dist/tables/convert-arrow-to-columnar-table.d.ts.map +1 -1
  53. package/dist/tables/convert-arrow-to-columnar-table.js +1 -0
  54. package/dist/tables/convert-arrow-to-columnar-table.js.map +1 -1
  55. package/dist/tables/convert-arrow-to-geojson-table.d.ts +1 -1
  56. package/dist/tables/convert-arrow-to-geojson-table.d.ts.map +1 -1
  57. package/dist/tables/convert-arrow-to-geojson-table.js +14 -8
  58. package/dist/tables/convert-arrow-to-geojson-table.js.map +1 -1
  59. package/dist/tables/convert-columnar-to-row-table.d.ts.map +1 -1
  60. package/dist/tables/convert-columnar-to-row-table.js +1 -0
  61. package/dist/tables/convert-columnar-to-row-table.js.map +1 -1
  62. package/dist/tables/convert-table-to-arrow.d.ts.map +1 -1
  63. package/dist/tables/convert-table-to-arrow.js.map +1 -1
  64. package/dist/triangulate-on-worker.d.ts +40 -6
  65. package/dist/triangulate-on-worker.d.ts.map +1 -1
  66. package/dist/triangulate-on-worker.js +12 -2
  67. package/dist/triangulate-on-worker.js.map +1 -1
  68. package/dist/triangulation-worker.js +11703 -34
  69. package/dist/types.d.ts.map +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/workers/arrow-worker.js.map +1 -1
  72. package/dist/workers/hard-clone.d.ts +23 -0
  73. package/dist/workers/hard-clone.d.ts.map +1 -0
  74. package/dist/workers/hard-clone.js +57 -0
  75. package/dist/workers/hard-clone.js.map +1 -0
  76. package/dist/workers/triangulation-worker-node.d.ts.map +1 -1
  77. package/dist/workers/triangulation-worker-node.js.map +1 -1
  78. package/dist/workers/triangulation-worker.js +37 -2
  79. package/dist/workers/triangulation-worker.js.map +1 -1
  80. package/package.json +18 -12
  81. package/src/arrow-loader.ts +3 -1
  82. package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +105 -62
  83. package/src/geoarrow/{convert-geoarrow-to-geojson.ts → convert-geoarrow-to-geojson-geometry.ts} +58 -47
  84. package/src/geoarrow/get-arrow-bounds.ts +2 -1
  85. package/src/geoarrow-loader.ts +2 -5
  86. package/src/index.ts +11 -4
  87. package/src/lib/arrow-table-batch.ts +2 -1
  88. package/src/lib/arrow-table.ts +2 -1
  89. package/src/lib/encode-arrow.ts +2 -1
  90. package/src/lib/encode-geoarrow.ts +2 -1
  91. package/src/parsers/parse-arrow-in-batches.ts +9 -2
  92. package/src/parsers/parse-arrow-sync.ts +8 -2
  93. package/src/parsers/parse-geoarrow-in-batches.ts +2 -1
  94. package/src/parsers/parse-geoarrow-sync.ts +2 -1
  95. package/src/schema/arrow-type-utils.ts +2 -1
  96. package/src/schema/convert-arrow-schema.ts +2 -1
  97. package/src/tables/convert-arrow-to-columnar-table.ts +3 -1
  98. package/src/tables/convert-arrow-to-geojson-table.ts +20 -8
  99. package/src/tables/convert-columnar-to-row-table.ts +3 -1
  100. package/src/tables/convert-table-to-arrow.ts +2 -1
  101. package/src/triangulate-on-worker.ts +53 -9
  102. package/src/types.ts +2 -1
  103. package/src/workers/arrow-worker.ts +2 -1
  104. package/src/workers/hard-clone.ts +162 -0
  105. package/src/workers/triangulation-worker-node.ts +2 -1
  106. package/src/workers/triangulation-worker.ts +59 -4
  107. package/dist/geoarrow/convert-geoarrow-to-geojson.d.ts +0 -20
  108. package/dist/geoarrow/convert-geoarrow-to-geojson.d.ts.map +0 -1
  109. package/dist/geoarrow/convert-geoarrow-to-geojson.js.map +0 -1
@@ -21,7 +21,7 @@ export type BinaryDataFromGeoArrow = {
21
21
  /**
22
22
  * binary geometry template, see deck.gl BinaryGeometry
23
23
  */
24
- export declare const BINARY_GEOMETRY_TEMPLATE: {
24
+ export declare function getBinaryGeometryTemplate(): {
25
25
  globalFeatureIds: {
26
26
  value: Uint32Array;
27
27
  size: number;
@@ -40,8 +40,12 @@ export declare const BINARY_GEOMETRY_TEMPLATE: {
40
40
  export type BinaryGeometriesFromArrowOptions = {
41
41
  /** option to specify which chunk to get binary geometries from, for progressive rendering */
42
42
  chunkIndex?: number;
43
+ /** The offset (beginning index of rows) of input chunk. Used for reconstructing globalFeatureIds in web workers */
44
+ chunkOffset?: number;
43
45
  /** option to get mean centers from geometries, for polygon filtering */
44
- meanCenter?: boolean;
46
+ calculateMeanCenters?: boolean;
47
+ /** option to compute the triangle indices by tesselating polygons */
48
+ triangulate?: boolean;
45
49
  };
46
50
  /**
47
51
  * get binary geometries from geoarrow column
@@ -64,7 +68,7 @@ export declare function getMeanCentersFromBinaryGeometries(binaryGeometries: Bin
64
68
  * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring
65
69
  * @param flatCoordinateArray Array of x, y or x, y, z positions
66
70
  * @param nDim - number of dimensions per position
67
- * @returns
71
+ * @returns triangle indices or null if invalid polygon and earcut fails
68
72
  */
69
- export declare function getTriangleIndices(polygonIndices: Uint16Array, primitivePolygonIndices: Int32Array, flatCoordinateArray: Float64Array, nDim: number): Uint32Array;
73
+ export declare function getTriangleIndices(polygonIndices: Uint16Array, primitivePolygonIndices: Int32Array, flatCoordinateArray: Float64Array, nDim: number): Uint32Array | null;
70
74
  //# sourceMappingURL=convert-geoarrow-to-binary-geometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convert-geoarrow-to-binary-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAC,uBAAuB,IAAI,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAIjD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,oEAAoE;IACpE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,wCAAwC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,6CAA6C;IAC7C,YAAY,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC;IAChE,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAsBF;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;CAMpC,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,KAAK,CAAC,MAAM,EACvB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,CAAC,EAAE,gCAAgC,GACzC,sBAAsB,CA6ExB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,EAAE,CAgCjG;AAsED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,WAAW,EAC3B,uBAAuB,EAAE,UAAU,EACnC,mBAAmB,EAAE,YAAY,EACjC,IAAI,EAAE,MAAM,GACX,WAAW,CAgCb"}
1
+ {"version":3,"file":"convert-geoarrow-to-binary-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAC,uBAAuB,IAAI,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAajD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,oEAAoE;IACpE,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,wCAAwC;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,6CAA6C;IAC7C,YAAY,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC;IAChE,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;CAC1B,CAAC;AAsBF;;GAEG;AACH,wBAAgB,yBAAyB;;;;;;;;;;;;;;;EAQxC;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC7C,6FAA6F;IAC7F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mHAAmH;IACnH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,KAAK,CAAC,MAAM,EACvB,WAAW,EAAE,gBAAgB,EAC7B,OAAO,CAAC,EAAE,gCAAgC,GACzC,sBAAsB,CAiFxB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,EAAE,CAiCjG;AA2ED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,WAAW,EAC3B,uBAAuB,EAAE,UAAU,EACnC,mBAAmB,EAAE,YAAY,EACjC,IAAI,EAAE,MAAM,GACX,WAAW,GAAG,IAAI,CAyCpB"}
@@ -1,30 +1,38 @@
1
1
  import { earcut } from '@math.gl/polygon';
2
2
  import { updateBoundsFromGeoArrowSamples } from "./get-arrow-bounds.js";
3
- export const BINARY_GEOMETRY_TEMPLATE = {
4
- globalFeatureIds: {
5
- value: new Uint32Array(0),
6
- size: 1
7
- },
8
- positions: {
9
- value: new Float32Array(0),
10
- size: 2
11
- },
12
- properties: [],
13
- numericProps: {},
14
- featureIds: {
15
- value: new Uint32Array(0),
16
- size: 1
17
- }
18
- };
3
+ var BinaryGeometryType = function (BinaryGeometryType) {
4
+ BinaryGeometryType["points"] = "points";
5
+ BinaryGeometryType["lines"] = "lines";
6
+ BinaryGeometryType["polygons"] = "polygons";
7
+ return BinaryGeometryType;
8
+ }(BinaryGeometryType || {});
9
+ export function getBinaryGeometryTemplate() {
10
+ return {
11
+ globalFeatureIds: {
12
+ value: new Uint32Array(0),
13
+ size: 1
14
+ },
15
+ positions: {
16
+ value: new Float32Array(0),
17
+ size: 2
18
+ },
19
+ properties: [],
20
+ numericProps: {},
21
+ featureIds: {
22
+ value: new Uint32Array(0),
23
+ size: 1
24
+ }
25
+ };
26
+ }
19
27
  export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
20
28
  const featureTypes = {
21
29
  polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',
22
30
  point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',
23
31
  line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'
24
32
  };
25
- const chunks = options !== null && options !== void 0 && options.chunkIndex ? [geoColumn.data[options === null || options === void 0 ? void 0 : options.chunkIndex]] : geoColumn.data;
33
+ const chunks = (options === null || options === void 0 ? void 0 : options.chunkIndex) !== undefined && (options === null || options === void 0 ? void 0 : options.chunkIndex) >= 0 ? [geoColumn.data[options === null || options === void 0 ? void 0 : options.chunkIndex]] : geoColumn.data;
26
34
  let bounds = [Infinity, Infinity, -Infinity, -Infinity];
27
- let globalFeatureIdOffset = 0;
35
+ let globalFeatureIdOffset = (options === null || options === void 0 ? void 0 : options.chunkOffset) || 0;
28
36
  const binaryGeometries = [];
29
37
  chunks.forEach(chunk => {
30
38
  const {
@@ -33,7 +41,7 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
33
41
  nDim,
34
42
  geomOffset,
35
43
  triangles
36
- } = getBinaryGeometriesFromChunk(chunk, geoEncoding);
44
+ } = getBinaryGeometriesFromChunk(chunk, geoEncoding, options);
37
45
  const globalFeatureIds = new Uint32Array(featureIds.length);
38
46
  for (let i = 0; i < featureIds.length; i++) {
39
47
  globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;
@@ -60,12 +68,12 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
60
68
  shape: 'binary-feature-collection',
61
69
  points: {
62
70
  type: 'Point',
63
- ...BINARY_GEOMETRY_TEMPLATE,
71
+ ...getBinaryGeometryTemplate(),
64
72
  ...(featureTypes.point ? binaryContent : {})
65
73
  },
66
74
  lines: {
67
75
  type: 'LineString',
68
- ...BINARY_GEOMETRY_TEMPLATE,
76
+ ...getBinaryGeometryTemplate(),
69
77
  ...(featureTypes.line ? binaryContent : {}),
70
78
  pathIndices: {
71
79
  value: featureTypes.line ? geomOffset : new Uint16Array(0),
@@ -74,7 +82,7 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
74
82
  },
75
83
  polygons: {
76
84
  type: 'Polygon',
77
- ...BINARY_GEOMETRY_TEMPLATE,
85
+ ...getBinaryGeometryTemplate(),
78
86
  ...(featureTypes.polygon ? binaryContent : {}),
79
87
  polygonIndices: {
80
88
  value: featureTypes.polygon ? geomOffset : new Uint16Array(0),
@@ -98,7 +106,7 @@ export function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
98
106
  binaryGeometries,
99
107
  bounds,
100
108
  featureTypes,
101
- ...(options !== null && options !== void 0 && options.meanCenter ? {
109
+ ...(options !== null && options !== void 0 && options.calculateMeanCenters ? {
102
110
  meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)
103
111
  } : {})
104
112
  };
@@ -108,11 +116,11 @@ export function getMeanCentersFromBinaryGeometries(binaryGeometries) {
108
116
  binaryGeometries.forEach(binaryGeometry => {
109
117
  let binaryGeometryType = null;
110
118
  if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {
111
- binaryGeometryType = 'points';
119
+ binaryGeometryType = BinaryGeometryType.points;
112
120
  } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {
113
- binaryGeometryType = 'lines';
121
+ binaryGeometryType = BinaryGeometryType.lines;
114
122
  } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {
115
- binaryGeometryType = 'polygons';
123
+ binaryGeometryType = BinaryGeometryType.polygons;
116
124
  }
117
125
  const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;
118
126
  if (binaryContent && binaryGeometryType !== null) {
@@ -120,7 +128,7 @@ export function getMeanCentersFromBinaryGeometries(binaryGeometries) {
120
128
  const featureIds = binaryContent.featureIds.value;
121
129
  const flatCoordinateArray = binaryContent.positions.value;
122
130
  const nDim = binaryContent.positions.size;
123
- const primitivePolygonIndices = (_binaryContent$primit = binaryContent.primitivePolygonIndices) === null || _binaryContent$primit === void 0 ? void 0 : _binaryContent$primit.value;
131
+ const primitivePolygonIndices = binaryContent.type === 'Polygon' ? (_binaryContent$primit = binaryContent.primitivePolygonIndices) === null || _binaryContent$primit === void 0 ? void 0 : _binaryContent$primit.value : undefined;
124
132
  const meanCenters = getMeanCentersFromGeometry(featureIds, flatCoordinateArray, nDim, binaryGeometryType, primitivePolygonIndices);
125
133
  meanCenters.forEach(center => {
126
134
  globalMeanCenters.push(center);
@@ -133,19 +141,23 @@ function getMeanCentersFromGeometry(featureIds, flatCoordinateArray, nDim, geome
133
141
  const meanCenters = [];
134
142
  const vertexCount = flatCoordinateArray.length;
135
143
  let vertexIndex = 0;
144
+ let coordIdx = 0;
145
+ let primitiveIdx = 0;
136
146
  while (vertexIndex < vertexCount) {
137
147
  const featureId = featureIds[vertexIndex / nDim];
138
148
  const center = [0, 0];
139
149
  let vertexCountInFeature = 0;
140
- while (vertexIndex < vertexCount && featureIds[vertexIndex / nDim] === featureId) {
141
- if (geometryType === 'polygons' && primitivePolygonIndices && primitivePolygonIndices.indexOf(vertexIndex / nDim) >= 0) {
150
+ while (vertexIndex < vertexCount && featureIds[coordIdx] === featureId) {
151
+ if (geometryType === BinaryGeometryType.polygons && (primitivePolygonIndices === null || primitivePolygonIndices === void 0 ? void 0 : primitivePolygonIndices[primitiveIdx]) === coordIdx) {
142
152
  vertexIndex += nDim;
153
+ primitiveIdx++;
143
154
  } else {
144
155
  center[0] += flatCoordinateArray[vertexIndex];
145
156
  center[1] += flatCoordinateArray[vertexIndex + 1];
146
157
  vertexIndex += nDim;
147
158
  vertexCountInFeature++;
148
159
  }
160
+ coordIdx += 1;
149
161
  }
150
162
  center[0] /= vertexCountInFeature;
151
163
  center[1] /= vertexCountInFeature;
@@ -153,7 +165,7 @@ function getMeanCentersFromGeometry(featureIds, flatCoordinateArray, nDim, geome
153
165
  }
154
166
  return meanCenters;
155
167
  }
156
- function getBinaryGeometriesFromChunk(chunk, geoEncoding) {
168
+ function getBinaryGeometriesFromChunk(chunk, geoEncoding, options) {
157
169
  switch (geoEncoding) {
158
170
  case 'geoarrow.point':
159
171
  case 'geoarrow.multipoint':
@@ -163,37 +175,44 @@ function getBinaryGeometriesFromChunk(chunk, geoEncoding) {
163
175
  return getBinaryLinesFromChunk(chunk, geoEncoding);
164
176
  case 'geoarrow.polygon':
165
177
  case 'geoarrow.multipolygon':
166
- return getBinaryPolygonsFromChunk(chunk, geoEncoding);
178
+ return getBinaryPolygonsFromChunk(chunk, geoEncoding, options);
167
179
  default:
168
180
  throw Error('invalid geoarrow encoding');
169
181
  }
170
182
  }
171
183
  export function getTriangleIndices(polygonIndices, primitivePolygonIndices, flatCoordinateArray, nDim) {
172
- let primitiveIndex = 0;
173
- const triangles = [];
174
- for (let i = 0; i < polygonIndices.length - 1; i++) {
175
- const startIdx = polygonIndices[i];
176
- const endIdx = polygonIndices[i + 1];
177
- const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);
178
- const holeIndices = [];
179
- while (primitivePolygonIndices[primitiveIndex] < endIdx) {
180
- if (primitivePolygonIndices[primitiveIndex] > startIdx) {
181
- holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);
184
+ try {
185
+ let primitiveIndex = 0;
186
+ const triangles = [];
187
+ for (let i = 0; i < polygonIndices.length - 1; i++) {
188
+ const startIdx = polygonIndices[i];
189
+ const endIdx = polygonIndices[i + 1];
190
+ const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);
191
+ const holeIndices = [];
192
+ while (primitivePolygonIndices[primitiveIndex] < endIdx) {
193
+ if (primitivePolygonIndices[primitiveIndex] > startIdx) {
194
+ holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);
195
+ }
196
+ primitiveIndex++;
197
+ }
198
+ const triangleIndices = earcut(slicedFlatCoords, holeIndices.length > 0 ? holeIndices : undefined, nDim);
199
+ if (triangleIndices.length === 0) {
200
+ throw Error('earcut failed e.g. invalid polygon');
201
+ }
202
+ for (let j = 0; j < triangleIndices.length; j++) {
203
+ triangles.push(triangleIndices[j] + startIdx);
182
204
  }
183
- primitiveIndex++;
184
205
  }
185
- const triangleIndices = earcut(slicedFlatCoords, holeIndices.length > 0 ? holeIndices : undefined, nDim);
186
- for (let j = 0; j < triangleIndices.length; j++) {
187
- triangles.push(triangleIndices[j] + startIdx);
206
+ const trianglesUint32 = new Uint32Array(triangles.length);
207
+ for (let i = 0; i < triangles.length; i++) {
208
+ trianglesUint32[i] = triangles[i];
188
209
  }
210
+ return trianglesUint32;
211
+ } catch (error) {
212
+ return null;
189
213
  }
190
- const trianglesUint32 = new Uint32Array(triangles.length);
191
- for (let i = 0; i < triangles.length; i++) {
192
- trianglesUint32[i] = triangles[i];
193
- }
194
- return trianglesUint32;
195
214
  }
196
- function getBinaryPolygonsFromChunk(chunk, geoEncoding) {
215
+ function getBinaryPolygonsFromChunk(chunk, geoEncoding, options) {
197
216
  const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';
198
217
  const polygonData = isMultiPolygon ? chunk.children[0] : chunk;
199
218
  const polygonOffset = polygonData.valueOffsets;
@@ -217,14 +236,16 @@ function getBinaryPolygonsFromChunk(chunk, geoEncoding) {
217
236
  featureIds[j] = i;
218
237
  }
219
238
  }
220
- const triangles = getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim);
239
+ const triangles = options !== null && options !== void 0 && options.triangulate ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim) : null;
221
240
  return {
222
241
  featureIds,
223
- flatCoordinateArray,
224
242
  nDim,
243
+ flatCoordinateArray,
225
244
  geomOffset,
226
245
  geometryIndicies,
227
- triangles
246
+ ...(options !== null && options !== void 0 && options.triangulate && triangles ? {
247
+ triangles
248
+ } : {})
228
249
  };
229
250
  }
230
251
  function getBinaryLinesFromChunk(chunk, geoEncoding) {
@@ -1 +1 @@
1
- {"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BINARY_GEOMETRY_TEMPLATE","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","data","bounds","Infinity","globalFeatureIdOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","meanCenter","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","featureId","vertexCountInFeature","indexOf","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","undefined","j","trianglesUint32","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {earcut} from '@math.gl/polygon';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\nimport {TypedArray} from '@loaders.gl/loader-utils';\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n /** Binary format geometries, an array of BinaryFeatureCollection */\n binaryGeometries: BinaryFeatures[];\n /** Boundary of the binary geometries */\n bounds: [number, number, number, number];\n /** Feature types of the binary geometries */\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n /** (Optional) mean centers of the binary geometries for e.g. polygon filtering */\n meanCenters?: number[][];\n};\n\n/**\n * Binary geometry content returned from getBinaryGeometriesFromChunk\n */\ntype BinaryGeometryContent = {\n // Array of Point feature indexes by vertex\n featureIds: Uint32Array;\n /** Flat coordinate array of e.g. x, y or x,y,z */\n flatCoordinateArray: Float64Array;\n /** Dimention of each position */\n nDim: number;\n /** Array of geometry offsets: the start index of primitive geometry */\n geomOffset: Int32Array;\n /** Array of geometry indicies: the start index of each geometry */\n geometryIndicies: Uint16Array;\n /** (Optional) indices of triangels returned from polygon tessellation (Polygon only) */\n triangles?: Uint32Array;\n /** (Optional) array of mean center of each geometry */\n meanCenters?: Float64Array;\n};\n\n/**\n * binary geometry template, see deck.gl BinaryGeometry\n */\nexport const BINARY_GEOMETRY_TEMPLATE = {\n globalFeatureIds: {value: new Uint32Array(0), size: 1},\n positions: {value: new Float32Array(0), size: 2},\n properties: [],\n numericProps: {},\n featureIds: {value: new Uint32Array(0), size: 1}\n};\n\nexport type BinaryGeometriesFromArrowOptions = {\n /** option to specify which chunk to get binary geometries from, for progressive rendering */\n chunkIndex?: number;\n /** option to get mean centers from geometries, for polygon filtering */\n meanCenter?: boolean;\n};\n\n/**\n * get binary geometries from geoarrow column\n *\n * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)\n * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)\n * @param options options for getting binary geometries {meanCenter: boolean}\n * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryDataFromGeoArrow {\n const featureTypes = {\n polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',\n point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',\n line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'\n };\n\n const chunks = options?.chunkIndex ? [geoColumn.data[options?.chunkIndex]] : geoColumn.data;\n let bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n chunks.forEach((chunk) => {\n const {featureIds, flatCoordinateArray, nDim, geomOffset, triangles} =\n getBinaryGeometriesFromChunk(chunk, geoEncoding);\n\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\n }\n\n const binaryContent = {\n globalFeatureIds: {value: globalFeatureIds, size: 1},\n positions: {\n value: flatCoordinateArray,\n size: nDim\n },\n featureIds: {value: featureIds, size: 1},\n properties: [...Array(chunk.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatures structure must have points, lines, polygons even if they are empty\n binaryGeometries.push({\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.point ? binaryContent : {})\n },\n lines: {\n type: 'LineString',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.line ? binaryContent : {}),\n pathIndices: {value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1}\n },\n polygons: {\n type: 'Polygon',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.polygon ? binaryContent : {}),\n polygonIndices: {\n // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n primitivePolygonIndices: {\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n ...(triangles ? {triangles: {value: triangles, size: 1}} : {})\n }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.meanCenter\n ? {meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)}\n : {})\n };\n}\n\n/**\n * Get mean centers from binary geometries\n * @param binaryGeometries binary geometries from geoarrow column, an array of BinaryFeatureCollection\n * @returns mean centers of the binary geometries\n */\nexport function getMeanCentersFromBinaryGeometries(binaryGeometries: BinaryFeatures[]): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatures) => {\n let binaryGeometryType: string | null = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = 'points';\n } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = 'lines';\n } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = 'polygons';\n }\n\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices = binaryContent.primitivePolygonIndices?.value;\n\n const meanCenters = getMeanCentersFromGeometry(\n featureIds,\n flatCoordinateArray,\n nDim,\n binaryGeometryType,\n primitivePolygonIndices\n );\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\n}\n\n/**\n * Get mean centers from raw coordinates and feature ids\n * @param featureIds Array of feature ids indexes by vertex\n * @param flatCoordinateArray Array of vertex, e.g. x, y or x, y, z, positions\n * @param nDim number of dimensions per position\n * @returns - mean centers of each polygon\n */\nfunction getMeanCentersFromGeometry(\n featureIds: TypedArray,\n flatCoordinateArray: TypedArray,\n nDim: number,\n geometryType: string,\n primitivePolygonIndices?: TypedArray\n) {\n const meanCenters: number[][] = [];\n const vertexCount = flatCoordinateArray.length;\n let vertexIndex = 0;\n while (vertexIndex < vertexCount) {\n const featureId = featureIds[vertexIndex / nDim];\n const center = [0, 0];\n let vertexCountInFeature = 0;\n while (vertexIndex < vertexCount && featureIds[vertexIndex / nDim] === featureId) {\n if (\n geometryType === 'polygons' &&\n primitivePolygonIndices &&\n primitivePolygonIndices.indexOf(vertexIndex / nDim) >= 0\n ) {\n // skip the first point since it is the same as the last point in each ring for polygons\n vertexIndex += nDim;\n } else {\n center[0] += flatCoordinateArray[vertexIndex];\n center[1] += flatCoordinateArray[vertexIndex + 1];\n vertexIndex += nDim;\n vertexCountInFeature++;\n }\n }\n center[0] /= vertexCountInFeature;\n center[1] /= vertexCountInFeature;\n meanCenters.push(center);\n }\n return meanCenters;\n}\n\n/**\n * get binary geometries from geoarrow column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @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 triangle indices. Allows deck.gl to skip performing costly triangulation on main thread.\n * @param polygonIndices Indices within positions of the start of each simple Polygon\n * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring\n * @param flatCoordinateArray Array of x, y or x, y, z positions\n * @param nDim - number of dimensions per position\n * @returns\n */\nexport function getTriangleIndices(\n polygonIndices: Uint16Array,\n primitivePolygonIndices: Int32Array,\n flatCoordinateArray: Float64Array,\n nDim: number\n): Uint32Array {\n let primitiveIndex = 0;\n const triangles: number[] = [];\n // loop polygonIndices to get triangles\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startIdx = polygonIndices[i];\n const endIdx = polygonIndices[i + 1];\n // get subarray of flatCoordinateArray\n const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);\n // get holeIndices for earcut\n const holeIndices: number[] = [];\n while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n }\n primitiveIndex++;\n }\n const triangleIndices = earcut(\n slicedFlatCoords,\n holeIndices.length > 0 ? holeIndices : undefined,\n nDim\n );\n for (let j = 0; j < triangleIndices.length; j++) {\n triangles.push(triangleIndices[j] + startIdx);\n }\n }\n // convert traingles to Uint32Array\n const trianglesUint32 = new Uint32Array(triangles.length);\n for (let i = 0; i < triangles.length; i++) {\n trianglesUint32[i] = triangles[i];\n }\n return trianglesUint32;\n}\n\n/**\n * get binary polygons from geoarrow polygon column\n * @param chunk one chunk of geoarrow polygon column\n * @param geoEncoding the geo encoding of the geoarrow polygon column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\n const polygonOffset = polygonData.valueOffsets;\n const partData = isMultiPolygon\n ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i)\n : chunk.valueOffsets;\n const ringData = polygonData.children[0];\n const pointData = ringData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = ringData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n const geometryIndicies = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndicies[i] = geomOffset[polygonOffset[i]];\n }\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n const triangles = getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim);\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies,\n triangles\n };\n}\n\n/**\n * get binary lines from geoarrow line column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding the geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryLinesFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndicies is not needed for line string\n const geometryIndicies = new Uint16Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiLineString) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n const startIdx = geomOffset[i];\n const endIdx = geomOffset[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n\n/**\n * get binary points from geoarrow point column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPointsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndices is not needed for point\n const geometryIndicies = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiPoint) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = partData[i];\n const endIdx = partData[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"AAIA,SAAQA,MAAM,QAAO,kBAAkB;AAAC,SAGhCC,+BAA+B;AAwCvC,OAAO,MAAMC,wBAAwB,GAAG;EACtCC,gBAAgB,EAAE;IAACC,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;IAAEC,IAAI,EAAE;EAAC,CAAC;EACtDC,SAAS,EAAE;IAACH,KAAK,EAAE,IAAII,YAAY,CAAC,CAAC,CAAC;IAAEF,IAAI,EAAE;EAAC,CAAC;EAChDG,UAAU,EAAE,EAAE;EACdC,YAAY,EAAE,CAAC,CAAC;EAChBC,UAAU,EAAE;IAACP,KAAK,EAAE,IAAIC,WAAW,CAAC,CAAC,CAAC;IAAEC,IAAI,EAAE;EAAC;AACjD,CAAC;AAiBD,OAAO,SAASM,4BAA4BA,CAC1CC,SAAuB,EACvBC,WAA6B,EAC7BC,OAA0C,EAClB;EACxB,MAAMC,YAAY,GAAG;IACnBC,OAAO,EAAEH,WAAW,KAAK,uBAAuB,IAAIA,WAAW,KAAK,kBAAkB;IACtFI,KAAK,EAAEJ,WAAW,KAAK,qBAAqB,IAAIA,WAAW,KAAK,gBAAgB;IAChFK,IAAI,EAAEL,WAAW,KAAK,0BAA0B,IAAIA,WAAW,KAAK;EACtE,CAAC;EAED,MAAMM,MAAM,GAAGL,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEM,UAAU,GAAG,CAACR,SAAS,CAACS,IAAI,CAACP,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEM,UAAU,CAAC,CAAC,GAAGR,SAAS,CAACS,IAAI;EAC3F,IAAIC,MAAwC,GAAG,CAACC,QAAQ,EAAEA,QAAQ,EAAE,CAACA,QAAQ,EAAE,CAACA,QAAQ,CAAC;EACzF,IAAIC,qBAAqB,GAAG,CAAC;EAC7B,MAAMC,gBAAkC,GAAG,EAAE;EAE7CN,MAAM,CAACO,OAAO,CAAEC,KAAK,IAAK;IACxB,MAAM;MAACjB,UAAU;MAAEkB,mBAAmB;MAAEC,IAAI;MAAEC,UAAU;MAAEC;IAAS,CAAC,GAClEC,4BAA4B,CAACL,KAAK,EAAEd,WAAW,CAAC;IAElD,MAAMX,gBAAgB,GAAG,IAAIE,WAAW,CAACM,UAAU,CAACuB,MAAM,CAAC;IAC3D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxB,UAAU,CAACuB,MAAM,EAAEC,CAAC,EAAE,EAAE;MAC1ChC,gBAAgB,CAACgC,CAAC,CAAC,GAAGxB,UAAU,CAACwB,CAAC,CAAC,GAAGV,qBAAqB;IAC7D;IAEA,MAAMW,aAAa,GAAG;MACpBjC,gBAAgB,EAAE;QAACC,KAAK,EAAED,gBAAgB;QAAEG,IAAI,EAAE;MAAC,CAAC;MACpDC,SAAS,EAAE;QACTH,KAAK,EAAEyB,mBAAmB;QAC1BvB,IAAI,EAAEwB;MACR,CAAC;MACDnB,UAAU,EAAE;QAACP,KAAK,EAAEO,UAAU;QAAEL,IAAI,EAAE;MAAC,CAAC;MACxCG,UAAU,EAAE,CAAC,GAAG4B,KAAK,CAACT,KAAK,CAACM,MAAM,CAAC,CAACI,IAAI,CAAC,CAAC,CAAC,CAACC,GAAG,CAAEJ,CAAC,KAAM;QACtDK,KAAK,EAAEL,CAAC,GAAGV;MACb,CAAC,CAAC;IACJ,CAAC;IAGDA,qBAAqB,IAAIG,KAAK,CAACM,MAAM;IAErCR,gBAAgB,CAACe,IAAI,CAAC;MACpBC,KAAK,EAAE,2BAA2B;MAClCC,MAAM,EAAE;QACNC,IAAI,EAAE,OAAO;QACb,GAAG1C,wBAAwB;QAC3B,IAAIc,YAAY,CAACE,KAAK,GAAGkB,aAAa,GAAG,CAAC,CAAC;MAC7C,CAAC;MACDS,KAAK,EAAE;QACLD,IAAI,EAAE,YAAY;QAClB,GAAG1C,wBAAwB;QAC3B,IAAIc,YAAY,CAACG,IAAI,GAAGiB,aAAa,GAAG,CAAC,CAAC,CAAC;QAC3CU,WAAW,EAAE;UAAC1C,KAAK,EAAEY,YAAY,CAACG,IAAI,GAAGY,UAAU,GAAG,IAAIgB,WAAW,CAAC,CAAC,CAAC;UAAEzC,IAAI,EAAE;QAAC;MACnF,CAAC;MACD0C,QAAQ,EAAE;QACRJ,IAAI,EAAE,SAAS;QACf,GAAG1C,wBAAwB;QAC3B,IAAIc,YAAY,CAACC,OAAO,GAAGmB,aAAa,GAAG,CAAC,CAAC,CAAC;QAC9Ca,cAAc,EAAE;UAEd7C,KAAK,EAAEY,YAAY,CAACC,OAAO,GAAGc,UAAU,GAAG,IAAIgB,WAAW,CAAC,CAAC,CAAC;UAC7DzC,IAAI,EAAE;QACR,CAAC;QACD4C,uBAAuB,EAAE;UACvB9C,KAAK,EAAEY,YAAY,CAACC,OAAO,GAAGc,UAAU,GAAG,IAAIgB,WAAW,CAAC,CAAC,CAAC;UAC7DzC,IAAI,EAAE;QACR,CAAC;QACD,IAAI0B,SAAS,GAAG;UAACA,SAAS,EAAE;YAAC5B,KAAK,EAAE4B,SAAS;YAAE1B,IAAI,EAAE;UAAC;QAAC,CAAC,GAAG,CAAC,CAAC;MAC/D;IACF,CAAC,CAAC;IAEFiB,MAAM,GAAGtB,+BAA+B,CAAC4B,mBAAmB,EAAEC,IAAI,EAAEP,MAAM,CAAC;EAC7E,CAAC,CAAC;EAEF,OAAO;IACLG,gBAAgB;IAChBH,MAAM;IACNP,YAAY;IACZ,IAAID,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEoC,UAAU,GACnB;MAACC,WAAW,EAAEC,kCAAkC,CAAC3B,gBAAgB;IAAC,CAAC,GACnE,CAAC,CAAC;EACR,CAAC;AACH;AAOA,OAAO,SAAS2B,kCAAkCA,CAAC3B,gBAAkC,EAAc;EACjG,MAAM4B,iBAA6B,GAAG,EAAE;EACxC5B,gBAAgB,CAACC,OAAO,CAAE4B,cAA8B,IAAK;IAC3D,IAAIC,kBAAiC,GAAG,IAAI;IAC5C,IAAID,cAAc,CAACZ,MAAM,IAAIY,cAAc,CAACZ,MAAM,CAACpC,SAAS,CAACH,KAAK,CAAC8B,MAAM,GAAG,CAAC,EAAE;MAC7EsB,kBAAkB,GAAG,QAAQ;IAC/B,CAAC,MAAM,IAAID,cAAc,CAACV,KAAK,IAAIU,cAAc,CAACV,KAAK,CAACtC,SAAS,CAACH,KAAK,CAAC8B,MAAM,GAAG,CAAC,EAAE;MAClFsB,kBAAkB,GAAG,OAAO;IAC9B,CAAC,MAAM,IAAID,cAAc,CAACP,QAAQ,IAAIO,cAAc,CAACP,QAAQ,CAACzC,SAAS,CAACH,KAAK,CAAC8B,MAAM,GAAG,CAAC,EAAE;MACxFsB,kBAAkB,GAAG,UAAU;IACjC;IAEA,MAAMpB,aAAa,GAAGoB,kBAAkB,GAAGD,cAAc,CAACC,kBAAkB,CAAC,GAAG,IAAI;IACpF,IAAIpB,aAAa,IAAIoB,kBAAkB,KAAK,IAAI,EAAE;MAAA,IAAAC,qBAAA;MAChD,MAAM9C,UAAU,GAAGyB,aAAa,CAACzB,UAAU,CAACP,KAAK;MACjD,MAAMyB,mBAAmB,GAAGO,aAAa,CAAC7B,SAAS,CAACH,KAAK;MACzD,MAAM0B,IAAI,GAAGM,aAAa,CAAC7B,SAAS,CAACD,IAAI;MACzC,MAAM4C,uBAAuB,IAAAO,qBAAA,GAAGrB,aAAa,CAACc,uBAAuB,cAAAO,qBAAA,uBAArCA,qBAAA,CAAuCrD,KAAK;MAE5E,MAAMgD,WAAW,GAAGM,0BAA0B,CAC5C/C,UAAU,EACVkB,mBAAmB,EACnBC,IAAI,EACJ0B,kBAAkB,EAClBN,uBACF,CAAC;MACDE,WAAW,CAACzB,OAAO,CAAEgC,MAAM,IAAK;QAC9BL,iBAAiB,CAACb,IAAI,CAACkB,MAAM,CAAC;MAChC,CAAC,CAAC;IACJ;EACF,CAAC,CAAC;EACF,OAAOL,iBAAiB;AAC1B;AASA,SAASI,0BAA0BA,CACjC/C,UAAsB,EACtBkB,mBAA+B,EAC/BC,IAAY,EACZ8B,YAAoB,EACpBV,uBAAoC,EACpC;EACA,MAAME,WAAuB,GAAG,EAAE;EAClC,MAAMS,WAAW,GAAGhC,mBAAmB,CAACK,MAAM;EAC9C,IAAI4B,WAAW,GAAG,CAAC;EACnB,OAAOA,WAAW,GAAGD,WAAW,EAAE;IAChC,MAAME,SAAS,GAAGpD,UAAU,CAACmD,WAAW,GAAGhC,IAAI,CAAC;IAChD,MAAM6B,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACrB,IAAIK,oBAAoB,GAAG,CAAC;IAC5B,OAAOF,WAAW,GAAGD,WAAW,IAAIlD,UAAU,CAACmD,WAAW,GAAGhC,IAAI,CAAC,KAAKiC,SAAS,EAAE;MAChF,IACEH,YAAY,KAAK,UAAU,IAC3BV,uBAAuB,IACvBA,uBAAuB,CAACe,OAAO,CAACH,WAAW,GAAGhC,IAAI,CAAC,IAAI,CAAC,EACxD;QAEAgC,WAAW,IAAIhC,IAAI;MACrB,CAAC,MAAM;QACL6B,MAAM,CAAC,CAAC,CAAC,IAAI9B,mBAAmB,CAACiC,WAAW,CAAC;QAC7CH,MAAM,CAAC,CAAC,CAAC,IAAI9B,mBAAmB,CAACiC,WAAW,GAAG,CAAC,CAAC;QACjDA,WAAW,IAAIhC,IAAI;QACnBkC,oBAAoB,EAAE;MACxB;IACF;IACAL,MAAM,CAAC,CAAC,CAAC,IAAIK,oBAAoB;IACjCL,MAAM,CAAC,CAAC,CAAC,IAAIK,oBAAoB;IACjCZ,WAAW,CAACX,IAAI,CAACkB,MAAM,CAAC;EAC1B;EACA,OAAOP,WAAW;AACpB;AAQA,SAASnB,4BAA4BA,CACnCL,KAAiB,EACjBd,WAA6B,EACN;EACvB,QAAQA,WAAW;IACjB,KAAK,gBAAgB;IACrB,KAAK,qBAAqB;MACxB,OAAOoD,wBAAwB,CAACtC,KAAK,EAAEd,WAAW,CAAC;IACrD,KAAK,qBAAqB;IAC1B,KAAK,0BAA0B;MAC7B,OAAOqD,uBAAuB,CAACvC,KAAK,EAAEd,WAAW,CAAC;IACpD,KAAK,kBAAkB;IACvB,KAAK,uBAAuB;MAC1B,OAAOsD,0BAA0B,CAACxC,KAAK,EAAEd,WAAW,CAAC;IACvD;MACE,MAAMuD,KAAK,CAAC,2BAA2B,CAAC;EAC5C;AACF;AAUA,OAAO,SAASC,kBAAkBA,CAChCrB,cAA2B,EAC3BC,uBAAmC,EACnCrB,mBAAiC,EACjCC,IAAY,EACC;EACb,IAAIyC,cAAc,GAAG,CAAC;EACtB,MAAMvC,SAAmB,GAAG,EAAE;EAE9B,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGc,cAAc,CAACf,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;IAClD,MAAMqC,QAAQ,GAAGvB,cAAc,CAACd,CAAC,CAAC;IAClC,MAAMsC,MAAM,GAAGxB,cAAc,CAACd,CAAC,GAAG,CAAC,CAAC;IAEpC,MAAMuC,gBAAgB,GAAG7C,mBAAmB,CAAC8C,QAAQ,CAACH,QAAQ,GAAG1C,IAAI,EAAE2C,MAAM,GAAG3C,IAAI,CAAC;IAErF,MAAM8C,WAAqB,GAAG,EAAE;IAChC,OAAO1B,uBAAuB,CAACqB,cAAc,CAAC,GAAGE,MAAM,EAAE;MACvD,IAAIvB,uBAAuB,CAACqB,cAAc,CAAC,GAAGC,QAAQ,EAAE;QACtDI,WAAW,CAACnC,IAAI,CAACS,uBAAuB,CAACqB,cAAc,CAAC,GAAGC,QAAQ,CAAC;MACtE;MACAD,cAAc,EAAE;IAClB;IACA,MAAMM,eAAe,GAAG7E,MAAM,CAC5B0E,gBAAgB,EAChBE,WAAW,CAAC1C,MAAM,GAAG,CAAC,GAAG0C,WAAW,GAAGE,SAAS,EAChDhD,IACF,CAAC;IACD,KAAK,IAAIiD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,eAAe,CAAC3C,MAAM,EAAE6C,CAAC,EAAE,EAAE;MAC/C/C,SAAS,CAACS,IAAI,CAACoC,eAAe,CAACE,CAAC,CAAC,GAAGP,QAAQ,CAAC;IAC/C;EACF;EAEA,MAAMQ,eAAe,GAAG,IAAI3E,WAAW,CAAC2B,SAAS,CAACE,MAAM,CAAC;EACzD,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,SAAS,CAACE,MAAM,EAAEC,CAAC,EAAE,EAAE;IACzC6C,eAAe,CAAC7C,CAAC,CAAC,GAAGH,SAAS,CAACG,CAAC,CAAC;EACnC;EACA,OAAO6C,eAAe;AACxB;AAQA,SAASZ,0BAA0BA,CAACxC,KAAiB,EAAEd,WAAmB,EAAyB;EACjG,MAAMmE,cAAc,GAAGnE,WAAW,KAAK,uBAAuB;EAE9D,MAAMoE,WAAW,GAAGD,cAAc,GAAGrD,KAAK,CAACuD,QAAQ,CAAC,CAAC,CAAC,GAAGvD,KAAK;EAC9D,MAAMwD,aAAa,GAAGF,WAAW,CAACG,YAAY;EAC9C,MAAMC,QAAQ,GAAGL,cAAc,GAC3BrD,KAAK,CAACyD,YAAY,CAAC9C,GAAG,CAAEJ,CAAC,IAAKiD,aAAa,CAACG,EAAE,CAACpD,CAAC,CAAC,IAAIA,CAAC,CAAC,GACvDP,KAAK,CAACyD,YAAY;EACtB,MAAMG,QAAQ,GAAGN,WAAW,CAACC,QAAQ,CAAC,CAAC,CAAC;EACxC,MAAMM,SAAS,GAAGD,QAAQ,CAACL,QAAQ,CAAC,CAAC,CAAC;EACtC,MAAMO,SAAS,GAAGD,SAAS,CAACN,QAAQ,CAAC,CAAC,CAAC;EACvC,MAAMrD,IAAI,GAAG2D,SAAS,CAACE,MAAM;EAC7B,MAAM5D,UAAU,GAAGyD,QAAQ,CAACH,YAAY;EACxC,MAAMxD,mBAAmB,GAAG6D,SAAS,CAACE,MAAM;EAE5C,MAAMC,gBAAgB,GAAG,IAAI9C,WAAW,CAACqC,aAAa,CAAClD,MAAM,CAAC;EAC9D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGiD,aAAa,CAAClD,MAAM,EAAEC,CAAC,EAAE,EAAE;IAC7C0D,gBAAgB,CAAC1D,CAAC,CAAC,GAAGJ,UAAU,CAACqD,aAAa,CAACjD,CAAC,CAAC,CAAC;EACpD;EAEA,MAAM2D,aAAa,GAAGjE,mBAAmB,CAACK,MAAM,GAAGJ,IAAI;EACvD,MAAMnB,UAAU,GAAG,IAAIN,WAAW,CAACyF,aAAa,CAAC;EACjD,KAAK,IAAI3D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmD,QAAQ,CAACpD,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;IAC5C,MAAMqC,QAAQ,GAAGzC,UAAU,CAACuD,QAAQ,CAACnD,CAAC,CAAC,CAAC;IACxC,MAAMsC,MAAM,GAAG1C,UAAU,CAACuD,QAAQ,CAACnD,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAI4C,CAAC,GAAGP,QAAQ,EAAEO,CAAC,GAAGN,MAAM,EAAEM,CAAC,EAAE,EAAE;MACtCpE,UAAU,CAACoE,CAAC,CAAC,GAAG5C,CAAC;IACnB;EACF;EAEA,MAAMH,SAAS,GAAGsC,kBAAkB,CAACuB,gBAAgB,EAAE9D,UAAU,EAAEF,mBAAmB,EAAEC,IAAI,CAAC;EAC7F,OAAO;IACLnB,UAAU;IACVkB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACV8D,gBAAgB;IAChB7D;EACF,CAAC;AACH;AAQA,SAASmC,uBAAuBA,CAACvC,KAAiB,EAAEd,WAAmB,EAAyB;EAC9F,MAAMiF,iBAAiB,GAAGjF,WAAW,KAAK,0BAA0B;EAEpE,MAAMkF,QAAQ,GAAGD,iBAAiB,GAAGnE,KAAK,CAACuD,QAAQ,CAAC,CAAC,CAAC,GAAGvD,KAAK;EAC9D,MAAM6D,SAAS,GAAGO,QAAQ,CAACb,QAAQ,CAAC,CAAC,CAAC;EACtC,MAAMO,SAAS,GAAGD,SAAS,CAACN,QAAQ,CAAC,CAAC,CAAC;EAEvC,MAAMrD,IAAI,GAAG2D,SAAS,CAACE,MAAM;EAC7B,MAAM5D,UAAU,GAAGiE,QAAQ,CAACX,YAAY;EACxC,MAAMxD,mBAAmB,GAAG6D,SAAS,CAACE,MAAM;EAG5C,MAAMC,gBAAgB,GAAG,IAAI9C,WAAW,CAAC,CAAC,CAAC;EAE3C,MAAM+C,aAAa,GAAGjE,mBAAmB,CAACK,MAAM,GAAGJ,IAAI;EACvD,MAAMnB,UAAU,GAAG,IAAIN,WAAW,CAACyF,aAAa,CAAC;EAEjD,IAAIC,iBAAiB,EAAE;IACrB,MAAMT,QAAQ,GAAG1D,KAAK,CAACyD,YAAY;IACnC,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmD,QAAQ,CAACpD,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;MAC5C,MAAMqC,QAAQ,GAAGzC,UAAU,CAACuD,QAAQ,CAACnD,CAAC,CAAC,CAAC;MACxC,MAAMsC,MAAM,GAAG1C,UAAU,CAACuD,QAAQ,CAACnD,CAAC,GAAG,CAAC,CAAC,CAAC;MAC1C,KAAK,IAAI4C,CAAC,GAAGP,QAAQ,EAAEO,CAAC,GAAGN,MAAM,EAAEM,CAAC,EAAE,EAAE;QACtCpE,UAAU,CAACoE,CAAC,CAAC,GAAG5C,CAAC;MACnB;IACF;EACF,CAAC,MAAM;IACL,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,KAAK,CAACM,MAAM,EAAEC,CAAC,EAAE,EAAE;MACrC,MAAMqC,QAAQ,GAAGzC,UAAU,CAACI,CAAC,CAAC;MAC9B,MAAMsC,MAAM,GAAG1C,UAAU,CAACI,CAAC,GAAG,CAAC,CAAC;MAChC,KAAK,IAAI4C,CAAC,GAAGP,QAAQ,EAAEO,CAAC,GAAGN,MAAM,EAAEM,CAAC,EAAE,EAAE;QACtCpE,UAAU,CAACoE,CAAC,CAAC,GAAG5C,CAAC;MACnB;IACF;EACF;EAEA,OAAO;IACLxB,UAAU;IACVkB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACV8D;EACF,CAAC;AACH;AAQA,SAAS3B,wBAAwBA,CAACtC,KAAiB,EAAEd,WAAmB,EAAyB;EAC/F,MAAMmF,YAAY,GAAGnF,WAAW,KAAK,qBAAqB;EAE1D,MAAM2E,SAAS,GAAGQ,YAAY,GAAGrE,KAAK,CAACuD,QAAQ,CAAC,CAAC,CAAC,GAAGvD,KAAK;EAC1D,MAAM8D,SAAS,GAAGD,SAAS,CAACN,QAAQ,CAAC,CAAC,CAAC;EAEvC,MAAMrD,IAAI,GAAG2D,SAAS,CAACE,MAAM;EAC7B,MAAM9D,mBAAmB,GAAG6D,SAAS,CAACE,MAAM;EAG5C,MAAMC,gBAAgB,GAAG,IAAI9C,WAAW,CAAC,CAAC,CAAC;EAE3C,MAAMhB,UAAU,GAAG,IAAImE,UAAU,CAAC,CAAC,CAAC;EAEpC,MAAMJ,aAAa,GAAGjE,mBAAmB,CAACK,MAAM,GAAGJ,IAAI;EACvD,MAAMnB,UAAU,GAAG,IAAIN,WAAW,CAACyF,aAAa,CAAC;EAEjD,IAAIG,YAAY,EAAE;IAChB,MAAMX,QAAQ,GAAG1D,KAAK,CAACyD,YAAY;IACnC,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmD,QAAQ,CAACpD,MAAM,GAAG,CAAC,EAAEC,CAAC,EAAE,EAAE;MAC5C,MAAMqC,QAAQ,GAAGc,QAAQ,CAACnD,CAAC,CAAC;MAC5B,MAAMsC,MAAM,GAAGa,QAAQ,CAACnD,CAAC,GAAG,CAAC,CAAC;MAC9B,KAAK,IAAI4C,CAAC,GAAGP,QAAQ,EAAEO,CAAC,GAAGN,MAAM,EAAEM,CAAC,EAAE,EAAE;QACtCpE,UAAU,CAACoE,CAAC,CAAC,GAAG5C,CAAC;MACnB;IACF;EACF,CAAC,MAAM;IACL,KAAK,IAAIA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,KAAK,CAACM,MAAM,EAAEC,CAAC,EAAE,EAAE;MACrCxB,UAAU,CAACwB,CAAC,CAAC,GAAGA,CAAC;IACnB;EACF;EAEA,OAAO;IACLxB,UAAU;IACVkB,mBAAmB;IACnBC,IAAI;IACJC,UAAU;IACV8D;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BinaryGeometryType","getBinaryGeometryTemplate","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","undefined","data","bounds","Infinity","globalFeatureIdOffset","chunkOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","calculateMeanCenters","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","coordIdx","primitiveIdx","featureId","vertexCountInFeature","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","j","trianglesUint32","error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","triangulate","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {earcut} from '@math.gl/polygon';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\nimport {TypedArray} from '@loaders.gl/loader-utils';\n\n/**\n * Binary geometry type\n */\nenum BinaryGeometryType {\n points = 'points',\n lines = 'lines',\n polygons = 'polygons'\n}\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n /** Binary format geometries, an array of BinaryFeatureCollection */\n binaryGeometries: BinaryFeatures[];\n /** Boundary of the binary geometries */\n bounds: [number, number, number, number];\n /** Feature types of the binary geometries */\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n /** (Optional) mean centers of the binary geometries for e.g. polygon filtering */\n meanCenters?: number[][];\n};\n\n/**\n * Binary geometry content returned from getBinaryGeometriesFromChunk\n */\ntype BinaryGeometryContent = {\n // Array of Point feature indexes by vertex\n featureIds: Uint32Array;\n /** Flat coordinate array of e.g. x, y or x,y,z */\n flatCoordinateArray: Float64Array;\n /** Dimention of each position */\n nDim: number;\n /** Array of geometry offsets: the start index of primitive geometry */\n geomOffset: Int32Array;\n /** Array of geometry indicies: the start index of each geometry */\n geometryIndicies: Uint16Array;\n /** (Optional) indices of triangels returned from polygon triangulation (Polygon only) */\n triangles?: Uint32Array;\n /** (Optional) array of mean center of each geometry */\n meanCenters?: Float64Array;\n};\n\n/**\n * binary geometry template, see deck.gl BinaryGeometry\n */\nexport function getBinaryGeometryTemplate() {\n return {\n globalFeatureIds: {value: new Uint32Array(0), size: 1},\n positions: {value: new Float32Array(0), size: 2},\n properties: [],\n numericProps: {},\n featureIds: {value: new Uint32Array(0), size: 1}\n };\n}\n\nexport type BinaryGeometriesFromArrowOptions = {\n /** option to specify which chunk to get binary geometries from, for progressive rendering */\n chunkIndex?: number;\n /** The offset (beginning index of rows) of input chunk. Used for reconstructing globalFeatureIds in web workers */\n chunkOffset?: number;\n /** option to get mean centers from geometries, for polygon filtering */\n calculateMeanCenters?: boolean;\n /** option to compute the triangle indices by tesselating polygons */\n triangulate?: boolean;\n};\n\n/**\n * get binary geometries from geoarrow column\n *\n * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)\n * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)\n * @param options options for getting binary geometries {meanCenter: boolean}\n * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryDataFromGeoArrow {\n const featureTypes = {\n polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',\n point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',\n line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'\n };\n\n const chunks =\n options?.chunkIndex !== undefined && options?.chunkIndex >= 0\n ? [geoColumn.data[options?.chunkIndex]]\n : geoColumn.data;\n let bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = options?.chunkOffset || 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n chunks.forEach((chunk) => {\n const {featureIds, flatCoordinateArray, nDim, geomOffset, triangles} =\n getBinaryGeometriesFromChunk(chunk, geoEncoding, options);\n\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\n }\n\n const binaryContent = {\n globalFeatureIds: {value: globalFeatureIds, size: 1},\n positions: {\n value: flatCoordinateArray,\n size: nDim\n },\n featureIds: {value: featureIds, size: 1},\n // eslint-disable-next-line no-loop-func\n properties: [...Array(chunk.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatures structure must have points, lines, polygons even if they are empty\n binaryGeometries.push({\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.point ? binaryContent : {})\n },\n lines: {\n type: 'LineString',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.line ? binaryContent : {}),\n pathIndices: {value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1}\n },\n polygons: {\n type: 'Polygon',\n ...getBinaryGeometryTemplate(),\n ...(featureTypes.polygon ? binaryContent : {}),\n polygonIndices: {\n // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n primitivePolygonIndices: {\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n ...(triangles ? {triangles: {value: triangles, size: 1}} : {})\n }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.calculateMeanCenters\n ? {meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)}\n : {})\n };\n}\n\n/**\n * Get mean centers from binary geometries\n * @param binaryGeometries binary geometries from geoarrow column, an array of BinaryFeatureCollection\n * @returns mean centers of the binary geometries\n */\nexport function getMeanCentersFromBinaryGeometries(binaryGeometries: BinaryFeatures[]): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatures) => {\n let binaryGeometryType: keyof typeof BinaryGeometryType | null = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.points;\n } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.lines;\n } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.polygons;\n }\n\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices =\n binaryContent.type === 'Polygon' ? binaryContent.primitivePolygonIndices?.value : undefined;\n\n const meanCenters = getMeanCentersFromGeometry(\n featureIds,\n flatCoordinateArray,\n nDim,\n binaryGeometryType,\n primitivePolygonIndices\n );\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\n}\n\n/**\n * Get mean centers from raw coordinates and feature ids\n * @param featureIds Array of feature ids indexes by vertex\n * @param flatCoordinateArray Array of vertex, e.g. x, y or x, y, z, positions\n * @param nDim number of dimensions per position\n * @returns - mean centers of each polygon\n */\nfunction getMeanCentersFromGeometry(\n featureIds: TypedArray,\n flatCoordinateArray: TypedArray,\n nDim: number,\n geometryType: keyof typeof BinaryGeometryType,\n primitivePolygonIndices?: TypedArray\n) {\n const meanCenters: number[][] = [];\n const vertexCount = flatCoordinateArray.length;\n let vertexIndex = 0;\n let coordIdx = 0;\n let primitiveIdx = 0;\n while (vertexIndex < vertexCount) {\n const featureId = featureIds[vertexIndex / nDim];\n const center = [0, 0];\n let vertexCountInFeature = 0;\n while (vertexIndex < vertexCount && featureIds[coordIdx] === featureId) {\n if (\n geometryType === BinaryGeometryType.polygons &&\n primitivePolygonIndices?.[primitiveIdx] === coordIdx\n ) {\n // skip the first point since it is the same as the last point in each ring for polygons\n vertexIndex += nDim;\n primitiveIdx++;\n } else {\n center[0] += flatCoordinateArray[vertexIndex];\n center[1] += flatCoordinateArray[vertexIndex + 1];\n vertexIndex += nDim;\n vertexCountInFeature++;\n }\n coordIdx += 1;\n }\n center[0] /= vertexCountInFeature;\n center[1] /= vertexCountInFeature;\n meanCenters.push(center);\n }\n return meanCenters;\n}\n\n/**\n * get binary geometries from geoarrow column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: arrow.Data,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n switch (geoEncoding) {\n case 'geoarrow.point':\n case 'geoarrow.multipoint':\n return getBinaryPointsFromChunk(chunk, geoEncoding);\n case 'geoarrow.linestring':\n case 'geoarrow.multilinestring':\n return getBinaryLinesFromChunk(chunk, geoEncoding);\n case 'geoarrow.polygon':\n case 'geoarrow.multipolygon':\n return getBinaryPolygonsFromChunk(chunk, geoEncoding, options);\n default:\n throw Error('invalid geoarrow encoding');\n }\n}\n\n/**\n * get triangle indices. Allows deck.gl to skip performing costly triangulation on main thread.\n * @param polygonIndices Indices within positions of the start of each simple Polygon\n * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring\n * @param flatCoordinateArray Array of x, y or x, y, z positions\n * @param nDim - number of dimensions per position\n * @returns triangle indices or null if invalid polygon and earcut fails\n */\nexport function getTriangleIndices(\n polygonIndices: Uint16Array,\n primitivePolygonIndices: Int32Array,\n flatCoordinateArray: Float64Array,\n nDim: number\n): Uint32Array | null {\n try {\n let primitiveIndex = 0;\n const triangles: number[] = [];\n // loop polygonIndices to get triangles\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startIdx = polygonIndices[i];\n const endIdx = polygonIndices[i + 1];\n // get subarray of flatCoordinateArray\n const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);\n // get holeIndices for earcut\n const holeIndices: number[] = [];\n while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n }\n primitiveIndex++;\n }\n // TODO check if each ring is closed\n const triangleIndices = earcut(\n slicedFlatCoords,\n holeIndices.length > 0 ? holeIndices : undefined,\n nDim\n );\n if (triangleIndices.length === 0) {\n throw Error('earcut failed e.g. invalid polygon');\n }\n for (let j = 0; j < triangleIndices.length; j++) {\n triangles.push(triangleIndices[j] + startIdx);\n }\n }\n // convert traingles to Uint32Array\n const trianglesUint32 = new Uint32Array(triangles.length);\n for (let i = 0; i < triangles.length; i++) {\n trianglesUint32[i] = triangles[i];\n }\n return trianglesUint32;\n } catch (error) {\n // if earcut fails, return null\n return null;\n }\n}\n\n/**\n * get binary polygons from geoarrow polygon column\n * @param chunk one chunk of geoarrow polygon column\n * @param geoEncoding the geo encoding of the geoarrow polygon column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(\n chunk: arrow.Data,\n geoEncoding: string,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\n const polygonOffset = polygonData.valueOffsets;\n const partData = isMultiPolygon\n ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i)\n : chunk.valueOffsets;\n const ringData = polygonData.children[0];\n const pointData = ringData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = ringData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n const geometryIndicies = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndicies[i] = geomOffset[polygonOffset[i]];\n }\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n const triangles = options?.triangulate\n ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim)\n : null;\n\n return {\n featureIds,\n nDim,\n flatCoordinateArray,\n geomOffset,\n geometryIndicies,\n ...(options?.triangulate && triangles ? {triangles} : {})\n };\n}\n\n/**\n * get binary lines from geoarrow line column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding the geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryLinesFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndicies is not needed for line string\n const geometryIndicies = new Uint16Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiLineString) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n const startIdx = geomOffset[i];\n const endIdx = geomOffset[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n\n/**\n * get binary points from geoarrow point column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPointsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndices is not needed for point\n const geometryIndicies = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiPoint) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = partData[i];\n const endIdx = partData[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Geometry } from '@loaders.gl/schema';
2
+ import { type GeoArrowEncoding } from '@loaders.gl/gis';
3
+ /**
4
+ * parse geometry from arrow data that is returned from processArrowData()
5
+ * NOTE: this function could be deduplicated with the binaryToFeature() in deck.gl,
6
+ * it is currently used for deck.gl picking because currently deck.gl returns only the index of the feature
7
+ *
8
+ * @param data data extraced from arrow vector representing a geometry
9
+ * @param encoding the geoarrow encoding of the geometry column
10
+ * @returns Feature or null
11
+ */
12
+ export declare function parseGeometryFromArrow(arrowCellValue: any, encoding?: GeoArrowEncoding): Geometry | null;
13
+ //# sourceMappingURL=convert-geoarrow-to-geojson-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-geoarrow-to-geojson-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-geojson-geometry.ts"],"names":[],"mappings":"AAKA,OAAO,EAQL,QAAQ,EAET,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAmB,KAAK,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAGxE;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,GAAG,EACnB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,QAAQ,GAAG,IAAI,CAwCjB"}
@@ -1,44 +1,55 @@
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) {
1
+ import { binaryToGeometry } from '@loaders.gl/gis';
2
+ import { WKBLoader, WKTLoader } from '@loaders.gl/wkt';
3
+ export function parseGeometryFromArrow(arrowCellValue, encoding) {
4
+ var _encoding;
5
+ encoding = (_encoding = encoding) === null || _encoding === void 0 ? void 0 : _encoding.toLowerCase();
6
+ if (!encoding || !arrowCellValue) {
6
7
  return null;
7
8
  }
8
9
  let geometry;
9
10
  switch (encoding) {
10
11
  case 'geoarrow.multipolygon':
11
- geometry = arrowMultiPolygonToFeature(data);
12
+ geometry = arrowMultiPolygonToFeature(arrowCellValue);
12
13
  break;
13
14
  case 'geoarrow.polygon':
14
- geometry = arrowPolygonToFeature(data);
15
+ geometry = arrowPolygonToFeature(arrowCellValue);
15
16
  break;
16
17
  case 'geoarrow.multipoint':
17
- geometry = arrowMultiPointToFeature(data);
18
+ geometry = arrowMultiPointToFeature(arrowCellValue);
18
19
  break;
19
20
  case 'geoarrow.point':
20
- geometry = arrowPointToFeature(data);
21
+ geometry = arrowPointToFeature(arrowCellValue);
21
22
  break;
22
23
  case 'geoarrow.multilinestring':
23
- geometry = arrowMultiLineStringToFeature(data);
24
+ geometry = arrowMultiLineStringToFeature(arrowCellValue);
24
25
  break;
25
26
  case 'geoarrow.linestring':
26
- geometry = arrowLineStringToFeature(data);
27
+ geometry = arrowLineStringToFeature(arrowCellValue);
27
28
  break;
28
29
  case 'geoarrow.wkb':
29
- throw Error(`GeoArrow encoding not supported ${encoding}`);
30
+ geometry = arrowWKBToFeature(arrowCellValue);
31
+ break;
30
32
  case 'geoarrow.wkt':
31
- throw Error(`GeoArrow encoding not supported ${encoding}`);
33
+ geometry = arrowWKTToFeature(arrowCellValue);
34
+ break;
32
35
  default:
33
36
  {
34
37
  throw Error(`GeoArrow encoding not supported ${encoding}`);
35
38
  }
36
39
  }
37
- return {
38
- type: 'Feature',
39
- geometry,
40
- properties: {}
41
- };
40
+ return geometry;
41
+ }
42
+ function arrowWKBToFeature(arrowCellValue) {
43
+ var _WKBLoader$parseSync;
44
+ const arrayBuffer = arrowCellValue.buffer.slice(arrowCellValue.byteOffset, arrowCellValue.byteOffset + arrowCellValue.byteLength);
45
+ const binaryGeometry = (_WKBLoader$parseSync = WKBLoader.parseSync) === null || _WKBLoader$parseSync === void 0 ? void 0 : _WKBLoader$parseSync.call(WKBLoader, arrayBuffer);
46
+ const geometry = binaryToGeometry(binaryGeometry);
47
+ return geometry;
48
+ }
49
+ function arrowWKTToFeature(arrowCellValue) {
50
+ var _WKTLoader$parseTextS;
51
+ const string = arrowCellValue;
52
+ return (_WKTLoader$parseTextS = WKTLoader.parseTextSync) === null || _WKTLoader$parseTextS === void 0 ? void 0 : _WKTLoader$parseTextS.call(WKTLoader, string);
42
53
  }
43
54
  function arrowMultiPolygonToFeature(arrowMultiPolygon) {
44
55
  const multiPolygon = [];
@@ -90,19 +101,17 @@ function arrowMultiPointToFeature(arrowMultiPoint) {
90
101
  multiPoint.push(coord);
91
102
  }
92
103
  }
93
- const geometry = {
104
+ return {
94
105
  type: 'MultiPoint',
95
106
  coordinates: multiPoint
96
107
  };
97
- return geometry;
98
108
  }
99
109
  function arrowPointToFeature(arrowPoint) {
100
110
  const point = Array.from(arrowPoint);
101
- const geometry = {
111
+ return {
102
112
  type: 'Point',
103
113
  coordinates: point
104
114
  };
105
- return geometry;
106
115
  }
107
116
  function arrowMultiLineStringToFeature(arrowMultiLineString) {
108
117
  const multiLineString = [];
@@ -118,11 +127,10 @@ function arrowMultiLineStringToFeature(arrowMultiLineString) {
118
127
  }
119
128
  multiLineString.push(lineString);
120
129
  }
121
- const geometry = {
130
+ return {
122
131
  type: 'MultiLineString',
123
132
  coordinates: multiLineString
124
133
  };
125
- return geometry;
126
134
  }
127
135
  function arrowLineStringToFeature(arrowLineString) {
128
136
  const lineString = [];
@@ -133,10 +141,9 @@ function arrowLineStringToFeature(arrowLineString) {
133
141
  lineString.push(coords);
134
142
  }
135
143
  }
136
- const geometry = {
144
+ return {
137
145
  type: 'LineString',
138
146
  coordinates: lineString
139
147
  };
140
- return geometry;
141
148
  }
142
- //# sourceMappingURL=convert-geoarrow-to-geojson.js.map
149
+ //# sourceMappingURL=convert-geoarrow-to-geojson-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-geoarrow-to-geojson-geometry.js","names":["binaryToGeometry","WKBLoader","WKTLoader","parseGeometryFromArrow","arrowCellValue","encoding","_encoding","toLowerCase","geometry","arrowMultiPolygonToFeature","arrowPolygonToFeature","arrowMultiPointToFeature","arrowPointToFeature","arrowMultiLineStringToFeature","arrowLineStringToFeature","arrowWKBToFeature","arrowWKTToFeature","Error","_WKBLoader$parseSync","arrayBuffer","buffer","slice","byteOffset","byteLength","binaryGeometry","parseSync","call","_WKTLoader$parseTextS","string","parseTextSync","arrowMultiPolygon","multiPolygon","m","length","arrowPolygon","get","polygon","i","arrowRing","ring","j","arrowCoord","coord","Array","from","push","type","coordinates","coords","arrowMultiPoint","multiPoint","arrowPoint","point","arrowMultiLineString","multiLineString","arrowLineString","lineString"],"sources":["../../src/geoarrow/convert-geoarrow-to-geojson-geometry.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import * as arrow from 'apache-arrow';\nimport {\n MultiPolygon,\n Position,\n Polygon,\n MultiPoint,\n Point,\n MultiLineString,\n LineString,\n Geometry,\n BinaryGeometry\n} from '@loaders.gl/schema';\nimport {binaryToGeometry, type GeoArrowEncoding} from '@loaders.gl/gis';\nimport {WKBLoader, WKTLoader} from '@loaders.gl/wkt';\n\n/**\n * parse geometry from arrow data that is returned from processArrowData()\n * NOTE: this function could be deduplicated with the binaryToFeature() in deck.gl,\n * it is currently used for deck.gl picking because currently deck.gl returns only the index of the feature\n *\n * @param data data extraced from arrow vector representing a geometry\n * @param encoding the geoarrow encoding of the geometry column\n * @returns Feature or null\n */\nexport function parseGeometryFromArrow(\n arrowCellValue: any,\n encoding?: GeoArrowEncoding\n): Geometry | null {\n // sanity\n encoding = encoding?.toLowerCase() as GeoArrowEncoding;\n if (!encoding || !arrowCellValue) {\n return null;\n }\n\n let geometry: Geometry;\n\n switch (encoding) {\n case 'geoarrow.multipolygon':\n geometry = arrowMultiPolygonToFeature(arrowCellValue);\n break;\n case 'geoarrow.polygon':\n geometry = arrowPolygonToFeature(arrowCellValue);\n break;\n case 'geoarrow.multipoint':\n geometry = arrowMultiPointToFeature(arrowCellValue);\n break;\n case 'geoarrow.point':\n geometry = arrowPointToFeature(arrowCellValue);\n break;\n case 'geoarrow.multilinestring':\n geometry = arrowMultiLineStringToFeature(arrowCellValue);\n break;\n case 'geoarrow.linestring':\n geometry = arrowLineStringToFeature(arrowCellValue);\n break;\n case 'geoarrow.wkb':\n geometry = arrowWKBToFeature(arrowCellValue);\n break;\n case 'geoarrow.wkt':\n geometry = arrowWKTToFeature(arrowCellValue);\n break;\n default: {\n throw Error(`GeoArrow encoding not supported ${encoding}`);\n }\n }\n\n return geometry;\n}\n\nfunction arrowWKBToFeature(arrowCellValue: any) {\n // The actual WKB array buffer starts from byteOffset and ends at byteOffset + byteLength\n const arrayBuffer: ArrayBuffer = arrowCellValue.buffer.slice(\n arrowCellValue.byteOffset,\n arrowCellValue.byteOffset + arrowCellValue.byteLength\n );\n const binaryGeometry = WKBLoader.parseSync?.(arrayBuffer)! as BinaryGeometry;\n const geometry = binaryToGeometry(binaryGeometry);\n return geometry;\n}\n\nfunction arrowWKTToFeature(arrowCellValue: any) {\n const string: string = arrowCellValue;\n return WKTLoader.parseTextSync?.(string)!;\n}\n\n/**\n * convert Arrow MultiPolygon to geojson Feature\n */\nfunction arrowMultiPolygonToFeature(arrowMultiPolygon: any): 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: any): 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: any): 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 return {\n type: 'MultiPoint',\n coordinates: multiPoint\n };\n}\n\n/**\n * convert Arrow Point to geojson Point\n */\nfunction arrowPointToFeature(arrowPoint: any): Point {\n const point: Position = Array.from(arrowPoint);\n return {\n type: 'Point',\n coordinates: point\n };\n}\n\n/**\n * convert Arrow MultiLineString to geojson MultiLineString\n */\nfunction arrowMultiLineStringToFeature(arrowMultiLineString: any): 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 return {\n type: 'MultiLineString',\n coordinates: multiLineString\n };\n}\n\n/**\n * convert Arrow LineString to geojson LineString\n */\nfunction arrowLineStringToFeature(arrowLineString: any): 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 return {\n type: 'LineString',\n coordinates: lineString\n };\n}\n"],"mappings":"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"}
@@ -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,CAsBlC"}
1
+ {"version":3,"file":"get-arrow-bounds.d.ts","sourceRoot":"","sources":["../../src/geoarrow/get-arrow-bounds.ts"],"names":[],"mappings":"AAIA;;;;;;;;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"}
@@ -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 < 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"}
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\n// SPDX-License-Identifier: MIT\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":"AAaA,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"}