@loaders.gl/arrow 4.1.0-alpha.1 → 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 (98) 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 +5 -2
  6. package/dist/arrow-writer.js +1 -1
  7. package/dist/arrow-writer.js.map +1 -1
  8. package/dist/dist.dev.js +117 -50
  9. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts +4 -2
  10. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.d.ts.map +1 -1
  11. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js +25 -23
  12. package/dist/geoarrow/convert-geoarrow-to-binary-geometry.js.map +1 -1
  13. package/dist/geoarrow/convert-geoarrow-to-geojson-geometry.d.ts.map +1 -1
  14. package/dist/geoarrow/convert-geoarrow-to-geojson-geometry.js.map +1 -1
  15. package/dist/geoarrow/get-arrow-bounds.d.ts.map +1 -1
  16. package/dist/geoarrow/get-arrow-bounds.js.map +1 -1
  17. package/dist/geoarrow-loader.d.ts.map +1 -1
  18. package/dist/geoarrow-loader.js.map +1 -1
  19. package/dist/geoarrow-writer.js +1 -1
  20. package/dist/geoarrow-writer.js.map +1 -1
  21. package/dist/index.cjs +77 -17
  22. package/dist/index.d.ts +4 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +3 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/arrow-table-batch.d.ts.map +1 -1
  27. package/dist/lib/arrow-table-batch.js.map +1 -1
  28. package/dist/lib/arrow-table.d.ts.map +1 -1
  29. package/dist/lib/arrow-table.js.map +1 -1
  30. package/dist/lib/encode-arrow.d.ts.map +1 -1
  31. package/dist/lib/encode-arrow.js.map +1 -1
  32. package/dist/lib/encode-geoarrow.d.ts.map +1 -1
  33. package/dist/lib/encode-geoarrow.js.map +1 -1
  34. package/dist/parsers/parse-arrow-in-batches.d.ts +2 -1
  35. package/dist/parsers/parse-arrow-in-batches.d.ts.map +1 -1
  36. package/dist/parsers/parse-arrow-in-batches.js +8 -1
  37. package/dist/parsers/parse-arrow-in-batches.js.map +1 -1
  38. package/dist/parsers/parse-arrow-sync.d.ts.map +1 -1
  39. package/dist/parsers/parse-arrow-sync.js.map +1 -1
  40. package/dist/parsers/parse-geoarrow-in-batches.d.ts.map +1 -1
  41. package/dist/parsers/parse-geoarrow-in-batches.js.map +1 -1
  42. package/dist/parsers/parse-geoarrow-sync.d.ts.map +1 -1
  43. package/dist/parsers/parse-geoarrow-sync.js.map +1 -1
  44. package/dist/schema/arrow-type-utils.d.ts.map +1 -1
  45. package/dist/schema/arrow-type-utils.js.map +1 -1
  46. package/dist/schema/convert-arrow-schema.d.ts.map +1 -1
  47. package/dist/schema/convert-arrow-schema.js.map +1 -1
  48. package/dist/tables/convert-arrow-to-columnar-table.d.ts.map +1 -1
  49. package/dist/tables/convert-arrow-to-columnar-table.js.map +1 -1
  50. package/dist/tables/convert-arrow-to-geojson-table.d.ts.map +1 -1
  51. package/dist/tables/convert-arrow-to-geojson-table.js.map +1 -1
  52. package/dist/tables/convert-columnar-to-row-table.d.ts.map +1 -1
  53. package/dist/tables/convert-columnar-to-row-table.js.map +1 -1
  54. package/dist/tables/convert-table-to-arrow.d.ts.map +1 -1
  55. package/dist/tables/convert-table-to-arrow.js.map +1 -1
  56. package/dist/triangulate-on-worker.d.ts +39 -5
  57. package/dist/triangulate-on-worker.d.ts.map +1 -1
  58. package/dist/triangulate-on-worker.js +12 -2
  59. package/dist/triangulate-on-worker.js.map +1 -1
  60. package/dist/triangulation-worker.js +11672 -10
  61. package/dist/types.d.ts.map +1 -1
  62. package/dist/types.js.map +1 -1
  63. package/dist/workers/arrow-worker.js.map +1 -1
  64. package/dist/workers/hard-clone.d.ts +23 -0
  65. package/dist/workers/hard-clone.d.ts.map +1 -0
  66. package/dist/workers/hard-clone.js +57 -0
  67. package/dist/workers/hard-clone.js.map +1 -0
  68. package/dist/workers/triangulation-worker-node.d.ts.map +1 -1
  69. package/dist/workers/triangulation-worker-node.js.map +1 -1
  70. package/dist/workers/triangulation-worker.js +34 -1
  71. package/dist/workers/triangulation-worker.js.map +1 -1
  72. package/package.json +8 -8
  73. package/src/arrow-loader.ts +3 -1
  74. package/src/geoarrow/convert-geoarrow-to-binary-geometry.ts +28 -20
  75. package/src/geoarrow/convert-geoarrow-to-geojson-geometry.ts +2 -1
  76. package/src/geoarrow/get-arrow-bounds.ts +2 -1
  77. package/src/geoarrow-loader.ts +2 -1
  78. package/src/index.ts +10 -3
  79. package/src/lib/arrow-table-batch.ts +2 -1
  80. package/src/lib/arrow-table.ts +2 -1
  81. package/src/lib/encode-arrow.ts +2 -1
  82. package/src/lib/encode-geoarrow.ts +2 -1
  83. package/src/parsers/parse-arrow-in-batches.ts +9 -2
  84. package/src/parsers/parse-arrow-sync.ts +2 -1
  85. package/src/parsers/parse-geoarrow-in-batches.ts +2 -1
  86. package/src/parsers/parse-geoarrow-sync.ts +2 -1
  87. package/src/schema/arrow-type-utils.ts +2 -1
  88. package/src/schema/convert-arrow-schema.ts +2 -1
  89. package/src/tables/convert-arrow-to-columnar-table.ts +2 -1
  90. package/src/tables/convert-arrow-to-geojson-table.ts +2 -1
  91. package/src/tables/convert-columnar-to-row-table.ts +2 -1
  92. package/src/tables/convert-table-to-arrow.ts +2 -1
  93. package/src/triangulate-on-worker.ts +52 -8
  94. package/src/types.ts +2 -1
  95. package/src/workers/arrow-worker.ts +2 -1
  96. package/src/workers/hard-clone.ts +162 -0
  97. package/src/workers/triangulation-worker-node.ts +2 -1
  98. package/src/workers/triangulation-worker.ts +58 -3
@@ -1 +1 @@
1
- {"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BinaryGeometryType","BINARY_GEOMETRY_TEMPLATE","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","data","bounds","Infinity","globalFeatureIdOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","calculateMeanCenters","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","undefined","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","coordIdx","primitiveIdx","featureId","vertexCountInFeature","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","j","trianglesUint32","error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","triangulate","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport {earcut} from '@math.gl/polygon';\nimport {BinaryFeatureCollection as BinaryFeatures} from '@loaders.gl/schema';\nimport {GeoArrowEncoding} from '@loaders.gl/gis';\nimport {updateBoundsFromGeoArrowSamples} from './get-arrow-bounds';\nimport {TypedArray} from '@loaders.gl/loader-utils';\n\n/**\n * Binary geometry type\n */\nenum BinaryGeometryType {\n points = 'points',\n lines = 'lines',\n polygons = 'polygons'\n}\n\n/**\n * Binary data from geoarrow column and can be used by e.g. deck.gl GeojsonLayer\n */\nexport type BinaryDataFromGeoArrow = {\n /** Binary format geometries, an array of BinaryFeatureCollection */\n binaryGeometries: BinaryFeatures[];\n /** Boundary of the binary geometries */\n bounds: [number, number, number, number];\n /** Feature types of the binary geometries */\n featureTypes: {polygon: boolean; point: boolean; line: boolean};\n /** (Optional) mean centers of the binary geometries for e.g. polygon filtering */\n meanCenters?: number[][];\n};\n\n/**\n * Binary geometry content returned from getBinaryGeometriesFromChunk\n */\ntype BinaryGeometryContent = {\n // Array of Point feature indexes by vertex\n featureIds: Uint32Array;\n /** Flat coordinate array of e.g. x, y or x,y,z */\n flatCoordinateArray: Float64Array;\n /** Dimention of each position */\n nDim: number;\n /** Array of geometry offsets: the start index of primitive geometry */\n geomOffset: Int32Array;\n /** Array of geometry indicies: the start index of each geometry */\n geometryIndicies: Uint16Array;\n /** (Optional) indices of triangels returned from polygon tessellation (Polygon only) */\n triangles?: Uint32Array;\n /** (Optional) array of mean center of each geometry */\n meanCenters?: Float64Array;\n};\n\n/**\n * binary geometry template, see deck.gl BinaryGeometry\n */\nexport const BINARY_GEOMETRY_TEMPLATE = {\n globalFeatureIds: {value: new Uint32Array(0), size: 1},\n positions: {value: new Float32Array(0), size: 2},\n properties: [],\n numericProps: {},\n featureIds: {value: new Uint32Array(0), size: 1}\n};\n\nexport type BinaryGeometriesFromArrowOptions = {\n /** option to specify which chunk to get binary geometries from, for progressive rendering */\n chunkIndex?: number;\n /** option to get mean centers from geometries, for polygon filtering */\n calculateMeanCenters?: boolean;\n /** option to compute the triangle indices by tesselating polygons */\n triangulate?: boolean;\n};\n\n/**\n * get binary geometries from geoarrow column\n *\n * @param geoColumn the geoarrow column, e.g. arrowTable.getChildAt(geoColumnIndex)\n * @param geoEncoding the geo encoding of the geoarrow column, e.g. getGeoArrowEncoding(arrowTable.schema, geoColumnName)\n * @param options options for getting binary geometries {meanCenter: boolean}\n * @returns BinaryDataFromGeoArrow\n */\nexport function getBinaryGeometriesFromArrow(\n geoColumn: arrow.Vector,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryDataFromGeoArrow {\n const featureTypes = {\n polygon: geoEncoding === 'geoarrow.multipolygon' || geoEncoding === 'geoarrow.polygon',\n point: geoEncoding === 'geoarrow.multipoint' || geoEncoding === 'geoarrow.point',\n line: geoEncoding === 'geoarrow.multilinestring' || geoEncoding === 'geoarrow.linestring'\n };\n\n const chunks = options?.chunkIndex ? [geoColumn.data[options?.chunkIndex]] : geoColumn.data;\n let bounds: [number, number, number, number] = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = 0;\n const binaryGeometries: BinaryFeatures[] = [];\n\n chunks.forEach((chunk) => {\n const {featureIds, flatCoordinateArray, nDim, geomOffset, triangles} =\n getBinaryGeometriesFromChunk(chunk, geoEncoding, options);\n\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\n }\n\n const binaryContent = {\n globalFeatureIds: {value: globalFeatureIds, size: 1},\n positions: {\n value: flatCoordinateArray,\n size: nDim\n },\n featureIds: {value: featureIds, size: 1},\n properties: [...Array(chunk.length).keys()].map((i) => ({\n index: i + globalFeatureIdOffset\n }))\n };\n\n // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatures structure must have points, lines, polygons even if they are empty\n binaryGeometries.push({\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.point ? binaryContent : {})\n },\n lines: {\n type: 'LineString',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.line ? binaryContent : {}),\n pathIndices: {value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1}\n },\n polygons: {\n type: 'Polygon',\n ...BINARY_GEOMETRY_TEMPLATE,\n ...(featureTypes.polygon ? binaryContent : {}),\n polygonIndices: {\n // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n primitivePolygonIndices: {\n value: featureTypes.polygon ? geomOffset : new Uint16Array(0),\n size: 1\n },\n ...(triangles ? {triangles: {value: triangles, size: 1}} : {})\n }\n });\n\n bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.calculateMeanCenters\n ? {meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries)}\n : {})\n };\n}\n\n/**\n * Get mean centers from binary geometries\n * @param binaryGeometries binary geometries from geoarrow column, an array of BinaryFeatureCollection\n * @returns mean centers of the binary geometries\n */\nexport function getMeanCentersFromBinaryGeometries(binaryGeometries: BinaryFeatures[]): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatures) => {\n let binaryGeometryType: keyof typeof BinaryGeometryType | null = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.points;\n } else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.lines;\n } else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.polygons;\n }\n\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices =\n binaryContent.type === 'Polygon' ? binaryContent.primitivePolygonIndices?.value : undefined;\n\n const meanCenters = getMeanCentersFromGeometry(\n featureIds,\n flatCoordinateArray,\n nDim,\n binaryGeometryType,\n primitivePolygonIndices\n );\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\n}\n\n/**\n * Get mean centers from raw coordinates and feature ids\n * @param featureIds Array of feature ids indexes by vertex\n * @param flatCoordinateArray Array of vertex, e.g. x, y or x, y, z, positions\n * @param nDim number of dimensions per position\n * @returns - mean centers of each polygon\n */\nfunction getMeanCentersFromGeometry(\n featureIds: TypedArray,\n flatCoordinateArray: TypedArray,\n nDim: number,\n geometryType: keyof typeof BinaryGeometryType,\n primitivePolygonIndices?: TypedArray\n) {\n const meanCenters: number[][] = [];\n const vertexCount = flatCoordinateArray.length;\n let vertexIndex = 0;\n let coordIdx = 0;\n let primitiveIdx = 0;\n while (vertexIndex < vertexCount) {\n const featureId = featureIds[vertexIndex / nDim];\n const center = [0, 0];\n let vertexCountInFeature = 0;\n while (vertexIndex < vertexCount && featureIds[coordIdx] === featureId) {\n if (\n geometryType === BinaryGeometryType.polygons &&\n primitivePolygonIndices?.[primitiveIdx] === coordIdx\n ) {\n // skip the first point since it is the same as the last point in each ring for polygons\n vertexIndex += nDim;\n primitiveIdx++;\n } else {\n center[0] += flatCoordinateArray[vertexIndex];\n center[1] += flatCoordinateArray[vertexIndex + 1];\n vertexIndex += nDim;\n vertexCountInFeature++;\n }\n coordIdx += 1;\n }\n center[0] /= vertexCountInFeature;\n center[1] /= vertexCountInFeature;\n meanCenters.push(center);\n }\n return meanCenters;\n}\n\n/**\n * get binary geometries from geoarrow column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryGeometriesFromChunk(\n chunk: arrow.Data,\n geoEncoding: GeoArrowEncoding,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n switch (geoEncoding) {\n case 'geoarrow.point':\n case 'geoarrow.multipoint':\n return getBinaryPointsFromChunk(chunk, geoEncoding);\n case 'geoarrow.linestring':\n case 'geoarrow.multilinestring':\n return getBinaryLinesFromChunk(chunk, geoEncoding);\n case 'geoarrow.polygon':\n case 'geoarrow.multipolygon':\n return getBinaryPolygonsFromChunk(chunk, geoEncoding, options);\n default:\n throw Error('invalid geoarrow encoding');\n }\n}\n\n/**\n * get triangle indices. Allows deck.gl to skip performing costly triangulation on main thread.\n * @param polygonIndices Indices within positions of the start of each simple Polygon\n * @param primitivePolygonIndices Indices within positions of the start of each primitive Polygon/ring\n * @param flatCoordinateArray Array of x, y or x, y, z positions\n * @param nDim - number of dimensions per position\n * @returns\n */\nexport function getTriangleIndices(\n polygonIndices: Uint16Array,\n primitivePolygonIndices: Int32Array,\n flatCoordinateArray: Float64Array,\n nDim: number\n): Uint32Array | null {\n try {\n let primitiveIndex = 0;\n const triangles: number[] = [];\n // loop polygonIndices to get triangles\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startIdx = polygonIndices[i];\n const endIdx = polygonIndices[i + 1];\n // get subarray of flatCoordinateArray\n const slicedFlatCoords = flatCoordinateArray.subarray(startIdx * nDim, endIdx * nDim);\n // get holeIndices for earcut\n const holeIndices: number[] = [];\n while (primitivePolygonIndices[primitiveIndex] < endIdx) {\n if (primitivePolygonIndices[primitiveIndex] > startIdx) {\n holeIndices.push(primitivePolygonIndices[primitiveIndex] - startIdx);\n }\n primitiveIndex++;\n }\n const triangleIndices = earcut(\n slicedFlatCoords,\n holeIndices.length > 0 ? holeIndices : undefined,\n nDim\n );\n if (triangleIndices.length === 0) {\n throw Error('can not tesselate invalid polygon');\n }\n for (let j = 0; j < triangleIndices.length; j++) {\n triangles.push(triangleIndices[j] + startIdx);\n }\n }\n // convert traingles to Uint32Array\n const trianglesUint32 = new Uint32Array(triangles.length);\n for (let i = 0; i < triangles.length; i++) {\n trianglesUint32[i] = triangles[i];\n }\n return trianglesUint32;\n } catch (error) {\n // TODO - add logging\n // there is an expection when tesselating invalid polygon, e.g. polygon with self-intersection\n // return null to skip tesselating\n return null;\n }\n}\n\n/**\n * get binary polygons from geoarrow polygon column\n * @param chunk one chunk of geoarrow polygon column\n * @param geoEncoding the geo encoding of the geoarrow polygon column\n * @param options options for getting binary geometries\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPolygonsFromChunk(\n chunk: arrow.Data,\n geoEncoding: string,\n options?: BinaryGeometriesFromArrowOptions\n): BinaryGeometryContent {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\n\n const polygonData = isMultiPolygon ? chunk.children[0] : chunk;\n const polygonOffset = polygonData.valueOffsets;\n const partData = isMultiPolygon\n ? chunk.valueOffsets.map((i) => polygonOffset.at(i) || i)\n : chunk.valueOffsets;\n const ringData = polygonData.children[0];\n const pointData = ringData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = ringData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n const geometryIndicies = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndicies[i] = geomOffset[polygonOffset[i]];\n }\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n\n const triangles = options?.triangulate\n ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim)\n : null;\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies,\n ...(options?.triangulate && triangles ? {triangles} : {})\n };\n}\n\n/**\n * get binary lines from geoarrow line column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding the geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryLinesFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndicies is not needed for line string\n const geometryIndicies = new Uint16Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiLineString) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = geomOffset[partData[i]];\n const endIdx = geomOffset[partData[i + 1]];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n const startIdx = geomOffset[i];\n const endIdx = geomOffset[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n\n/**\n * get binary points from geoarrow point column\n * @param chunk one chunk/batch of geoarrow column\n * @param geoEncoding geo encoding of the geoarrow column\n * @returns BinaryGeometryContent\n */\nfunction getBinaryPointsFromChunk(chunk: arrow.Data, geoEncoding: string): BinaryGeometryContent {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n\n // geometryIndices is not needed for point\n const geometryIndicies = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\n\n if (isMultiPoint) {\n const partData = chunk.valueOffsets;\n for (let i = 0; i < partData.length - 1; i++) {\n const startIdx = partData[i];\n const endIdx = partData[i + 1];\n for (let j = startIdx; j < endIdx; j++) {\n featureIds[j] = i;\n }\n }\n } else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndicies\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"convert-geoarrow-to-binary-geometry.js","names":["earcut","updateBoundsFromGeoArrowSamples","BinaryGeometryType","getBinaryGeometryTemplate","globalFeatureIds","value","Uint32Array","size","positions","Float32Array","properties","numericProps","featureIds","getBinaryGeometriesFromArrow","geoColumn","geoEncoding","options","featureTypes","polygon","point","line","chunks","chunkIndex","undefined","data","bounds","Infinity","globalFeatureIdOffset","chunkOffset","binaryGeometries","forEach","chunk","flatCoordinateArray","nDim","geomOffset","triangles","getBinaryGeometriesFromChunk","length","i","binaryContent","Array","keys","map","index","push","shape","points","type","lines","pathIndices","Uint16Array","polygons","polygonIndices","primitivePolygonIndices","calculateMeanCenters","meanCenters","getMeanCentersFromBinaryGeometries","globalMeanCenters","binaryGeometry","binaryGeometryType","_binaryContent$primit","getMeanCentersFromGeometry","center","geometryType","vertexCount","vertexIndex","coordIdx","primitiveIdx","featureId","vertexCountInFeature","getBinaryPointsFromChunk","getBinaryLinesFromChunk","getBinaryPolygonsFromChunk","Error","getTriangleIndices","primitiveIndex","startIdx","endIdx","slicedFlatCoords","subarray","holeIndices","triangleIndices","j","trianglesUint32","error","isMultiPolygon","polygonData","children","polygonOffset","valueOffsets","partData","at","ringData","pointData","coordData","stride","values","geometryIndicies","numOfVertices","triangulate","isMultiLineString","lineData","isMultiPoint","Int32Array"],"sources":["../../src/geoarrow/convert-geoarrow-to-binary-geometry.ts"],"sourcesContent":["// loaders.gl\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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"convert-geoarrow-to-geojson-geometry.d.ts","sourceRoot":"","sources":["../../src/geoarrow/convert-geoarrow-to-geojson-geometry.ts"],"names":[],"mappings":"AAIA,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
+ {"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 +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, MIT license\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
+ {"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"geoarrow-loader.d.ts","sourceRoot":"","sources":["../src/geoarrow-loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,KAAK,EAAC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAInE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAAC;KAC1C,CAAC;CACH,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,UAAU,GAAG,cAAc,EAC3B,KAAK,EACL,qBAAqB,CAQtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAC3C,UAAU,GAAG,YAAY,EAAE,oBAAoB;AAC/C,AAD2B,oBAAoB;AAC/C,eAAe,GAAG,iBAAiB,EAAE,oBAAoB;AACzD,qBAAqB,CAatB,CAAC"}
1
+ {"version":3,"file":"geoarrow-loader.d.ts","sourceRoot":"","sources":["../src/geoarrow-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAEtF,OAAO,KAAK,EAAC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACxF,OAAO,KAAK,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAInE,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAAC;KAC1C,CAAC;CACH,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,UAAU,GAAG,cAAc,EAC3B,KAAK,EACL,qBAAqB,CAQtB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAC3C,UAAU,GAAG,YAAY,EAAE,oBAAoB;AAC/C,AAD2B,oBAAoB;AAC/C,eAAe,GAAG,iBAAiB,EAAE,oBAAoB;AACzD,qBAAqB,CAatB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"geoarrow-loader.js","names":["ArrowWorkerLoader","parseGeoArrowSync","parseGeoArrowInBatches","GeoArrowWorkerLoader","options","arrow","shape","GeoArrowLoader","parse","arraybuffer","parseSync","parseInBatches"],"sources":["../src/geoarrow-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {ArrowWorkerLoader} from './arrow-loader';\nimport type {GeoJSONTable, GeoJSONTableBatch, BinaryGeometry} from '@loaders.gl/schema';\nimport type {ArrowTable, ArrowTableBatch} from './lib/arrow-table';\nimport {parseGeoArrowSync} from './parsers/parse-geoarrow-sync';\nimport {parseGeoArrowInBatches} from './parsers/parse-geoarrow-in-batches';\n\nexport type GeoArrowLoaderOptions = LoaderOptions & {\n arrow?: {\n shape: 'arrow-table' | 'binary-geometry';\n };\n};\n\n/** ArrowJS table loader */\nexport const GeoArrowWorkerLoader: Loader<\n ArrowTable | BinaryGeometry,\n never,\n GeoArrowLoaderOptions\n> = {\n ...ArrowWorkerLoader,\n options: {\n arrow: {\n shape: 'arrow-table'\n }\n }\n};\n\n/**\n * GeoArrowLoader loads an Apache Arrow table, parses GeoArrow type extension data\n * to convert it to a GeoJSON table or a BinaryGeometry\n */\nexport const GeoArrowLoader: LoaderWithParser<\n ArrowTable | GeoJSONTable, // | BinaryGeometry,\n ArrowTableBatch | GeoJSONTableBatch, // | BinaryGeometry,\n GeoArrowLoaderOptions\n> = {\n ...ArrowWorkerLoader,\n options: {\n arrow: {\n shape: 'arrow-table'\n }\n },\n parse: async (arraybuffer: ArrayBuffer, options?: GeoArrowLoaderOptions) =>\n parseGeoArrowSync(arraybuffer, options?.arrow),\n parseSync: (arraybuffer: ArrayBuffer, options?: GeoArrowLoaderOptions) =>\n parseGeoArrowSync(arraybuffer, options?.arrow),\n parseInBatches: parseGeoArrowInBatches\n};\n"],"mappings":"SAIQA,iBAAiB;AAAA,SAGjBC,iBAAiB;AAAA,SACjBC,sBAAsB;AAS9B,OAAO,MAAMC,oBAIZ,GAAG;EACF,GAAGH,iBAAiB;EACpBI,OAAO,EAAE;IACPC,KAAK,EAAE;MACLC,KAAK,EAAE;IACT;EACF;AACF,CAAC;AAMD,OAAO,MAAMC,cAIZ,GAAG;EACF,GAAGP,iBAAiB;EACpBI,OAAO,EAAE;IACPC,KAAK,EAAE;MACLC,KAAK,EAAE;IACT;EACF,CAAC;EACDE,KAAK,EAAE,MAAAA,CAAOC,WAAwB,EAAEL,OAA+B,KACrEH,iBAAiB,CAACQ,WAAW,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;EAChDK,SAAS,EAAEA,CAACD,WAAwB,EAAEL,OAA+B,KACnEH,iBAAiB,CAACQ,WAAW,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;EAChDM,cAAc,EAAET;AAClB,CAAC"}
1
+ {"version":3,"file":"geoarrow-loader.js","names":["ArrowWorkerLoader","parseGeoArrowSync","parseGeoArrowInBatches","GeoArrowWorkerLoader","options","arrow","shape","GeoArrowLoader","parse","arraybuffer","parseSync","parseInBatches"],"sources":["../src/geoarrow-loader.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader, LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {ArrowWorkerLoader} from './arrow-loader';\nimport type {GeoJSONTable, GeoJSONTableBatch, BinaryGeometry} from '@loaders.gl/schema';\nimport type {ArrowTable, ArrowTableBatch} from './lib/arrow-table';\nimport {parseGeoArrowSync} from './parsers/parse-geoarrow-sync';\nimport {parseGeoArrowInBatches} from './parsers/parse-geoarrow-in-batches';\n\nexport type GeoArrowLoaderOptions = LoaderOptions & {\n arrow?: {\n shape: 'arrow-table' | 'binary-geometry';\n };\n};\n\n/** ArrowJS table loader */\nexport const GeoArrowWorkerLoader: Loader<\n ArrowTable | BinaryGeometry,\n never,\n GeoArrowLoaderOptions\n> = {\n ...ArrowWorkerLoader,\n options: {\n arrow: {\n shape: 'arrow-table'\n }\n }\n};\n\n/**\n * GeoArrowLoader loads an Apache Arrow table, parses GeoArrow type extension data\n * to convert it to a GeoJSON table or a BinaryGeometry\n */\nexport const GeoArrowLoader: LoaderWithParser<\n ArrowTable | GeoJSONTable, // | BinaryGeometry,\n ArrowTableBatch | GeoJSONTableBatch, // | BinaryGeometry,\n GeoArrowLoaderOptions\n> = {\n ...ArrowWorkerLoader,\n options: {\n arrow: {\n shape: 'arrow-table'\n }\n },\n parse: async (arraybuffer: ArrayBuffer, options?: GeoArrowLoaderOptions) =>\n parseGeoArrowSync(arraybuffer, options?.arrow),\n parseSync: (arraybuffer: ArrayBuffer, options?: GeoArrowLoaderOptions) =>\n parseGeoArrowSync(arraybuffer, options?.arrow),\n parseInBatches: parseGeoArrowInBatches\n};\n"],"mappings":"SAKQA,iBAAiB;AAAA,SAGjBC,iBAAiB;AAAA,SACjBC,sBAAsB;AAS9B,OAAO,MAAMC,oBAIZ,GAAG;EACF,GAAGH,iBAAiB;EACpBI,OAAO,EAAE;IACPC,KAAK,EAAE;MACLC,KAAK,EAAE;IACT;EACF;AACF,CAAC;AAMD,OAAO,MAAMC,cAIZ,GAAG;EACF,GAAGP,iBAAiB;EACpBI,OAAO,EAAE;IACPC,KAAK,EAAE;MACLC,KAAK,EAAE;IACT;EACF,CAAC;EACDE,KAAK,EAAE,MAAAA,CAAOC,WAAwB,EAAEL,OAA+B,KACrEH,iBAAiB,CAACQ,WAAW,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;EAChDK,SAAS,EAAEA,CAACD,WAAwB,EAAEL,OAA+B,KACnEH,iBAAiB,CAACQ,WAAW,EAAEL,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,KAAK,CAAC;EAChDM,cAAc,EAAET;AAClB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { encodeGeoArrowSync } from "./lib/encode-geoarrow.js";
2
- const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
2
+ const VERSION = typeof "4.1.0-alpha.10" !== 'undefined' ? "4.1.0-alpha.10" : 'latest';
3
3
  export const GeoArrowWriter = {
4
4
  name: 'Apache Arrow',
5
5
  id: 'arrow',
@@ -1 +1 @@
1
- {"version":3,"file":"geoarrow-writer.js","names":["encodeGeoArrowSync","VERSION","__VERSION__","GeoArrowWriter","name","id","module","version","extensions","mimeTypes","binary","options","encode","encodeArrow","data","encodeSync"],"sources":["../src/geoarrow-writer.ts"],"sourcesContent":["// import type {} from '@loaders.gl/loader-utils';\n\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport {GeoJSONTable, BinaryGeometry} from '@loaders.gl/schema';\nimport {encodeGeoArrowSync} from './lib/encode-geoarrow';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\ntype ArrowWriterOptions = WriterOptions & {\n arrow?: {};\n};\n\n/** Apache Arrow writer */\nexport const GeoArrowWriter: WriterWithEncoder<\n GeoJSONTable | BinaryGeometry,\n never,\n ArrowWriterOptions\n> = {\n name: 'Apache Arrow',\n id: 'arrow',\n module: 'arrow',\n version: VERSION,\n extensions: ['arrow', 'feather'],\n mimeTypes: [\n 'application/vnd.apache.arrow.file',\n 'application/vnd.apache.arrow.stream',\n 'application/octet-stream'\n ],\n binary: true,\n options: {},\n encode: async function encodeArrow(data, options?): Promise<ArrayBuffer> {\n // @ts-expect-error\n return encodeGeoArrowSync(data);\n },\n encodeSync(data, options?) {\n // @ts-expect-error\n return encodeGeoArrowSync(data);\n }\n};\n"],"mappings":"SAIQA,kBAAkB;AAI1B,MAAMC,OAAO,GAAG,OAAOC,WAAW,KAAK,WAAW,GAAGA,WAAW,GAAG,QAAQ;AAO3E,OAAO,MAAMC,cAIZ,GAAG;EACFC,IAAI,EAAE,cAAc;EACpBC,EAAE,EAAE,OAAO;EACXC,MAAM,EAAE,OAAO;EACfC,OAAO,EAAEN,OAAO;EAChBO,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;EAChCC,SAAS,EAAE,CACT,mCAAmC,EACnC,qCAAqC,EACrC,0BAA0B,CAC3B;EACDC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE,CAAC,CAAC;EACXC,MAAM,EAAE,eAAeC,WAAWA,CAACC,IAAI,EAAEH,OAAQ,EAAwB;IAEvE,OAAOX,kBAAkB,CAACc,IAAI,CAAC;EACjC,CAAC;EACDC,UAAUA,CAACD,IAAI,EAAEH,OAAQ,EAAE;IAEzB,OAAOX,kBAAkB,CAACc,IAAI,CAAC;EACjC;AACF,CAAC"}
1
+ {"version":3,"file":"geoarrow-writer.js","names":["encodeGeoArrowSync","VERSION","GeoArrowWriter","name","id","module","version","extensions","mimeTypes","binary","options","encode","encodeArrow","data","encodeSync"],"sources":["../src/geoarrow-writer.ts"],"sourcesContent":["// import type {} from '@loaders.gl/loader-utils';\n\nimport type {WriterWithEncoder, WriterOptions} from '@loaders.gl/loader-utils';\nimport {GeoJSONTable, BinaryGeometry} from '@loaders.gl/schema';\nimport {encodeGeoArrowSync} from './lib/encode-geoarrow';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\ntype ArrowWriterOptions = WriterOptions & {\n arrow?: {};\n};\n\n/** Apache Arrow writer */\nexport const GeoArrowWriter: WriterWithEncoder<\n GeoJSONTable | BinaryGeometry,\n never,\n ArrowWriterOptions\n> = {\n name: 'Apache Arrow',\n id: 'arrow',\n module: 'arrow',\n version: VERSION,\n extensions: ['arrow', 'feather'],\n mimeTypes: [\n 'application/vnd.apache.arrow.file',\n 'application/vnd.apache.arrow.stream',\n 'application/octet-stream'\n ],\n binary: true,\n options: {},\n encode: async function encodeArrow(data, options?): Promise<ArrayBuffer> {\n // @ts-expect-error\n return encodeGeoArrowSync(data);\n },\n encodeSync(data, options?) {\n // @ts-expect-error\n return encodeGeoArrowSync(data);\n }\n};\n"],"mappings":"SAIQA,kBAAkB;AAI1B,MAAMC,OAAO,GAAG,uBAAkB,KAAK,WAAW,sBAAiB,QAAQ;AAO3E,OAAO,MAAMC,cAIZ,GAAG;EACFC,IAAI,EAAE,cAAc;EACpBC,EAAE,EAAE,OAAO;EACXC,MAAM,EAAE,OAAO;EACfC,OAAO,EAAEL,OAAO;EAChBM,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;EAChCC,SAAS,EAAE,CACT,mCAAmC,EACnC,qCAAqC,EACrC,0BAA0B,CAC3B;EACDC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE,CAAC,CAAC;EACXC,MAAM,EAAE,eAAeC,WAAWA,CAACC,IAAI,EAAEH,OAAQ,EAAwB;IAEvE,OAAOV,kBAAkB,CAACa,IAAI,CAAC;EACjC,CAAC;EACDC,UAAUA,CAACD,IAAI,EAAEH,OAAQ,EAAE;IAEzB,OAAOV,kBAAkB,CAACa,IAAI,CAAC;EACjC;AACF,CAAC"}
package/dist/index.cjs CHANGED
@@ -33,7 +33,6 @@ __export(src_exports, {
33
33
  ArrowLoader: () => ArrowLoader,
34
34
  ArrowWorkerLoader: () => ArrowWorkerLoader,
35
35
  ArrowWriter: () => ArrowWriter,
36
- BINARY_GEOMETRY_TEMPLATE: () => BINARY_GEOMETRY_TEMPLATE,
37
36
  GeoArrowLoader: () => GeoArrowLoader,
38
37
  GeoArrowWorkerLoader: () => GeoArrowWorkerLoader,
39
38
  TriangulationWorker: () => TriangulationWorker,
@@ -45,8 +44,11 @@ __export(src_exports, {
45
44
  deserializeArrowType: () => deserializeArrowType,
46
45
  getArrowType: () => getArrowType,
47
46
  getBinaryGeometriesFromArrow: () => getBinaryGeometriesFromArrow,
47
+ getBinaryGeometryTemplate: () => getBinaryGeometryTemplate,
48
48
  getMeanCentersFromBinaryGeometries: () => getMeanCentersFromBinaryGeometries,
49
49
  getTriangleIndices: () => getTriangleIndices,
50
+ hardClone: () => hardClone,
51
+ parseGeoArrowOnWorker: () => parseGeoArrowOnWorker,
50
52
  parseGeometryFromArrow: () => parseGeometryFromArrow2,
51
53
  serializeArrowField: () => serializeArrowField,
52
54
  serializeArrowMetadata: () => serializeArrowMetadata,
@@ -465,11 +467,18 @@ function parseArrowSync(arrayBuffer, options) {
465
467
 
466
468
  // src/parsers/parse-arrow-in-batches.ts
467
469
  var arrow5 = __toESM(require("apache-arrow"), 1);
468
- function parseArrowInBatches(asyncIterator) {
470
+ function parseArrowInBatches(asyncIterator, options) {
469
471
  async function* makeArrowAsyncIterator() {
472
+ var _a, _b;
470
473
  const readers = arrow5.RecordBatchReader.readAll(asyncIterator);
471
474
  for await (const reader of readers) {
472
475
  for await (const recordBatch of reader) {
476
+ if (((_a = options == null ? void 0 : options.arrow) == null ? void 0 : _a.batchDebounceMs) !== void 0 && ((_b = options == null ? void 0 : options.arrow) == null ? void 0 : _b.batchDebounceMs) > 0) {
477
+ await new Promise((resolve) => {
478
+ var _a2;
479
+ return setTimeout(resolve, ((_a2 = options.arrow) == null ? void 0 : _a2.batchDebounceMs) || 0);
480
+ });
481
+ }
473
482
  const arrowTabledBatch = {
474
483
  shape: "arrow-table",
475
484
  batchType: "data",
@@ -653,22 +662,24 @@ function updateBoundsFromGeoArrowSamples(flatCoords, nDim, bounds, sampleSize =
653
662
  }
654
663
 
655
664
  // src/geoarrow/convert-geoarrow-to-binary-geometry.ts
656
- var BINARY_GEOMETRY_TEMPLATE = {
657
- globalFeatureIds: { value: new Uint32Array(0), size: 1 },
658
- positions: { value: new Float32Array(0), size: 2 },
659
- properties: [],
660
- numericProps: {},
661
- featureIds: { value: new Uint32Array(0), size: 1 }
662
- };
665
+ function getBinaryGeometryTemplate() {
666
+ return {
667
+ globalFeatureIds: { value: new Uint32Array(0), size: 1 },
668
+ positions: { value: new Float32Array(0), size: 2 },
669
+ properties: [],
670
+ numericProps: {},
671
+ featureIds: { value: new Uint32Array(0), size: 1 }
672
+ };
673
+ }
663
674
  function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
664
675
  const featureTypes = {
665
676
  polygon: geoEncoding === "geoarrow.multipolygon" || geoEncoding === "geoarrow.polygon",
666
677
  point: geoEncoding === "geoarrow.multipoint" || geoEncoding === "geoarrow.point",
667
678
  line: geoEncoding === "geoarrow.multilinestring" || geoEncoding === "geoarrow.linestring"
668
679
  };
669
- const chunks = (options == null ? void 0 : options.chunkIndex) ? [geoColumn.data[options == null ? void 0 : options.chunkIndex]] : geoColumn.data;
680
+ const chunks = (options == null ? void 0 : options.chunkIndex) !== void 0 && (options == null ? void 0 : options.chunkIndex) >= 0 ? [geoColumn.data[options == null ? void 0 : options.chunkIndex]] : geoColumn.data;
670
681
  let bounds = [Infinity, Infinity, -Infinity, -Infinity];
671
- let globalFeatureIdOffset = 0;
682
+ let globalFeatureIdOffset = (options == null ? void 0 : options.chunkOffset) || 0;
672
683
  const binaryGeometries = [];
673
684
  chunks.forEach((chunk) => {
674
685
  const { featureIds, flatCoordinateArray, nDim, geomOffset, triangles } = getBinaryGeometriesFromChunk(chunk, geoEncoding, options);
@@ -683,6 +694,7 @@ function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
683
694
  size: nDim
684
695
  },
685
696
  featureIds: { value: featureIds, size: 1 },
697
+ // eslint-disable-next-line no-loop-func
686
698
  properties: [...Array(chunk.length).keys()].map((i) => ({
687
699
  index: i + globalFeatureIdOffset
688
700
  }))
@@ -692,18 +704,18 @@ function getBinaryGeometriesFromArrow(geoColumn, geoEncoding, options) {
692
704
  shape: "binary-feature-collection",
693
705
  points: {
694
706
  type: "Point",
695
- ...BINARY_GEOMETRY_TEMPLATE,
707
+ ...getBinaryGeometryTemplate(),
696
708
  ...featureTypes.point ? binaryContent : {}
697
709
  },
698
710
  lines: {
699
711
  type: "LineString",
700
- ...BINARY_GEOMETRY_TEMPLATE,
712
+ ...getBinaryGeometryTemplate(),
701
713
  ...featureTypes.line ? binaryContent : {},
702
714
  pathIndices: { value: featureTypes.line ? geomOffset : new Uint16Array(0), size: 1 }
703
715
  },
704
716
  polygons: {
705
717
  type: "Polygon",
706
- ...BINARY_GEOMETRY_TEMPLATE,
718
+ ...getBinaryGeometryTemplate(),
707
719
  ...featureTypes.polygon ? binaryContent : {},
708
720
  polygonIndices: {
709
721
  // use geomOffset as polygonIndices same as primitivePolygonIndices since we are using earcut to get triangule indices
@@ -822,7 +834,7 @@ function getTriangleIndices(polygonIndices, primitivePolygonIndices, flatCoordin
822
834
  nDim
823
835
  );
824
836
  if (triangleIndices.length === 0) {
825
- throw Error("can not tesselate invalid polygon");
837
+ throw Error("earcut failed e.g. invalid polygon");
826
838
  }
827
839
  for (let j = 0; j < triangleIndices.length; j++) {
828
840
  triangles.push(triangleIndices[j] + startIdx);
@@ -864,8 +876,8 @@ function getBinaryPolygonsFromChunk(chunk, geoEncoding, options) {
864
876
  const triangles = (options == null ? void 0 : options.triangulate) ? getTriangleIndices(geometryIndicies, geomOffset, flatCoordinateArray, nDim) : null;
865
877
  return {
866
878
  featureIds,
867
- flatCoordinateArray,
868
879
  nDim,
880
+ flatCoordinateArray,
869
881
  geomOffset,
870
882
  geometryIndicies,
871
883
  ...(options == null ? void 0 : options.triangulate) && triangles ? { triangles } : {}
@@ -1092,6 +1104,51 @@ function arrowLineStringToFeature(arrowLineString) {
1092
1104
  };
1093
1105
  }
1094
1106
 
1107
+ // src/workers/hard-clone.ts
1108
+ var arrow7 = __toESM(require("apache-arrow"), 1);
1109
+ function hardClone(data, force = false) {
1110
+ if ("data" in data) {
1111
+ return new arrow7.Vector(data.data.map((data2) => hardClone(data2, force)));
1112
+ }
1113
+ const clonedChildren = [];
1114
+ for (const childData of data.children) {
1115
+ clonedChildren.push(hardClone(childData, force));
1116
+ }
1117
+ let clonedDictionary;
1118
+ if (data.dictionary !== void 0) {
1119
+ clonedDictionary = hardClone(data.dictionary, force);
1120
+ }
1121
+ const clonedBuffers = {
1122
+ [arrow7.BufferType.OFFSET]: cloneBuffer(data.buffers[arrow7.BufferType.OFFSET], force),
1123
+ [arrow7.BufferType.DATA]: cloneBuffer(data.buffers[arrow7.BufferType.DATA], force),
1124
+ [arrow7.BufferType.VALIDITY]: cloneBuffer(data.buffers[arrow7.BufferType.VALIDITY], force),
1125
+ [arrow7.BufferType.TYPE]: cloneBuffer(data.buffers[arrow7.BufferType.TYPE], force)
1126
+ };
1127
+ return new arrow7.Data(
1128
+ data.type,
1129
+ data.offset,
1130
+ data.length,
1131
+ // @ts-expect-error _nullCount is protected. We're using it here to mimic
1132
+ // `Data.clone`
1133
+ data._nullCount,
1134
+ clonedBuffers,
1135
+ clonedChildren,
1136
+ clonedDictionary
1137
+ );
1138
+ }
1139
+ function isTypedArraySliced(arr) {
1140
+ return !(arr.byteOffset === 0 && arr.byteLength === arr.buffer.byteLength);
1141
+ }
1142
+ function cloneBuffer(arr, force) {
1143
+ if (arr === void 0) {
1144
+ return arr;
1145
+ }
1146
+ if (!force && !isTypedArraySliced(arr)) {
1147
+ return arr;
1148
+ }
1149
+ return arr.slice();
1150
+ }
1151
+
1095
1152
  // src/triangulate-on-worker.ts
1096
1153
  var import_worker_utils = require("@loaders.gl/worker-utils");
1097
1154
  var VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
@@ -1103,7 +1160,10 @@ var TriangulationWorker = {
1103
1160
  options: {}
1104
1161
  };
1105
1162
  function triangulateOnWorker(data, options = {}) {
1106
- return (0, import_worker_utils.processOnWorker)(TriangulationWorker, data, options);
1163
+ return (0, import_worker_utils.processOnWorker)(TriangulationWorker, { ...data, operation: "triangulate" }, options);
1164
+ }
1165
+ function parseGeoArrowOnWorker(data, options = {}) {
1166
+ return (0, import_worker_utils.processOnWorker)(TriangulationWorker, { ...data, operation: "parse-geoarrow" }, options);
1107
1167
  }
1108
1168
 
1109
1169
  // src/index.ts
package/dist/index.d.ts CHANGED
@@ -9,9 +9,11 @@ export { GeoArrowLoader, GeoArrowWorkerLoader } from './geoarrow-loader';
9
9
  export { serializeArrowSchema, deserializeArrowSchema, serializeArrowMetadata, deserializeArrowMetadata, serializeArrowField, deserializeArrowField, serializeArrowType, deserializeArrowType } from './schema/convert-arrow-schema';
10
10
  export type { GeoArrowEncoding } from '@loaders.gl/gis';
11
11
  export type { BinaryDataFromGeoArrow, BinaryGeometriesFromArrowOptions } from './geoarrow/convert-geoarrow-to-binary-geometry';
12
- export { BINARY_GEOMETRY_TEMPLATE, getBinaryGeometriesFromArrow, getTriangleIndices, getMeanCentersFromBinaryGeometries } from './geoarrow/convert-geoarrow-to-binary-geometry';
12
+ export { getBinaryGeometryTemplate, getBinaryGeometriesFromArrow, getTriangleIndices, getMeanCentersFromBinaryGeometries } from './geoarrow/convert-geoarrow-to-binary-geometry';
13
13
  export { updateBoundsFromGeoArrowSamples } from './geoarrow/get-arrow-bounds';
14
14
  export { parseGeometryFromArrow } from './geoarrow/convert-geoarrow-to-geojson-geometry';
15
15
  export { convertArrowToGeoJSONTable } from './tables/convert-arrow-to-geojson-table';
16
- export { TriangulationWorker, triangulateOnWorker } from './triangulate-on-worker';
16
+ export { hardClone } from './workers/hard-clone';
17
+ export type { ParseGeoArrowInput, ParseGeoArrowResult } from './triangulate-on-worker';
18
+ export { TriangulationWorker, triangulateOnWorker, parseGeoArrowOnWorker } from './triangulate-on-worker';
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AASvD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAKvD,YAAY,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AAIrC,YAAY,EAAC,kBAAkB,EAAC,CAAC;AACjC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAC,cAAc,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAKvC,YAAY,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAItD,YAAY,EACV,sBAAsB,EACtB,gCAAgC,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,EAClB,kCAAkC,EACnC,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAC,+BAA+B,EAAC,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAC,sBAAsB,EAAC,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAC,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AAInF,OAAO,EAAC,mBAAmB,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,gBAAgB,CAAC;AASvD,OAAO,EAAC,YAAY,EAAC,MAAM,2BAA2B,CAAC;AAKvD,YAAY,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AAIrC,YAAY,EAAC,kBAAkB,EAAC,CAAC;AACjC,OAAO,EAAC,WAAW,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAC,cAAc,EAAE,oBAAoB,EAAC,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAKvC,YAAY,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAItD,YAAY,EACV,sBAAsB,EACtB,gCAAgC,EACjC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,kBAAkB,EAClB,kCAAkC,EACnC,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAC,+BAA+B,EAAC,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAC,sBAAsB,EAAC,MAAM,iDAAiD,CAAC;AAEvF,OAAO,EAAC,0BAA0B,EAAC,MAAM,yCAAyC,CAAC;AAGnF,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAE/C,YAAY,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AACrF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -7,9 +7,10 @@ export { ArrowLoader, ArrowWorkerLoader } from "./arrow-loader.js";
7
7
  export { ArrowWriter } from "./arrow-writer.js";
8
8
  export { GeoArrowLoader, GeoArrowWorkerLoader } from "./geoarrow-loader.js";
9
9
  export { serializeArrowSchema, deserializeArrowSchema, serializeArrowMetadata, deserializeArrowMetadata, serializeArrowField, deserializeArrowField, serializeArrowType, deserializeArrowType } from "./schema/convert-arrow-schema.js";
10
- export { BINARY_GEOMETRY_TEMPLATE, getBinaryGeometriesFromArrow, getTriangleIndices, getMeanCentersFromBinaryGeometries } from "./geoarrow/convert-geoarrow-to-binary-geometry.js";
10
+ export { getBinaryGeometryTemplate, getBinaryGeometriesFromArrow, getTriangleIndices, getMeanCentersFromBinaryGeometries } from "./geoarrow/convert-geoarrow-to-binary-geometry.js";
11
11
  export { updateBoundsFromGeoArrowSamples } from "./geoarrow/get-arrow-bounds.js";
12
12
  export { parseGeometryFromArrow } from "./geoarrow/convert-geoarrow-to-geojson-geometry.js";
13
13
  export { convertArrowToGeoJSONTable } from "./tables/convert-arrow-to-geojson-table.js";
14
- export { TriangulationWorker, triangulateOnWorker } from "./triangulate-on-worker.js";
14
+ export { hardClone } from "./workers/hard-clone.js";
15
+ export { TriangulationWorker, triangulateOnWorker, parseGeoArrowOnWorker } from "./triangulate-on-worker.js";
15
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TableBatchBuilder","ArrowTableBatchAggregator","ArrowBatch","getArrowType","VECTOR_TYPES","ArrowLoader","ArrowWorkerLoader","ArrowWriter","GeoArrowLoader","GeoArrowWorkerLoader","serializeArrowSchema","deserializeArrowSchema","serializeArrowMetadata","deserializeArrowMetadata","serializeArrowField","deserializeArrowField","serializeArrowType","deserializeArrowType","BINARY_GEOMETRY_TEMPLATE","getBinaryGeometriesFromArrow","getTriangleIndices","getMeanCentersFromBinaryGeometries","updateBoundsFromGeoArrowSamples","parseGeometryFromArrow","convertArrowToGeoJSONTable","TriangulationWorker","triangulateOnWorker"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {ArrowLoaderOptions} from './arrow-loader';\nimport {TableBatchBuilder} from '@loaders.gl/schema';\nimport {ArrowTableBatchAggregator} from './lib/arrow-table-batch';\n\n// Make the ArrowBatch type available\nTableBatchBuilder.ArrowBatch = ArrowTableBatchAggregator;\n\n// TYPES\n\nexport {getArrowType} from './schema/arrow-type-utils';\n\n// SCHEMA\n\n// Types\nexport type {ArrowTable, ArrowTableBatch} from './lib/arrow-table';\nexport {VECTOR_TYPES} from './types';\n\n// Arrow loader / Writer\n\nexport type {ArrowLoaderOptions};\nexport {ArrowLoader, ArrowWorkerLoader} from './arrow-loader';\n\nexport {ArrowWriter} from './arrow-writer';\n\n// Geoarrow loader\nexport {GeoArrowLoader, GeoArrowWorkerLoader} from './geoarrow-loader';\n\n// Schema utils\nexport {\n serializeArrowSchema,\n deserializeArrowSchema,\n serializeArrowMetadata,\n deserializeArrowMetadata,\n serializeArrowField,\n deserializeArrowField,\n serializeArrowType,\n deserializeArrowType\n} from './schema/convert-arrow-schema';\n\n// EXPERIMENTAL\n\n// Arrow Utils\nexport type {GeoArrowEncoding} from '@loaders.gl/gis';\n// getGeometryColumnsFromArrowTable,\n// getGeoArrowEncoding\n\nexport type {\n BinaryDataFromGeoArrow,\n BinaryGeometriesFromArrowOptions\n} from './geoarrow/convert-geoarrow-to-binary-geometry';\nexport {\n BINARY_GEOMETRY_TEMPLATE,\n getBinaryGeometriesFromArrow,\n getTriangleIndices,\n getMeanCentersFromBinaryGeometries\n} from './geoarrow/convert-geoarrow-to-binary-geometry';\n\nexport {updateBoundsFromGeoArrowSamples} from './geoarrow/get-arrow-bounds';\n\nexport {parseGeometryFromArrow} from './geoarrow/convert-geoarrow-to-geojson-geometry';\n\nexport {convertArrowToGeoJSONTable} from './tables/convert-arrow-to-geojson-table';\n\n// EXPERIMENTAL WORKER\n\nexport {TriangulationWorker, triangulateOnWorker} from './triangulate-on-worker';\n"],"mappings":"AAIA,SAAQA,iBAAiB,QAAO,oBAAoB;AAAC,SAC7CC,yBAAyB;AAGjCD,iBAAiB,CAACE,UAAU,GAAGD,yBAAyB;AAAC,SAIjDE,YAAY;AAAA,SAMZC,YAAY;AAAA,SAKZC,WAAW,EAAEC,iBAAiB;AAAA,SAE9BC,WAAW;AAAA,SAGXC,cAAc,EAAEC,oBAAoB;AAAA,SAI1CC,oBAAoB,EACpBC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB,EACxBC,mBAAmB,EACnBC,qBAAqB,EACrBC,kBAAkB,EAClBC,oBAAoB;AAAA,SAepBC,wBAAwB,EACxBC,4BAA4B,EAC5BC,kBAAkB,EAClBC,kCAAkC;AAAA,SAG5BC,+BAA+B;AAAA,SAE/BC,sBAAsB;AAAA,SAEtBC,0BAA0B;AAAA,SAI1BC,mBAAmB,EAAEC,mBAAmB"}
1
+ {"version":3,"file":"index.js","names":["TableBatchBuilder","ArrowTableBatchAggregator","ArrowBatch","getArrowType","VECTOR_TYPES","ArrowLoader","ArrowWorkerLoader","ArrowWriter","GeoArrowLoader","GeoArrowWorkerLoader","serializeArrowSchema","deserializeArrowSchema","serializeArrowMetadata","deserializeArrowMetadata","serializeArrowField","deserializeArrowField","serializeArrowType","deserializeArrowType","getBinaryGeometryTemplate","getBinaryGeometriesFromArrow","getTriangleIndices","getMeanCentersFromBinaryGeometries","updateBoundsFromGeoArrowSamples","parseGeometryFromArrow","convertArrowToGeoJSONTable","hardClone","TriangulationWorker","triangulateOnWorker","parseGeoArrowOnWorker"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ArrowLoaderOptions} from './arrow-loader';\nimport {TableBatchBuilder} from '@loaders.gl/schema';\nimport {ArrowTableBatchAggregator} from './lib/arrow-table-batch';\n\n// Make the ArrowBatch type available\nTableBatchBuilder.ArrowBatch = ArrowTableBatchAggregator;\n\n// TYPES\n\nexport {getArrowType} from './schema/arrow-type-utils';\n\n// SCHEMA\n\n// Types\nexport type {ArrowTable, ArrowTableBatch} from './lib/arrow-table';\nexport {VECTOR_TYPES} from './types';\n\n// Arrow loader / Writer\n\nexport type {ArrowLoaderOptions};\nexport {ArrowLoader, ArrowWorkerLoader} from './arrow-loader';\n\nexport {ArrowWriter} from './arrow-writer';\n\n// Geoarrow loader\nexport {GeoArrowLoader, GeoArrowWorkerLoader} from './geoarrow-loader';\n\n// Schema utils\nexport {\n serializeArrowSchema,\n deserializeArrowSchema,\n serializeArrowMetadata,\n deserializeArrowMetadata,\n serializeArrowField,\n deserializeArrowField,\n serializeArrowType,\n deserializeArrowType\n} from './schema/convert-arrow-schema';\n\n// EXPERIMENTAL\n\n// Arrow Utils\nexport type {GeoArrowEncoding} from '@loaders.gl/gis';\n// getGeometryColumnsFromArrowTable,\n// getGeoArrowEncoding\n\nexport type {\n BinaryDataFromGeoArrow,\n BinaryGeometriesFromArrowOptions\n} from './geoarrow/convert-geoarrow-to-binary-geometry';\nexport {\n getBinaryGeometryTemplate,\n getBinaryGeometriesFromArrow,\n getTriangleIndices,\n getMeanCentersFromBinaryGeometries\n} from './geoarrow/convert-geoarrow-to-binary-geometry';\n\nexport {updateBoundsFromGeoArrowSamples} from './geoarrow/get-arrow-bounds';\n\nexport {parseGeometryFromArrow} from './geoarrow/convert-geoarrow-to-geojson-geometry';\n\nexport {convertArrowToGeoJSONTable} from './tables/convert-arrow-to-geojson-table';\n\n// EXPERIMENTAL WORKER\nexport {hardClone} from './workers/hard-clone';\n\nexport type {ParseGeoArrowInput, ParseGeoArrowResult} from './triangulate-on-worker';\nexport {\n TriangulationWorker,\n triangulateOnWorker,\n parseGeoArrowOnWorker\n} from './triangulate-on-worker';\n"],"mappings":"AAKA,SAAQA,iBAAiB,QAAO,oBAAoB;AAAC,SAC7CC,yBAAyB;AAGjCD,iBAAiB,CAACE,UAAU,GAAGD,yBAAyB;AAAC,SAIjDE,YAAY;AAAA,SAMZC,YAAY;AAAA,SAKZC,WAAW,EAAEC,iBAAiB;AAAA,SAE9BC,WAAW;AAAA,SAGXC,cAAc,EAAEC,oBAAoB;AAAA,SAI1CC,oBAAoB,EACpBC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB,EACxBC,mBAAmB,EACnBC,qBAAqB,EACrBC,kBAAkB,EAClBC,oBAAoB;AAAA,SAepBC,yBAAyB,EACzBC,4BAA4B,EAC5BC,kBAAkB,EAClBC,kCAAkC;AAAA,SAG5BC,+BAA+B;AAAA,SAE/BC,sBAAsB;AAAA,SAEtBC,0BAA0B;AAAA,SAG1BC,SAAS;AAAA,SAIfC,mBAAmB,EACnBC,mBAAmB,EACnBC,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-table-batch.d.ts","sourceRoot":"","sources":["../../src/lib/arrow-table-batch.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,qBAAa,yBAA0B,SAAQ,4BAA4B;IACzE,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,MAAM,KAAA,EAAE,OAAO,KAAA;IAK3B,QAAQ,IAAI,eAAe,GAAG,IAAI;CA4BnC"}
1
+ {"version":3,"file":"arrow-table-batch.d.ts","sourceRoot":"","sources":["../../src/lib/arrow-table-batch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,qBAAa,yBAA0B,SAAQ,4BAA4B;IACzE,WAAW,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBAErB,MAAM,KAAA,EAAE,OAAO,KAAA;IAK3B,QAAQ,IAAI,eAAe,GAAG,IAAI;CA4BnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-table-batch.js","names":["ColumnarTableBatchAggregator","arrow","ArrowTableBatchAggregator","constructor","schema","options","arrowSchema","getBatch","batch","getArrowSchema","arrowVectors","getArrowVectors","data","recordBatch","RecordBatch","makeData","type","Struct","fields","children","map","_ref","shape","batchType","Table","length","arrowFields","key","field","Float32Array","metadata","Map","arrowField","Field","name","Float32","nullable","push","Error","Schema","vector","arrowVector","makeVector"],"sources":["../../src/lib/arrow-table-batch.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {ColumnarTableBatchAggregator} from '@loaders.gl/schema';\nimport type {ArrowTableBatch} from './arrow-table';\nimport * as arrow from 'apache-arrow';\n\nexport class ArrowTableBatchAggregator extends ColumnarTableBatchAggregator {\n arrowSchema: arrow.Schema | null;\n\n constructor(schema, options) {\n super(schema, options);\n this.arrowSchema = null;\n }\n\n getBatch(): ArrowTableBatch | null {\n const batch = super.getBatch();\n if (batch) {\n // Get the arrow schema\n this.arrowSchema = this.arrowSchema || getArrowSchema(batch.schema);\n\n // Get arrow format vectors\n const arrowVectors = getArrowVectors(this.arrowSchema, batch.data);\n\n // Create the record batch\n const recordBatch = new arrow.RecordBatch(\n this.arrowSchema,\n arrow.makeData({\n type: new arrow.Struct(this.arrowSchema.fields),\n children: arrowVectors.map(({data}) => data[0])\n })\n );\n\n return {\n shape: 'arrow-table',\n batchType: 'data',\n data: new arrow.Table([recordBatch]),\n length: batch.length\n };\n }\n\n return null;\n }\n}\n\n// Convert from a simple loaders.gl schema to an Arrow schema\nfunction getArrowSchema(schema): arrow.Schema {\n const arrowFields: arrow.Field[] = [];\n for (const key in schema) {\n const field = schema[key];\n if (field.type === Float32Array) {\n // TODO - just store the original field as metadata?\n const metadata = new Map(); // field;\n // arrow: new arrow.Field(name, nullable, metadata)\n const arrowField = new arrow.Field(field.name, new arrow.Float32(), field.nullable, metadata);\n arrowFields.push(arrowField);\n }\n }\n if (arrowFields.length === 0) {\n throw new Error('No arrow convertible fields');\n }\n\n return new arrow.Schema(arrowFields);\n}\n\n// Convert from simple loaders.gl arrays to arrow vectors\nfunction getArrowVectors(arrowSchema, data): arrow.Vector[] {\n const arrowVectors: any[] = [];\n for (const field of arrowSchema.fields) {\n const vector = data[field.name];\n if (vector instanceof Float32Array) {\n const arrowVector = arrow.makeVector(vector);\n arrowVectors.push(arrowVector);\n }\n }\n if (arrowSchema.fields.length !== arrowVectors.length) {\n throw new Error('Some columns not arrow convertible');\n }\n return arrowVectors;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"arrow-table-batch.js","names":["ColumnarTableBatchAggregator","arrow","ArrowTableBatchAggregator","constructor","schema","options","arrowSchema","getBatch","batch","getArrowSchema","arrowVectors","getArrowVectors","data","recordBatch","RecordBatch","makeData","type","Struct","fields","children","map","_ref","shape","batchType","Table","length","arrowFields","key","field","Float32Array","metadata","Map","arrowField","Field","name","Float32","nullable","push","Error","Schema","vector","arrowVector","makeVector"],"sources":["../../src/lib/arrow-table-batch.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {ColumnarTableBatchAggregator} from '@loaders.gl/schema';\nimport type {ArrowTableBatch} from './arrow-table';\nimport * as arrow from 'apache-arrow';\n\nexport class ArrowTableBatchAggregator extends ColumnarTableBatchAggregator {\n arrowSchema: arrow.Schema | null;\n\n constructor(schema, options) {\n super(schema, options);\n this.arrowSchema = null;\n }\n\n getBatch(): ArrowTableBatch | null {\n const batch = super.getBatch();\n if (batch) {\n // Get the arrow schema\n this.arrowSchema = this.arrowSchema || getArrowSchema(batch.schema);\n\n // Get arrow format vectors\n const arrowVectors = getArrowVectors(this.arrowSchema, batch.data);\n\n // Create the record batch\n const recordBatch = new arrow.RecordBatch(\n this.arrowSchema,\n arrow.makeData({\n type: new arrow.Struct(this.arrowSchema.fields),\n children: arrowVectors.map(({data}) => data[0])\n })\n );\n\n return {\n shape: 'arrow-table',\n batchType: 'data',\n data: new arrow.Table([recordBatch]),\n length: batch.length\n };\n }\n\n return null;\n }\n}\n\n// Convert from a simple loaders.gl schema to an Arrow schema\nfunction getArrowSchema(schema): arrow.Schema {\n const arrowFields: arrow.Field[] = [];\n for (const key in schema) {\n const field = schema[key];\n if (field.type === Float32Array) {\n // TODO - just store the original field as metadata?\n const metadata = new Map(); // field;\n // arrow: new arrow.Field(name, nullable, metadata)\n const arrowField = new arrow.Field(field.name, new arrow.Float32(), field.nullable, metadata);\n arrowFields.push(arrowField);\n }\n }\n if (arrowFields.length === 0) {\n throw new Error('No arrow convertible fields');\n }\n\n return new arrow.Schema(arrowFields);\n}\n\n// Convert from simple loaders.gl arrays to arrow vectors\nfunction getArrowVectors(arrowSchema, data): arrow.Vector[] {\n const arrowVectors: any[] = [];\n for (const field of arrowSchema.fields) {\n const vector = data[field.name];\n if (vector instanceof Float32Array) {\n const arrowVector = arrow.makeVector(vector);\n arrowVectors.push(arrowVector);\n }\n }\n if (arrowSchema.fields.length !== arrowVectors.length) {\n throw new Error('Some columns not arrow convertible');\n }\n return arrowVectors;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-table.d.ts","sourceRoot":"","sources":["../../src/lib/arrow-table.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,KAAK,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"arrow-table.d.ts","sourceRoot":"","sources":["../../src/lib/arrow-table.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,KAAK,EAAE,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"arrow-table.js","names":[],"sources":["../../src/lib/arrow-table.ts"],"sourcesContent":["// loaders.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {Batch, Schema} from '@loaders.gl/schema';\nimport type * as arrow from 'apache-arrow';\n\n/**\n * A table organized as an Apache Arrow table\n * @note This is a variant of the type from loaders.gl/schema\n */\nexport type ArrowTable = {\n shape: 'arrow-table';\n schema?: Schema;\n data: arrow.Table;\n};\n\n/**\n * Batch for a table organized as an Apache Arrow table\n * @note This is a variant of the type from loaders.gl/schema\n */\nexport type ArrowTableBatch = Batch & {\n shape: 'arrow-table';\n schemaType?: 'explicit' | 'deduced';\n schema?: Schema;\n data: arrow.Table; // ApacheRecordBatch;\n length: number;\n};\n"],"mappings":""}
1
+ {"version":3,"file":"arrow-table.js","names":[],"sources":["../../src/lib/arrow-table.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Batch, Schema} from '@loaders.gl/schema';\nimport type * as arrow from 'apache-arrow';\n\n/**\n * A table organized as an Apache Arrow table\n * @note This is a variant of the type from loaders.gl/schema\n */\nexport type ArrowTable = {\n shape: 'arrow-table';\n schema?: Schema;\n data: arrow.Table;\n};\n\n/**\n * Batch for a table organized as an Apache Arrow table\n * @note This is a variant of the type from loaders.gl/schema\n */\nexport type ArrowTableBatch = Batch & {\n shape: 'arrow-table';\n schemaType?: 'explicit' | 'deduced';\n schema?: Schema;\n data: arrow.Table; // ApacheRecordBatch;\n length: number;\n};\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"encode-arrow.d.ts","sourceRoot":"","sources":["../../src/lib/encode-arrow.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAe,MAAM,UAAU,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,EAAE,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAShE"}
1
+ {"version":3,"file":"encode-arrow.d.ts","sourceRoot":"","sources":["../../src/lib/encode-arrow.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAe,MAAM,UAAU,CAAC;AAEpD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,EAAE,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAShE"}