@loaders.gl/gis 4.4.0-alpha.2 → 4.4.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +3 -3
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/binary-geometry-api/binary-geometry-info.js +1 -0
- package/dist/lib/binary-geometry-api/binary-geometry-info.js.map +1 -0
- package/dist/lib/binary-geometry-api/concat-binary-geometry.js +1 -0
- package/dist/lib/binary-geometry-api/concat-binary-geometry.js.map +1 -0
- package/dist/lib/binary-geometry-api/transform-coordinates.js +1 -0
- package/dist/lib/binary-geometry-api/transform-coordinates.js.map +1 -0
- package/dist/lib/feature-collection-converters/convert-binary-features-to-geojson.js +1 -0
- package/dist/lib/feature-collection-converters/convert-binary-features-to-geojson.js.map +1 -0
- package/dist/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.js +1 -0
- package/dist/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.js.map +1 -0
- package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.js +1 -0
- package/dist/lib/feature-collection-converters/convert-geoarrow-to-binary-features.js.map +1 -0
- package/dist/lib/feature-collection-converters/convert-geojson-to-binary-features.js +1 -0
- package/dist/lib/feature-collection-converters/convert-geojson-to-binary-features.js.map +1 -0
- package/dist/lib/feature-collection-converters/convert-geojson-to-flat-geojson.js +1 -0
- package/dist/lib/feature-collection-converters/convert-geojson-to-flat-geojson.js.map +1 -0
- package/dist/lib/feature-collection-converters/helpers/flat-geojson-to-binary-types.js +1 -0
- package/dist/lib/feature-collection-converters/helpers/flat-geojson-to-binary-types.js.map +1 -0
- package/dist/lib/geometry-api/geometry-info.js +1 -0
- package/dist/lib/geometry-api/geometry-info.js.map +1 -0
- package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.js +1 -0
- package/dist/lib/geometry-converters/convert-binary-geometry-to-geojson.js.map +1 -0
- package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.js +1 -0
- package/dist/lib/geometry-converters/convert-geoarrow-to-geojson.js.map +1 -0
- package/dist/lib/geometry-converters/convert-to-geojson.js +1 -0
- package/dist/lib/geometry-converters/convert-to-geojson.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-twkb.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkb.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-geometry-to-wkt.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-twkb-to-geometry.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.d.ts +1 -1
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.d.ts.map +1 -1
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.d.ts +1 -1
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.d.ts.map +1 -1
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkb-to-geometry.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.js +1 -0
- package/dist/lib/geometry-converters/wkb/convert-wkt-to-geometry.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.d.ts +4 -4
- package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.d.ts.map +1 -1
- package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.js +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/parse-wkb-header.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/wkb-types.js +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/wkb-types.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.js +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/wkb-utils.js.map +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.js +1 -0
- package/dist/lib/geometry-converters/wkb/helpers/write-wkb-header.js.map +1 -0
- package/dist/lib/table-converters/convert-geoarrow-table.js +1 -0
- package/dist/lib/table-converters/convert-geoarrow-table.js.map +1 -0
- package/dist/lib/table-converters/convert-wkb-table-to-geojson.js +1 -0
- package/dist/lib/table-converters/convert-wkb-table-to-geojson.js.map +1 -0
- package/dist/lib/table-converters/make-arrow-batch-iterator.js +1 -0
- package/dist/lib/table-converters/make-arrow-batch-iterator.js.map +1 -0
- package/dist/lib/utils/base64-encoder.js +1 -0
- package/dist/lib/utils/base64-encoder.js.map +1 -0
- package/dist/lib/utils/binary-reader.js +1 -0
- package/dist/lib/utils/binary-reader.js.map +1 -0
- package/dist/lib/utils/binary-writer.js +1 -0
- package/dist/lib/utils/binary-writer.js.map +1 -0
- package/dist/lib/utils/concat-typed-arrays.js +1 -0
- package/dist/lib/utils/concat-typed-arrays.js.map +1 -0
- package/dist/lib/utils/hex-encoder.js +1 -0
- package/dist/lib/utils/hex-encoder.js.map +1 -0
- package/dist/lib/utils/hex-transcoder.js +1 -0
- package/dist/lib/utils/hex-transcoder.js.map +1 -0
- package/dist/lib/wkt-crs/encode-wkt-crs.js +1 -0
- package/dist/lib/wkt-crs/encode-wkt-crs.js.map +1 -0
- package/dist/lib/wkt-crs/parse-wkt-crs.js +1 -0
- package/dist/lib/wkt-crs/parse-wkt-crs.js.map +1 -0
- package/package.json +6 -6
- package/src/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.ts +1 -1
- package/src/lib/geometry-converters/wkb/convert-wkb-to-geometry.ts +1 -1
- package/src/lib/geometry-converters/wkb/helpers/parse-wkb-header.ts +4 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["index.
|
|
4
|
-
"sourcesContent": ["// Types from `@loaders.gl/schema`\nexport { getGeometryInfo } from \"./lib/geometry-api/geometry-info.js\";\nexport { getBinaryGeometryInfo } from \"./lib/binary-geometry-api/binary-geometry-info.js\";\nexport { transformBinaryCoords, transformGeoJsonCoords } from \"./lib/binary-geometry-api/transform-coordinates.js\";\n// TABLE CONVERSION\nexport { convertGeoArrowToTable } from \"./lib/table-converters/convert-geoarrow-table.js\";\nexport { convertWKBTableToGeoJSON } from \"./lib/table-converters/convert-wkb-table-to-geojson.js\";\n// FEATURE COLLECTION CONVERSION\nexport { convertFlatGeojsonToBinaryFeatureCollection, \n// deprecated\nconvertFlatGeojsonToBinaryFeatureCollection as flatGeojsonToBinary } from \"./lib/feature-collection-converters/convert-flat-geojson-to-binary-features.js\";\nexport { convertGeojsonToBinaryFeatureCollection, \n// deprecated\nconvertGeojsonToBinaryFeatureCollection as geojsonToBinary } from \"./lib/feature-collection-converters/convert-geojson-to-binary-features.js\";\nexport { convertGeojsonToFlatGeojson, \n// deprecated\nconvertGeojsonToFlatGeojson as geojsonToFlatGeojson } from \"./lib/feature-collection-converters/convert-geojson-to-flat-geojson.js\";\nexport { convertBinaryFeatureCollectionToGeojson, convertBinaryFeatureCollectionToGeojson as binaryToGeojson } from \"./lib/feature-collection-converters/convert-binary-features-to-geojson.js\";\n// GEOMETRY ENCODING DETECTION\nexport { isWKB, isTWKB, isWKT } from \"./lib/geometry-converters/wkb/helpers/parse-wkb-header.js\";\nexport { WKT_MAGIC_STRINGS } from \"./lib/geometry-converters/wkb/helpers/wkb-types.js\";\n// GEOMETRY CONVERSION\nexport { convertBinaryGeometryToGeometry } from \"./lib/geometry-converters/convert-binary-geometry-to-geojson.js\";\nexport { convertWKTToGeometry } from \"./lib/geometry-converters/wkb/convert-wkt-to-geometry.js\";\nexport { convertWKBToGeometry } from \"./lib/geometry-converters/wkb/convert-wkb-to-geometry.js\";\nexport { convertWKBToBinaryGeometry } from \"./lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.js\";\nexport { convertTWKBToGeometry } from \"./lib/geometry-converters/wkb/convert-twkb-to-geometry.js\";\nexport { convertGeometryToWKT } from \"./lib/geometry-converters/wkb/convert-geometry-to-wkt.js\";\nexport { convertGeometryToWKB } from \"./lib/geometry-converters/wkb/convert-geometry-to-wkb.js\";\nexport { convertGeometryToTWKB } from \"./lib/geometry-converters/wkb/convert-geometry-to-twkb.js\";\nexport { parseWKTCRS } from \"./lib//wkt-crs/parse-wkt-crs.js\";\nexport { encodeWKTCRS } from \"./lib//wkt-crs/encode-wkt-crs.js\";\nexport { convertGeoArrowToBinaryFeatureCollection, \n// deprecated\nconvertGeoArrowToBinaryFeatureCollection as getBinaryGeometriesFromArrow, getBinaryGeometryTemplate, getTriangleIndices, getMeanCentersFromBinaryGeometries } from \"./lib/feature-collection-converters/convert-geoarrow-to-binary-features.js\";\nexport { convertGeoArrowGeometryToGeoJSON } from \"./lib/geometry-converters/convert-geoarrow-to-geojson.js\";\n// EXPERIMENTAL APIs\nexport { encodeHex, decodeHex } from \"./lib/utils/hex-transcoder.js\";\nexport { extractNumericPropTypes as _extractNumericPropTypes } from \"./lib/feature-collection-converters/convert-flat-geojson-to-binary-features.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nexport function getGeometryInfo(features) {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set();\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n const flattened = geometry.coordinates.flat();\n polygonPositionsCount += flattened.length;\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n const flattened = polygon.flat();\n polygonPositionsCount += flattened.length;\n // eslint-disable-next-line max-depth\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n }\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * @returns information about a binary geometry\n */\nexport function getBinaryGeometryInfo(geometry) {\n return {\n isMultiGeometry: isMultiGeometryType(geometry),\n multiGeometryType: getMultiGeometryType(geometry),\n dimension: geometry.positions.size,\n pointCount: geometry.positions.value.length / geometry.positions.size,\n coordinateCount: geometry.positions.value.length\n };\n}\n/** @returns true if a binary geometry corresponds to a MultiPoint, MultiLineString or MultiPolygon */\nfunction isMultiGeometryType(geometry) {\n switch (geometry.type) {\n case 'Point':\n const { positions } = geometry;\n return positions.value.length / positions.size > 1;\n case 'LineString':\n const { pathIndices } = geometry;\n return pathIndices.value.length > 1;\n case 'Polygon':\n const { polygonIndices } = geometry;\n return polygonIndices.value.length > 1;\n default:\n return false;\n }\n}\n/**\n * @returns geometry type of binary geometry, including MultiPoint, MultiLineString or MultiPolygon\n */\nfunction getMultiGeometryType(geometry) {\n const isMulti = isMultiGeometryType(geometry);\n switch (geometry.type) {\n case 'Point':\n return isMulti ? 'MultiPoint' : 'Point';\n case 'LineString':\n return isMulti ? 'MultiLineString' : 'LineString';\n case 'Polygon':\n return isMulti ? 'MultiPolygon' : 'Polygon';\n default:\n // @ts-expect-error\n throw new Error(`Illegal geometry type: ${type}`);\n }\n}\n", "/**\n * Apply transformation to every coordinate of binary features\n * @param binaryFeatures binary features\n * @param transformCoordinate Function to call on each coordinate\n * @return Transformed binary features\n */\nexport function transformBinaryCoords(binaryFeatures, transformCoordinate) {\n if (binaryFeatures.points) {\n transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);\n }\n if (binaryFeatures.lines) {\n transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);\n }\n if (binaryFeatures.polygons) {\n transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);\n }\n return binaryFeatures;\n}\n/** Transform one binary geometry */\nfunction transformBinaryGeometryPositions(binaryGeometry, fn) {\n const { positions } = binaryGeometry;\n for (let i = 0; i < positions.value.length; i += positions.size) {\n // @ts-ignore inclusion of bigint causes problems\n const coord = Array.from(positions.value.subarray(i, i + positions.size));\n const transformedCoord = fn(coord);\n // @ts-ignore typescript typing for .set seems to require bigint?\n positions.value.set(transformedCoord, i);\n }\n}\n/**\n * Apply transformation to every coordinate of GeoJSON features\n * @param features Array of GeoJSON features\n * @param fn Function to call on each coordinate\n * @return Transformed GeoJSON features\n */\nexport function transformGeoJsonCoords(features, fn) {\n for (const feature of features) {\n // @ts-ignore\n feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);\n }\n return features;\n}\nfunction coordMap(array, fn) {\n if (isCoord(array)) {\n return fn(array);\n }\n return array.map((item) => {\n return coordMap(item, fn);\n });\n}\nfunction isCoord(array) {\n return Array.isArray(array) && Number.isFinite(array[0]) && Number.isFinite(array[1]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport * as arrow from 'apache-arrow';\nimport { convertTable, convertArrowToSchema, convertSchemaToArrow, getTableLength, getTableNumCols, getTableCellAt } from '@loaders.gl/schema-utils';\nimport { getGeometryColumnsFromSchema } from '@loaders.gl/geoarrow';\nimport { convertGeoArrowGeometryToGeoJSON } from \"../geometry-converters/convert-geoarrow-to-geojson.js\";\n/**\n * * Convert a loaders.gl Table to an Apache Arrow Table\n * @param mesh\n * @param metadata\n * @param batchSize\n * @returns\n */\nexport function convertTableToArrow(table, options) {\n switch (table.shape) {\n case 'arrow-table':\n return table.data;\n case 'columnar-table':\n // TODO - optimized implementation is possible\n // return convertColumnarTableToArrow(table, options);\n // fall through\n default:\n const arrowBatchIterator = makeTableToArrowBatchesIterator(table, options);\n return new arrow.Table(arrowBatchIterator);\n }\n}\nexport function* makeTableToArrowBatchesIterator(table, options) {\n const arrowSchema = convertSchemaToArrow(table.schema);\n const length = getTableLength(table);\n const numColumns = getTableNumCols(table);\n const batchSize = options?.batchSize || length;\n const builders = arrowSchema?.fields.map((arrowField) => arrow.makeBuilder(arrowField));\n const structField = new arrow.Struct(arrowSchema.fields);\n let batchLength = 0;\n for (let rowIndex = 0; rowIndex < length; rowIndex++) {\n for (let columnIndex = 0; columnIndex < numColumns; ++columnIndex) {\n const value = getTableCellAt(table, rowIndex, columnIndex);\n const builder = builders[columnIndex];\n builder.append(value);\n batchLength++;\n if (batchLength >= batchSize) {\n const datas = builders.map((builder) => builder.flush());\n const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);\n yield new arrow.RecordBatch(arrowSchema, structData);\n batchLength = 0;\n }\n }\n }\n if (batchLength > 0) {\n const datas = builders.map((builder) => builder.flush());\n const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);\n yield new arrow.RecordBatch(arrowSchema, structData);\n batchLength = 0;\n }\n builders.map((builder) => builder.finish());\n}\n/**\n * Convert an Apache Arrow table to a loaders.gl Table\n * @note Currently does not convert schema\n */\nexport function convertGeoArrowToTable(arrowTable, shape) {\n switch (shape) {\n case 'arrow-table':\n return convertArrowToArrowTable(arrowTable);\n case 'array-row-table':\n return convertArrowToArrayRowTable(arrowTable);\n case 'object-row-table':\n return convertArrowToObjectRowTable(arrowTable);\n case 'columnar-table':\n return convertArrowToColumnarTable(arrowTable);\n case 'geojson-table':\n return convertArrowToGeoJSONTable(arrowTable);\n default:\n throw new Error(shape);\n }\n}\n/**\n * Wrap an apache arrow table in a loaders.gl table wrapper.\n * From this additional conversions are available.\n * @param arrowTable\n * @returns\n */\nfunction convertArrowToArrowTable(arrowTable) {\n return {\n shape: 'arrow-table',\n schema: convertArrowToSchema(arrowTable.schema),\n data: arrowTable\n };\n}\nfunction convertArrowToArrayRowTable(arrowTable) {\n const columnarTable = convertArrowToColumnarTable(arrowTable);\n return convertTable(columnarTable, 'array-row-table');\n}\nfunction convertArrowToObjectRowTable(arrowTable) {\n const columnarTable = convertArrowToColumnarTable(arrowTable);\n return convertTable(columnarTable, 'object-row-table');\n}\n/**\n * Convert an Apache Arrow table to a ColumnarTable\n * @note Currently does not convert schema\n */\nfunction convertArrowToColumnarTable(arrowTable) {\n // TODO - avoid calling `getColumn` on columns we are not interested in?\n // Add options object?\n const columns = {};\n for (const field of arrowTable.schema.fields) {\n // This (is intended to) coalesce all record batches into a single typed array\n const arrowColumn = arrowTable.getChild(field.name);\n const values = arrowColumn?.toArray();\n columns[field.name] = values;\n }\n const schema = convertArrowToSchema(arrowTable.schema);\n return {\n shape: 'columnar-table',\n schema,\n data: columns\n };\n}\n/**\n * Convert an Apache Arrow table to a GeoJSONTable\n * @note Currently does not convert schema\n */\nfunction convertArrowToGeoJSONTable(arrowTable) {\n const schema = convertArrowToSchema(arrowTable.schema);\n const geometryColumns = getGeometryColumnsFromSchema(schema);\n // get encoding from geometryColumns['geometry']\n const encoding = geometryColumns.geometry.encoding;\n const features = [];\n // Remove geometry columns\n const propertyColumnNames = arrowTable.schema.fields\n .map((field) => field.name)\n // TODO - this deletes all geometry columns\n .filter((name) => !(name in geometryColumns));\n const propertiesTable = arrowTable.select(propertyColumnNames);\n const arrowGeometryColumn = arrowTable.getChild('geometry');\n for (let row = 0; row < arrowTable.numRows; row++) {\n // get the geometry value from arrow geometry column\n // Note that type can vary\n const arrowGeometry = arrowGeometryColumn?.get(row);\n // parse arrow geometry to geojson feature\n const feature = convertGeoArrowGeometryToGeoJSON(arrowGeometry, encoding);\n if (feature) {\n const properties = propertiesTable.get(row)?.toJSON() || {};\n features.push({ type: 'Feature', geometry: feature, properties });\n }\n }\n return {\n shape: 'geojson-table',\n type: 'FeatureCollection',\n schema,\n features\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Parse input binary data and return a valid GeoJSON geometry object */\nexport function convertBinaryGeometryToGeometry(data, startIndex, endIndex) {\n switch (data.type) {\n case 'Point':\n return pointToGeoJson(data, startIndex, endIndex);\n case 'LineString':\n return lineStringToGeoJson(data, startIndex, endIndex);\n case 'Polygon':\n return polygonToGeoJson(data, startIndex, endIndex);\n default:\n const unexpectedInput = data;\n throw new Error(`Unsupported geometry type: ${unexpectedInput?.type}`);\n }\n}\n/** Parse binary data of type Polygon */\nfunction polygonToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {\n const { positions } = data;\n const polygonIndices = data.polygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const primitivePolygonIndices = data.primitivePolygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const multi = polygonIndices.length > 2;\n // Polygon\n if (!multi) {\n const coordinates = [];\n for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {\n const startRingIndex = primitivePolygonIndices[i];\n const endRingIndex = primitivePolygonIndices[i + 1];\n const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);\n coordinates.push(ringCoordinates);\n }\n return { type: 'Polygon', coordinates };\n }\n // MultiPolygon\n const coordinates = [];\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startPolygonIndex = polygonIndices[i];\n const endPolygonIndex = polygonIndices[i + 1];\n const polygonCoordinates = polygonToGeoJson(data, startPolygonIndex, endPolygonIndex).coordinates;\n coordinates.push(polygonCoordinates);\n }\n return { type: 'MultiPolygon', coordinates };\n}\n/** Parse binary data of type LineString */\nfunction lineStringToGeoJson(data, startIndex = -Infinity, endIndex = Infinity) {\n const { positions } = data;\n const pathIndices = data.pathIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const multi = pathIndices.length > 2;\n if (!multi) {\n const coordinates = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);\n return { type: 'LineString', coordinates };\n }\n const coordinates = [];\n for (let i = 0; i < pathIndices.length - 1; i++) {\n const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);\n coordinates.push(ringCoordinates);\n }\n return { type: 'MultiLineString', coordinates };\n}\n/** Parse binary data of type Point */\nfunction pointToGeoJson(data, startIndex, endIndex) {\n const { positions } = data;\n const coordinates = ringToGeoJson(positions, startIndex, endIndex);\n const multi = coordinates.length > 1;\n if (multi) {\n return { type: 'MultiPoint', coordinates };\n }\n return { type: 'Point', coordinates: coordinates[0] };\n}\n/**\n * Parse a linear ring of positions to a GeoJSON linear ring\n *\n * @param positions Positions TypedArray\n * @param startIndex Start index to include in ring\n * @param endIndex End index to include in ring\n * @returns GeoJSON ring\n */\nfunction ringToGeoJson(positions, startIndex, endIndex) {\n startIndex = startIndex || 0;\n endIndex = endIndex || positions.value.length / positions.size;\n const ringCoordinates = [];\n for (let j = startIndex; j < endIndex; j++) {\n const coord = Array();\n for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {\n coord.push(Number(positions.value[k]));\n }\n ringCoordinates.push(coord);\n }\n return ringCoordinates;\n}\n", "// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nexport function concatTypedArrays(arrays) {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { concatTypedArrays } from \"../utils/concat-typed-arrays.js\";\nexport function concatenateBinaryPointGeometries(binaryPointGeometries, dimension) {\n const positions = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n return {\n type: 'Point',\n positions: { value: concatenatedPositions, size: dimension }\n };\n}\nexport function concatenateBinaryLineGeometries(binaryLineGeometries, dimension) {\n const lines = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n return {\n type: 'LineString',\n positions: { value: concatenatedPositions, size: dimension },\n pathIndices: { value: new Uint32Array(pathIndices), size: 1 }\n };\n}\nexport function concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension) {\n const polygons = [];\n const primitivePolygons = [];\n for (const binaryPolygon of binaryPolygonGeometries) {\n const { positions, primitivePolygonIndices } = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(...primitivePolygon\n .filter((x) => x > 0)\n .map((x) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1]));\n }\n return {\n type: 'Polygon',\n positions: { value: concatenatedPositions, size: dimension },\n polygonIndices: { value: new Uint32Array(polygonIndices), size: 1 },\n primitivePolygonIndices: { value: new Uint32Array(primitivePolygonIndices), size: 1 }\n };\n}\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum) => (value) => (sum += value);\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Integer codes for geometry types in WKB and related formats\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport var WKBGeometryType;\n(function (WKBGeometryType) {\n WKBGeometryType[WKBGeometryType[\"Point\"] = 1] = \"Point\";\n WKBGeometryType[WKBGeometryType[\"LineString\"] = 2] = \"LineString\";\n WKBGeometryType[WKBGeometryType[\"Polygon\"] = 3] = \"Polygon\";\n WKBGeometryType[WKBGeometryType[\"MultiPoint\"] = 4] = \"MultiPoint\";\n WKBGeometryType[WKBGeometryType[\"MultiLineString\"] = 5] = \"MultiLineString\";\n WKBGeometryType[WKBGeometryType[\"MultiPolygon\"] = 6] = \"MultiPolygon\";\n WKBGeometryType[WKBGeometryType[\"GeometryCollection\"] = 7] = \"GeometryCollection\";\n})(WKBGeometryType || (WKBGeometryType = {}));\n/** WKB Geometry has a z coordinate */\nexport const EWKB_FLAG_Z = 0x80000000;\n/** WKB Geometry has an m coordinate */\nexport const EWKB_FLAG_M = 0x40000000;\n/** WKB Geometry has a spatial coordinate reference system id */\nexport const EWKB_FLAG_SRID = 0x20000000;\n/** @todo: Assume no more than 10K SRIDs are defined */\nexport const MAX_SRID = 10000;\n/**\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n * @note Order matches WKBGeometryType enum (need to add 1)\n * @note: We only support this \"geojson\" subset of the OGC simple features standard\n */\nexport const WKT_MAGIC_STRINGS = [\n 'POINT(',\n 'LINESTRING(',\n 'POLYGON(',\n 'MULTIPOINT(',\n 'MULTILINESTRING(',\n 'MULTIPOLYGON(',\n 'GEOMETRYCOLLECTION('\n];\nconst textEncoder = new TextEncoder();\n/**\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n * @note Order matches WKBGeometryType enum (need to add 1)\n * @note: We only support this \"geojson\" subset of the OGC simple features standard\n */\nexport const WKT_MAGIC_BYTES = WKT_MAGIC_STRINGS.map((string) => textEncoder.encode(string));\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { EWKB_FLAG_Z, EWKB_FLAG_M, EWKB_FLAG_SRID, MAX_SRID, WKT_MAGIC_STRINGS, WKT_MAGIC_BYTES } from \"./wkb-types.js\";\n/**\n * Check if a string is WKT.\n * @param input A potential WKT geometry string\n * @return `true` if input appears to be a WKT geometry string, `false` otherwise\n\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n * @todo Does not handle leading spaces which appear to be permitted per the spec:\n * \"A WKT string contains no white space outside of double quotes.\n * However padding with white space to improve human readability is permitted;\n * the examples of WKT that are included in this document have\n * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers.\"\n */\nexport function isWKT(input) {\n return getWKTGeometryType(input) !== null;\n}\n/**\n * Get the geometry type of a WKT string.\n * @param input A potential WKT geometry string\n * @return `true` if input appears to be a WKT geometry string, `false` otherwise\n\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n * @todo Does not handle leading spaces which appear to be permitted per the spec:\n * \"A WKT string contains no white space outside of double quotes.\n * However padding with white space to improve human readability is permitted;\n * the examples of WKT that are included in this document have\n * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers.\"\n */\nexport function getWKTGeometryType(input) {\n if (typeof input === 'string') {\n const index = WKT_MAGIC_STRINGS.findIndex((magicString) => input.startsWith(magicString));\n return index >= 0 ? (index + 1) : null;\n }\n const inputArray = new Uint8Array(input);\n const index = WKT_MAGIC_BYTES.findIndex((magicBytes) => magicBytes.every((value, index) => value === inputArray[index]));\n return index >= 0 ? (index + 1) : null;\n}\n/**\n * Check if an array buffer might be a TWKB array buffer\n * @param arrayBuffer The array buffer to check\n * @returns false if this is definitely not a TWKB array buffer, true if it might be a TWKB array buffer\n */\nexport function isTWKB(arrayBuffer) {\n const dataView = new DataView(arrayBuffer);\n const byteOffset = 0;\n const type = dataView.getUint8(byteOffset);\n const geometryType = type & 0x0f;\n // Only geometry types 1 to 7 (point to geometry collection are currently defined)\n if (geometryType < 1 || geometryType > 7) {\n return false;\n }\n return true;\n}\n/** Sanity checks that first to 5-9 bytes could represent a supported WKB dialect header */\nexport function isWKB(arrayBuffer) {\n const dataView = new DataView(arrayBuffer);\n let byteOffset = 0;\n const endianness = dataView.getUint8(byteOffset);\n byteOffset += 1;\n // Check valid endianness (only 0 or 1 are allowed)\n if (endianness > 1) {\n return false;\n }\n const littleEndian = endianness === 1;\n const geometry = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n // check valid geometry type (we don't support extension geometries)\n const geometryType = geometry & 0x07;\n if (geometryType === 0 || geometryType > 7) {\n return false;\n }\n const geometryFlags = geometry - geometryType;\n // Accept iso-wkb flags\n if (geometryFlags === 0 ||\n geometryFlags === 1000 ||\n geometryFlags === 2000 ||\n geometryFlags === 3000) {\n return true;\n }\n // Accept ewkb flags but reject otherwise\n if ((geometryFlags & ~(EWKB_FLAG_Z | EWKB_FLAG_M | EWKB_FLAG_SRID)) !== 0) {\n return false;\n }\n if (geometryFlags & EWKB_FLAG_SRID) {\n const srid = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n if (srid > MAX_SRID) {\n return false;\n }\n }\n return true;\n}\n/**\n * Parses header and provides a byteOffset to start of geometry data\n * @param dataView\n * @param target optionally supply a WKBHeader object to avoid creating a new object for every call\n * @returns a header object describing the WKB data\n */\n// eslint-disable-next-line max-statements, complexity\nexport function parseWKBHeader(dataView, target) {\n const wkbHeader = Object.assign(target || {}, {\n type: 'wkb',\n variant: 'wkb',\n geometryType: 1,\n dimensions: 2,\n coordinates: 'xy',\n littleEndian: true,\n byteOffset: 0\n });\n if (isWKT(dataView.buffer)) {\n // TODO - WKB header could include WKT type\n throw new Error('WKB: Cannot parse WKT data');\n }\n // Check endianness of data\n wkbHeader.littleEndian = dataView.getUint8(wkbHeader.byteOffset) === 1;\n wkbHeader.byteOffset++;\n // 4-digit code representing dimension and type of geometry\n const geometryCode = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n wkbHeader.geometryType = (geometryCode & 0x7);\n // Check if iso-wkb variant: iso-wkb adds 1000, 2000 or 3000 to the geometry code\n const isoType = (geometryCode - wkbHeader.geometryType) / 1000;\n switch (isoType) {\n case 0:\n break;\n case 1:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n break;\n case 2:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n break;\n case 3:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n break;\n default:\n throw new Error(`WKB: Unsupported iso-wkb type: ${isoType}`);\n }\n // Check if EWKB variant. Uses bitmasks for Z&M dimensions as well as optional SRID field\n const ewkbZ = geometryCode & EWKB_FLAG_Z;\n const ewkbM = geometryCode & EWKB_FLAG_M;\n const ewkbSRID = geometryCode & EWKB_FLAG_SRID;\n if (ewkbZ && ewkbM) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n }\n else if (ewkbZ) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n }\n else if (ewkbM) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n }\n // If SRID present read four more bytes\n if (ewkbSRID) {\n wkbHeader.variant = 'ewkb';\n // 4-digit code representing dimension and type of geometry\n wkbHeader.srid = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n }\n return wkbHeader;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { concatenateBinaryPointGeometries, concatenateBinaryLineGeometries, concatenateBinaryPolygonGeometries } from \"../../binary-geometry-api/concat-binary-geometry.js\";\nimport { concatTypedArrays } from \"../../utils/concat-typed-arrays.js\";\nimport { WKBGeometryType } from \"./helpers/wkb-types.js\";\nimport { parseWKBHeader } from \"./helpers/parse-wkb-header.js\";\nexport function convertWKBToBinaryGeometry(arrayBuffer) {\n const dataView = new DataView(arrayBuffer);\n const wkbHeader = parseWKBHeader(dataView);\n const { geometryType, dimensions, littleEndian } = wkbHeader;\n const offset = wkbHeader.byteOffset;\n switch (geometryType) {\n case WKBGeometryType.Point:\n const point = parsePoint(dataView, offset, dimensions, littleEndian);\n return point.geometry;\n case WKBGeometryType.LineString:\n const line = parseLineString(dataView, offset, dimensions, littleEndian);\n return line.geometry;\n case WKBGeometryType.Polygon:\n const polygon = parsePolygon(dataView, offset, dimensions, littleEndian);\n return polygon.geometry;\n case WKBGeometryType.MultiPoint:\n const multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case WKBGeometryType.MultiLineString:\n const multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case WKBGeometryType.MultiPolygon:\n const multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case WKBGeometryType.GeometryCollection:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(dataView, offset, dimensions, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n// Primitives; parse point and linear ring\nfunction parsePoint(dataView, offset, dimension, littleEndian) {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n return {\n geometry: { type: 'Point', positions: { value: positions, size: dimension } },\n offset\n };\n}\nfunction parseLineString(dataView, offset, dimension, littleEndian) {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n return {\n geometry: {\n type: 'LineString',\n positions: { value: positions, size: dimension },\n pathIndices: { value: new Uint32Array(pathIndices), size: 1 }\n },\n offset\n };\n}\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum) => (value) => (sum += value);\nfunction parsePolygon(dataView, offset, dimension, littleEndian) {\n const nRings = dataView.getUint32(offset, littleEndian);\n offset += 4;\n const rings = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(dataView, offset, dimension, littleEndian);\n const { positions } = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n return {\n geometry: {\n type: 'Polygon',\n positions: { value: concatenatedPositions, size: dimension },\n polygonIndices: {\n value: new Uint32Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: { value: new Uint32Array(primitivePolygonIndices), size: 1 }\n },\n offset\n };\n}\nfunction parseMultiPoint(dataView, offset, dimension, littleEndian) {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n const binaryPointGeometries = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = dataView.getUint8(offset) === 1;\n offset++;\n // Assert point type\n if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n offset += 4;\n const parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\nfunction parseMultiLineString(dataView, offset, dimension, littleEndian) {\n const nLines = dataView.getUint32(offset, littleEndian);\n offset += 4;\n const binaryLineGeometries = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = dataView.getUint8(offset) === 1;\n offset++;\n // Assert type LineString\n if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n const parsed = parseLineString(dataView, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\nfunction parseMultiPolygon(dataView, offset, dimension, littleEndian) {\n const nPolygons = dataView.getUint32(offset, littleEndian);\n offset += 4;\n const binaryPolygonGeometries = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = dataView.getUint8(offset) === 1;\n offset++;\n // Assert type Polygon\n if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n const parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { convertBinaryGeometryToGeometry } from \"../convert-binary-geometry-to-geojson.js\";\nimport { convertWKBToBinaryGeometry } from \"./convert-wkb-to-binary-geometry.js\";\nexport function convertWKBToGeometry(arrayBuffer) {\n const binaryGeometry = convertWKBToBinaryGeometry(arrayBuffer);\n return convertBinaryGeometryToGeometry(binaryGeometry);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n/* eslint-disable */\n// @ts-nocheck\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n/**\n * Parse WKT and return GeoJSON.\n * @param input A WKT geometry string\n * @return A GeoJSON geometry object\n *\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n **/\nexport function convertWKTToGeometry(input, options) {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n const state = { parts, _, i: 0 };\n const geometry = parseGeometry(state);\n return options?.wkt?.crs ? addCRS(geometry, srid) : geometry;\n}\nfunction parseGeometry(state) {\n return (parsePoint(state) ||\n parseLineString(state) ||\n parsePolygon(state) ||\n parseMultiPoint(state) ||\n parseMultiLineString(state) ||\n parseMultiPolygon(state) ||\n parseGeometryCollection(state));\n}\n/** Adds a coordinate reference system as an undocumented */\nfunction addCRS(obj, srid) {\n if (obj && srid?.match(/\\d+/)) {\n const crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n // @ts-expect-error we assign an undocumented property on the geometry\n obj.crs = crs;\n }\n return obj;\n}\n// GEOMETRIES\nfunction parsePoint(state) {\n if (!$(/^(POINT(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n if (!$(/^(\\()/, state)) {\n return null;\n }\n const c = coords(state);\n if (!c) {\n return null;\n }\n white(state);\n if (!$(/^(\\))/, state)) {\n return null;\n }\n return {\n type: 'Point',\n coordinates: c[0]\n };\n}\nfunction parseMultiPoint(state) {\n if (!$(/^(MULTIPOINT)/i, state)) {\n return null;\n }\n white(state);\n const newCoordsFormat = state._?.substring(state._?.indexOf('(') + 1, state._.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n state._ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n white(state);\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n}\nfunction parseLineString(state) {\n if (!$(/^(LINESTRING(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n if (!$(/^(\\()/, state)) {\n return null;\n }\n const c = coords(state);\n if (!c) {\n return null;\n }\n if (!$(/^(\\))/, state)) {\n return null;\n }\n return {\n type: 'LineString',\n coordinates: c\n };\n}\nfunction parseMultiLineString(state) {\n if (!$(/^(MULTILINESTRING)/i, state))\n return null;\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n white(state);\n return {\n // @ts-ignore\n type: 'MultiLineString',\n // @ts-expect-error\n coordinates: c\n };\n}\nfunction parsePolygon(state) {\n if (!$(/^(POLYGON(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n return {\n // @ts-ignore\n type: 'Polygon',\n // @ts-expect-error\n coordinates: c\n };\n}\nfunction parseMultiPolygon(state) {\n if (!$(/^(MULTIPOLYGON)/i, state)) {\n return null;\n }\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n return {\n type: 'MultiPolygon',\n // @ts-expect-error\n coordinates: c\n };\n}\nfunction parseGeometryCollection(state) {\n const geometries = [];\n let geometry;\n if (!$(/^(GEOMETRYCOLLECTION)/i, state)) {\n return null;\n }\n white(state);\n if (!$(/^(\\()/, state)) {\n return null;\n }\n while ((geometry = parseGeometry(state))) {\n geometries.push(geometry);\n white(state);\n $(/^(,)/, state);\n white(state);\n }\n if (!$(/^(\\))/, state)) {\n return null;\n }\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n}\n// COORDINATES\nfunction multicoords(state) {\n white(state);\n let depth = 0;\n const rings = [];\n const stack = [rings];\n let pointer = rings;\n let elem;\n while ((elem = $(/^(\\()/, state) || $(/^(\\))/, state) || $(/^(,)/, state) || $(tuples, state))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n }\n else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0)\n return null;\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer)\n return null;\n depth--;\n if (depth === 0)\n break;\n }\n else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n }\n else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n }\n else {\n return null;\n }\n white(state);\n }\n if (depth !== 0)\n return null;\n return rings;\n}\nfunction coords(state) {\n const list = [];\n let item;\n let pt;\n while ((pt = $(tuples, state) || $(/^(,)/, state))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n }\n else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item)\n item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white(state);\n }\n if (item)\n list.push(item);\n else\n return null;\n return list.length ? list : null;\n}\n// HELPERS\nfunction $(regexp, state) {\n const match = state._?.substring(state.i).match(regexp);\n if (!match)\n return null;\n else {\n state.i += match[0].length;\n return match[0];\n }\n}\nfunction white(state) {\n $(/^\\s*/, state);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { convertWKBToGeometry } from \"./wkb/convert-wkb-to-geometry.js\";\nimport { convertWKTToGeometry } from \"./wkb/convert-wkt-to-geometry.js\";\n/**\n * parse geometry from arrow data that is returned from processArrowData()\n * NOTE: this function could be deduplicated with the binaryToGeometry() 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 convertGeoArrowGeometryToGeoJSON(arrowCellValue, encoding) {\n // sanity\n encoding = encoding?.toLowerCase();\n if (!encoding || !arrowCellValue) {\n return null;\n }\n switch (encoding) {\n case 'geoarrow.multipolygon':\n return arrowMultiPolygonToGeometry(arrowCellValue);\n case 'geoarrow.polygon':\n return arrowPolygonToGeometry(arrowCellValue);\n case 'geoarrow.multipoint':\n return arrowMultiPointToGeometry(arrowCellValue);\n case 'geoarrow.point':\n return arrowPointToGeometry(arrowCellValue);\n case 'geoarrow.multilinestring':\n return arrowMultiLineStringToGeometry(arrowCellValue);\n case 'geoarrow.linestring':\n return arrowLineStringToGeometry(arrowCellValue);\n case 'geoarrow.wkb':\n return arrowWKBToGeometry(arrowCellValue);\n case 'geoarrow.wkt':\n return arrowWKTToGeometry(arrowCellValue);\n default: {\n throw Error(`GeoArrow encoding not supported ${encoding}`);\n }\n }\n}\nfunction arrowWKBToGeometry(arrowCellValue) {\n // The actual WKB array buffer starts from byteOffset and ends at byteOffset + byteLength\n const arrayBuffer = arrowCellValue.buffer.slice(arrowCellValue.byteOffset, arrowCellValue.byteOffset + arrowCellValue.byteLength);\n return convertWKBToGeometry(arrayBuffer);\n}\nfunction arrowWKTToGeometry(arrowCellValue) {\n const string = arrowCellValue;\n return convertWKTToGeometry(string);\n}\n/**\n * convert Arrow MultiPolygon to geojson Feature\n */\nfunction arrowMultiPolygonToGeometry(arrowMultiPolygon) {\n const multiPolygon = [];\n for (let m = 0; m < arrowMultiPolygon.length; m++) {\n const arrowPolygon = arrowMultiPolygon.get(m);\n const polygon = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon?.length; i++) {\n const arrowRing = arrowPolygon?.get(i);\n const ring = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coord = Array.from(arrowCoord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n multiPolygon.push(polygon);\n }\n const geometry = {\n type: 'MultiPolygon',\n coordinates: multiPolygon\n };\n return geometry;\n}\n/**\n * convert Arrow Polygon to geojson Feature\n */\nfunction arrowPolygonToGeometry(arrowPolygon) {\n const polygon = [];\n for (let i = 0; arrowPolygon && i < arrowPolygon.length; i++) {\n const arrowRing = arrowPolygon.get(i);\n const ring = [];\n for (let j = 0; arrowRing && j < arrowRing.length; j++) {\n const arrowCoord = arrowRing.get(j);\n const coords = Array.from(arrowCoord);\n ring.push(coords);\n }\n polygon.push(ring);\n }\n const geometry = {\n type: 'Polygon',\n coordinates: polygon\n };\n return geometry;\n}\n/**\n * convert Arrow MultiPoint to geojson MultiPoint\n */\nfunction arrowMultiPointToGeometry(arrowMultiPoint) {\n const multiPoint = [];\n for (let i = 0; arrowMultiPoint && i < arrowMultiPoint.length; i++) {\n const arrowPoint = arrowMultiPoint.get(i);\n if (arrowPoint) {\n const coord = Array.from(arrowPoint);\n multiPoint.push(coord);\n }\n }\n return {\n type: 'MultiPoint',\n coordinates: multiPoint\n };\n}\n/**\n * convert Arrow Point to geojson Point\n */\nfunction arrowPointToGeometry(arrowPoint) {\n const point = Array.from(arrowPoint);\n return {\n type: 'Point',\n coordinates: point\n };\n}\n/**\n * convert Arrow MultiLineString to geojson MultiLineString\n */\nfunction arrowMultiLineStringToGeometry(arrowMultiLineString) {\n const multiLineString = [];\n for (let i = 0; arrowMultiLineString && i < arrowMultiLineString.length; i++) {\n const arrowLineString = arrowMultiLineString.get(i);\n const lineString = [];\n for (let j = 0; arrowLineString && j < arrowLineString.length; j++) {\n const arrowCoord = arrowLineString.get(j);\n if (arrowCoord) {\n const coords = 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 * convert Arrow LineString to geojson LineString\n */\nfunction arrowLineStringToGeometry(arrowLineString) {\n const lineString = [];\n for (let i = 0; arrowLineString && i < arrowLineString.length; i++) {\n const arrowCoord = arrowLineString.get(i);\n if (arrowCoord) {\n const coords = Array.from(arrowCoord);\n lineString.push(coords);\n }\n }\n return {\n type: 'LineString',\n coordinates: lineString\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getTableLength, getTableRowAsObject } from '@loaders.gl/schema-utils';\nimport { getGeoMetadata } from '@loaders.gl/geoarrow';\nimport { convertWKBToGeometry } from \"../geometry-converters/wkb/convert-wkb-to-geometry.js\";\nimport { convertWKTToGeometry } from \"../geometry-converters/wkb/convert-wkt-to-geometry.js\";\n/** TODO - move to loaders.gl/gis? */\nexport function convertWKBTableToGeoJSON(table, schema) {\n const geoMetadata = getGeoMetadata(schema.metadata);\n const primaryColumn = geoMetadata?.primary_column;\n if (!primaryColumn) {\n throw new Error('no geometry column');\n }\n const columnMetadata = geoMetadata.columns[primaryColumn];\n const features = [];\n const length = getTableLength(table);\n for (let rowIndex = 0; rowIndex < length; rowIndex++) {\n const row = getTableRowAsObject(table, rowIndex);\n const geometry = parseGeometry(row[primaryColumn], columnMetadata);\n delete row[primaryColumn];\n const feature = { type: 'Feature', geometry: geometry, properties: row };\n features.push(feature);\n }\n return { shape: 'geojson-table', schema, type: 'FeatureCollection', features };\n}\nfunction parseGeometry(geometry, columnMetadata) {\n switch (columnMetadata.encoding) {\n case 'wkt':\n return convertWKTToGeometry(geometry) || null;\n case 'wkb':\n default:\n const arrayBuffer = ArrayBuffer.isView(geometry)\n ? geometry.buffer.slice(geometry.byteOffset, geometry.byteOffset + geometry.byteLength)\n : geometry;\n return convertWKBToGeometry(arrayBuffer);\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable indent */\nimport { earcut } from '@math.gl/polygon';\n/**\n * Convert binary features to flat binary arrays. Similar to\n * `geojsonToBinary` helper function, except that it expects\n * a binary representation of the feature data, which enables\n * 2X-3X speed increase in parse speed, compared to using\n * geoJSON. See `binary-vector-tile/VectorTileFeature` for\n * data format detais\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns filled arrays\n */\nexport function convertFlatGeojsonToBinaryFeatureCollection(features, geometryInfo, options) {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(features, {\n propArrayTypes,\n ...geometryInfo\n }, {\n numericPropKeys: (options && options.numericPropKeys) || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array,\n triangulate: options ? options.triangulate : true\n });\n}\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nexport function extractNumericPropTypes(features) {\n const propArrayTypes = {};\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n return propArrayTypes;\n}\n/**\n * Fills coordinates into pre-allocated typed arrays\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity, max-statements\nfunction fillArrays(features, geometryInfo, options) {\n const { pointPositionsCount, pointFeaturesCount, linePositionsCount, linePathsCount, lineFeaturesCount, polygonPositionsCount, polygonObjectsCount, polygonRingsCount, polygonFeaturesCount, propArrayTypes, coordLength } = geometryInfo;\n const { numericPropKeys = [], PositionDataType = Float32Array, triangulate = true } = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds: pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines = {\n type: 'LineString',\n pathIndices: linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds: lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons = {\n type: 'Polygon',\n polygonIndices: polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices: polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds: polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n if (triangulate) {\n polygons.triangles = [];\n }\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength);\n }\n }\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n points.fields.push({ id: feature.id });\n }\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n lines.fields.push({ id: feature.id });\n }\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n polygons.fields.push({ id: feature.id });\n }\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n indexMap.feature++;\n }\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n/**\n * Fills (Multi)Point coordinates into points object of arrays\n *\n * @param geometry\n * @param points\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePoint(geometry, points, indexMap, coordLength, properties) {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(indexMap.feature, indexMap.pointPosition, indexMap.pointPosition + nPositions);\n points.featureIds.fill(indexMap.pointFeature, indexMap.pointPosition, indexMap.pointPosition + nPositions);\n indexMap.pointPosition += nPositions;\n}\n/**\n * Fills (Multi)LineString coordinates into lines object of arrays\n *\n * @param geometry\n * @param lines\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handleLineString(geometry, lines, indexMap, coordLength, properties) {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n lines.globalFeatureIds.fill(indexMap.feature, indexMap.linePosition, indexMap.linePosition + nPositions);\n lines.featureIds.fill(indexMap.lineFeature, indexMap.linePosition, indexMap.linePosition + nPositions);\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n // Extract range of data we are working with, defined by start\n // and end indices (these index into the geometry.data array)\n const start = geometry.indices[i];\n const end = i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.indices[i + 1]; // start index for next line\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n/**\n * Fills (Multi)Polygon coordinates into polygons object of arrays\n *\n * @param geometry\n * @param polygons\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePolygon(geometry, polygons, indexMap, coordLength, properties) {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(indexMap.feature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);\n polygons.featureIds.fill(indexMap.polygonFeature, indexMap.polygonPosition, indexMap.polygonPosition + nPositions);\n // Unlike Point & LineString geometry.indices is a 2D array\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end = i === il - 1\n ? // last line, so either read to:\n nextIndices === undefined\n ? geometry.data.length // end of data (no next indices)\n : nextIndices[0] // start of first line in nextIndices\n : indices[i + 1]; // start index for next line\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, { startPosition, endPosition, coordLength });\n }\n}\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param indices\n * @param param3\n */\nfunction triangulatePolygon(polygons, areas, indices, { startPosition, endPosition, coordLength }) {\n if (!polygons.triangles) {\n return;\n }\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.subarray(start, end);\n // Holes are referenced relative to outer polygon\n const offset = indices[0];\n const holes = indices.slice(1).map((n) => (n - offset) / coordLength);\n // Compute triangulation\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n/**\n * Wraps an object containing array into accessors\n *\n * @param obj\n * @param size\n */\nfunction wrapProps(obj, size) {\n const returnObj = {};\n for (const key in obj) {\n returnObj[key] = { value: obj[key], size };\n }\n return returnObj;\n}\n/**\n * Wrap each array in an accessor object with value and size keys\n *\n * @param points\n * @param lines\n * @param polygons\n * @param coordLength\n * @returns object\n */\nfunction makeAccessorObjects(points, lines, polygons, coordLength) {\n const binaryFeatures = {\n shape: 'binary-feature-collection',\n points: {\n ...points,\n positions: { value: points.positions, size: coordLength },\n globalFeatureIds: { value: points.globalFeatureIds, size: 1 },\n featureIds: { value: points.featureIds, size: 1 },\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: {\n ...lines,\n positions: { value: lines.positions, size: coordLength },\n pathIndices: { value: lines.pathIndices, size: 1 },\n globalFeatureIds: { value: lines.globalFeatureIds, size: 1 },\n featureIds: { value: lines.featureIds, size: 1 },\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: {\n ...polygons,\n positions: { value: polygons.positions, size: coordLength },\n polygonIndices: { value: polygons.polygonIndices, size: 1 },\n primitivePolygonIndices: { value: polygons.primitivePolygonIndices, size: 1 },\n globalFeatureIds: { value: polygons.globalFeatureIds, size: 1 },\n featureIds: { value: polygons.featureIds, size: 1 },\n numericProps: wrapProps(polygons.numericProps, 1)\n } // triangles not expected\n };\n if (binaryFeatures.polygons && polygons.triangles) {\n binaryFeatures.polygons.triangles = { value: new Uint32Array(polygons.triangles), size: 1 };\n }\n return binaryFeatures;\n}\n/**\n * Add numeric properties to object\n *\n * @param object\n * @param properties\n * @param index\n * @param length\n */\nfunction fillNumericProperties(object, properties, index, length) {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName];\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n/**\n * Keep string properties in object\n *\n * @param properties\n * @param numericKeys\n * @returns object\n */\nfunction keepStringProperties(properties, numericKeys) {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n/**\n *\n * Deduce correct array constructor to use for a given value\n *\n * @param x value to test\n * @param constructor previous constructor deduced\n * @returns PropArrayConstructor\n */\nfunction deduceArrayType(x, constructor) {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getPolygonSignedArea } from '@math.gl/polygon';\n/**\n * Convert GeoJSON features to Flat GeoJSON features\n *\n * @param features\n * @param options\n * @returns an Array of Flat GeoJSON features\n */\nexport function convertGeojsonToFlatGeojson(features, options = { coordLength: 2, fixRingWinding: true }) {\n return features.map((feature) => flattenFeature(feature, options));\n}\n/**\n * Helper function to copy Point values from `coordinates` into `data` & `indices`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param options\n */\nfunction flattenPoint(coordinates, data, indices, options) {\n indices.push(data.length);\n data.push(...coordinates);\n // Pad up to coordLength\n for (let i = coordinates.length; i < options.coordLength; i++) {\n data.push(0);\n }\n}\n/**\n * Helper function to copy LineString values from `coordinates` into `data` & `indices`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param options\n */\nfunction flattenLineString(coordinates, data, indices, options) {\n indices.push(data.length);\n for (const c of coordinates) {\n data.push(...c);\n // Pad up to coordLength\n for (let i = c.length; i < options.coordLength; i++) {\n data.push(0);\n }\n }\n}\n/**\n * Helper function to copy Polygon values from `coordinates` into `data` & `indices` & `areas`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param areas\n * @param options\n */\nfunction flattenPolygon(coordinates, data, indices, areas, options) {\n let count = 0;\n const ringAreas = [];\n const polygons = [];\n for (const lineString of coordinates) {\n const lineString2d = lineString.map((p) => p.slice(0, 2));\n let area = getPolygonSignedArea(lineString2d.flat());\n const ccw = area < 0;\n // Exterior ring must be CCW and interior rings CW\n if (options.fixRingWinding && ((count === 0 && !ccw) || (count > 0 && ccw))) {\n lineString.reverse();\n area = -area;\n }\n ringAreas.push(area);\n flattenLineString(lineString, data, polygons, options);\n count++;\n }\n if (count > 0) {\n areas.push(ringAreas);\n indices.push(polygons);\n }\n}\n/**\n * Flatten single GeoJSON feature into Flat GeoJSON\n *\n * @param feature\n * @param options\n * @returns A Flat GeoJSON feature\n */\nfunction flattenFeature(feature, options) {\n const { geometry } = feature;\n if (geometry.type === 'GeometryCollection') {\n throw new Error('GeometryCollection type not supported');\n }\n const data = [];\n const indices = [];\n let areas;\n let type;\n switch (geometry.type) {\n case 'Point':\n type = 'Point';\n flattenPoint(geometry.coordinates, data, indices, options);\n break;\n case 'MultiPoint':\n type = 'Point';\n geometry.coordinates.map((c) => flattenPoint(c, data, indices, options));\n break;\n case 'LineString':\n type = 'LineString';\n flattenLineString(geometry.coordinates, data, indices, options);\n break;\n case 'MultiLineString':\n type = 'LineString';\n geometry.coordinates.map((c) => flattenLineString(c, data, indices, options));\n break;\n case 'Polygon':\n type = 'Polygon';\n areas = [];\n flattenPolygon(geometry.coordinates, data, indices, areas, options);\n break;\n case 'MultiPolygon':\n type = 'Polygon';\n areas = [];\n geometry.coordinates.map((c) => flattenPolygon(c, data, indices, areas, options));\n break;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n return { ...feature, geometry: { type, indices, data, areas } };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getGeometryInfo } from \"../geometry-api/geometry-info.js\";\nimport { convertGeojsonToFlatGeojson } from \"./convert-geojson-to-flat-geojson.js\";\nimport { convertFlatGeojsonToBinaryFeatureCollection } from \"./convert-flat-geojson-to-binary-features.js\";\n/**\n * Convert GeoJSON features to flat binary arrays\n *\n * @param features\n * @param options\n * @returns features in binary format, grouped by geometry type\n */\nexport function convertGeojsonToBinaryFeatureCollection(features, options = { fixRingWinding: true, triangulate: true }) {\n const geometryInfo = getGeometryInfo(features);\n const coordLength = geometryInfo.coordLength;\n const { fixRingWinding } = options;\n const flatFeatures = convertGeojsonToFlatGeojson(features, { coordLength, fixRingWinding });\n return convertFlatGeojsonToBinaryFeatureCollection(flatFeatures, geometryInfo, {\n numericPropKeys: options.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array,\n triangulate: options.triangulate\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { convertBinaryGeometryToGeometry } from \"../geometry-converters/convert-binary-geometry-to-geojson.js\";\n/**\n * Convert binary geometry representation to GeoJSON\n * @param data geometry data in binary representation\n * @param options\n * @param options.type Input data type: Point, LineString, or Polygon\n * @param options.featureId Global feature id. If specified, only a single feature is extracted\n * @return GeoJSON objects\n */\nexport function convertBinaryFeatureCollectionToGeojson(data, options) {\n const globalFeatureId = options?.globalFeatureId;\n if (globalFeatureId !== undefined) {\n return getSingleFeature(data, globalFeatureId);\n }\n return parseFeatures(data, options?.type);\n}\n/**\n * Return a single feature from a binary geometry representation as GeoJSON\n * @param data geometry data in binary representation\n * @return GeoJSON feature\n */\nfunction getSingleFeature(data, globalFeatureId) {\n const dataArray = normalizeInput(data);\n for (const data of dataArray) {\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n // Scan through data until we find matching feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, i);\n }\n lastIndex = i;\n lastValue = currValue;\n }\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, data.featureIds.value.length);\n }\n }\n throw new Error(`featureId:${globalFeatureId} not found`);\n}\nfunction parseFeatures(data, type) {\n const dataArray = normalizeInput(data, type);\n return parseFeatureCollection(dataArray);\n}\n// Normalize features\n// Return an array of data objects, each of which have a type key\nfunction normalizeInput(data, type) {\n const features = [];\n if (data.points) {\n data.points.type = 'Point';\n features.push(data.points);\n }\n if (data.lines) {\n data.lines.type = 'LineString';\n features.push(data.lines);\n }\n if (data.polygons) {\n data.polygons.type = 'Polygon';\n features.push(data.polygons);\n }\n return features;\n}\n/** Parse input binary data and return an array of GeoJSON Features */\nfunction parseFeatureCollection(dataArray) {\n const features = [];\n for (const data of dataArray) {\n if (data.featureIds.value.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n // Need to deduce start, end indices of each feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n features.push(parseFeature(data, lastIndex, i));\n lastIndex = i;\n lastValue = currValue;\n }\n // Last feature\n features.push(parseFeature(data, lastIndex, data.featureIds.value.length));\n }\n return features;\n}\n/** Parse input binary data and return a single GeoJSON Feature */\nfunction parseFeature(data, startIndex, endIndex) {\n const geometry = convertBinaryGeometryToGeometry(data, startIndex, endIndex);\n const properties = parseProperties(data, startIndex, endIndex);\n const fields = parseFields(data, startIndex, endIndex);\n return { type: 'Feature', geometry, properties, ...fields };\n}\n/** Parse input binary data and return an object of fields */\nfunction parseFields(data, startIndex = 0, endIndex) {\n return data.fields && data.fields[data.featureIds.value[startIndex]];\n}\n/** Parse input binary data and return an object of properties */\nfunction parseProperties(data, startIndex = 0, endIndex) {\n const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);\n for (const key in data.numericProps) {\n properties[key] = data.numericProps[key].value[startIndex];\n }\n return properties;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** A DataView that tracks byte offset when reading. */\nexport class BinaryReader {\n arrayBuffer;\n dataView;\n byteOffset;\n littleEndian;\n constructor(arrayBuffer, isBigEndian = false) {\n this.arrayBuffer = arrayBuffer;\n this.dataView = new DataView(arrayBuffer);\n this.byteOffset = 0;\n this.littleEndian = !isBigEndian;\n }\n readUInt8() {\n const value = this.dataView.getUint8(this.byteOffset);\n this.byteOffset += 1;\n return value;\n }\n readUInt16() {\n const value = this.dataView.getUint16(this.byteOffset, this.littleEndian);\n this.byteOffset += 2;\n return value;\n }\n readUInt32() {\n const value = this.dataView.getUint32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readInt8() {\n const value = this.dataView.getInt8(this.byteOffset);\n this.byteOffset += 1;\n return value;\n }\n readInt16() {\n const value = this.dataView.getInt16(this.byteOffset, this.littleEndian);\n this.byteOffset += 2;\n return value;\n }\n readInt32() {\n const value = this.dataView.getInt32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readFloat() {\n const value = this.dataView.getFloat32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readDouble() {\n const value = this.dataView.getFloat64(this.byteOffset, this.littleEndian);\n this.byteOffset += 8;\n return value;\n }\n readVarInt() {\n let result = 0;\n let bytesRead = 0;\n let nextByte;\n do {\n // TODO - this needs to be accessed via data view?\n nextByte = this.dataView.getUint8(this.byteOffset + bytesRead);\n result += (nextByte & 0x7f) << (7 * bytesRead);\n bytesRead++;\n } while (nextByte >= 0x80);\n this.byteOffset += bytesRead;\n return result;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\nimport { BinaryReader } from \"../../utils/binary-reader.js\";\nimport { WKBGeometryType } from \"./helpers/wkb-types.js\";\n/**\n * Check if an array buffer might be a TWKB array buffer\n * @param arrayBuffer The array buffer to check\n * @returns false if this is definitely not a TWKB array buffer, true if it might be a TWKB array buffer\n */\nexport function isTWKB(arrayBuffer) {\n const binaryReader = new BinaryReader(arrayBuffer);\n const type = binaryReader.readUInt8();\n const geometryType = type & 0x0f;\n // Only geometry types 1 to 7 (point to geometry collection are currently defined)\n if (geometryType < 1 || geometryType > 7) {\n return false;\n }\n return true;\n}\n/** Converts a TWKB encoded buffer to a GeoJSON Geometry */\nexport function convertTWKBToGeometry(arrayBuffer) {\n const binaryReader = new BinaryReader(arrayBuffer);\n const context = parseTWKBHeader(binaryReader);\n if (context.hasSizeAttribute) {\n binaryReader.readVarInt();\n }\n if (context.hasBoundingBox) {\n let dimensions = 2;\n if (context.hasZ) {\n dimensions++;\n }\n if (context.hasM) {\n dimensions++;\n }\n // TODO why are we throwing away these datums?\n for (let i = 0; i < dimensions; i++) {\n binaryReader.readVarInt();\n binaryReader.readVarInt();\n }\n }\n return parseGeometry(binaryReader, context, context.geometryType);\n}\nfunction parseTWKBHeader(binaryReader) {\n const type = binaryReader.readUInt8();\n const metadataHeader = binaryReader.readUInt8();\n const geometryType = type & 0x0f;\n const precision = zigZagDecode(type >> 4);\n const hasExtendedPrecision = Boolean((metadataHeader >> 3) & 1);\n let hasZ = false;\n let hasM = false;\n let zPrecision = 0;\n let zPrecisionFactor = 1;\n let mPrecision = 0;\n let mPrecisionFactor = 1;\n if (hasExtendedPrecision) {\n const extendedPrecision = binaryReader.readUInt8();\n hasZ = (extendedPrecision & 0x01) === 0x01;\n hasM = (extendedPrecision & 0x02) === 0x02;\n zPrecision = zigZagDecode((extendedPrecision & 0x1c) >> 2);\n zPrecisionFactor = Math.pow(10, zPrecision);\n mPrecision = zigZagDecode((extendedPrecision & 0xe0) >> 5);\n mPrecisionFactor = Math.pow(10, mPrecision);\n }\n return {\n geometryType,\n precision,\n precisionFactor: Math.pow(10, precision),\n hasBoundingBox: Boolean((metadataHeader >> 0) & 1),\n hasSizeAttribute: Boolean((metadataHeader >> 1) & 1),\n hasIdList: Boolean((metadataHeader >> 2) & 1),\n hasExtendedPrecision,\n isEmpty: Boolean((metadataHeader >> 4) & 1),\n hasZ,\n hasM,\n zPrecision,\n zPrecisionFactor,\n mPrecision,\n mPrecisionFactor\n };\n}\nfunction parseGeometry(binaryReader, context, geometryType) {\n switch (geometryType) {\n case WKBGeometryType.Point:\n return parsePoint(binaryReader, context);\n case WKBGeometryType.LineString:\n return parseLineString(binaryReader, context);\n case WKBGeometryType.Polygon:\n return parsePolygon(binaryReader, context);\n case WKBGeometryType.MultiPoint:\n return parseMultiPoint(binaryReader, context);\n case WKBGeometryType.MultiLineString:\n return parseMultiLineString(binaryReader, context);\n case WKBGeometryType.MultiPolygon:\n return parseMultiPolygon(binaryReader, context);\n case WKBGeometryType.GeometryCollection:\n return parseGeometryCollection(binaryReader, context);\n default:\n throw new Error(`GeometryType ${geometryType} not supported`);\n }\n}\n// GEOMETRIES\nfunction parsePoint(reader, context) {\n if (context.isEmpty) {\n return { type: 'Point', coordinates: [] };\n }\n return { type: 'Point', coordinates: readFirstPoint(reader, context) };\n}\nfunction parseLineString(reader, context) {\n if (context.isEmpty) {\n return { type: 'LineString', coordinates: [] };\n }\n const pointCount = reader.readVarInt();\n const previousPoint = makePreviousPoint(context);\n const points = [];\n for (let i = 0; i < pointCount; i++) {\n points.push(parseNextPoint(reader, context, previousPoint));\n }\n return { type: 'LineString', coordinates: points };\n}\nfunction parsePolygon(reader, context) {\n if (context.isEmpty) {\n return { type: 'Polygon', coordinates: [] };\n }\n const ringCount = reader.readVarInt();\n const previousPoint = makePreviousPoint(context);\n const exteriorRingLength = reader.readVarInt();\n const exteriorRing = [];\n for (let i = 0; i < exteriorRingLength; i++) {\n exteriorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n const polygon = [exteriorRing];\n for (let i = 1; i < ringCount; i++) {\n const interiorRingCount = reader.readVarInt();\n const interiorRing = [];\n for (let j = 0; j < interiorRingCount; j++) {\n interiorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n polygon.push(interiorRing);\n }\n return { type: 'Polygon', coordinates: polygon };\n}\nfunction parseMultiPoint(reader, context) {\n if (context.isEmpty) {\n return { type: 'MultiPoint', coordinates: [] };\n }\n const previousPoint = makePreviousPoint(context);\n const pointCount = reader.readVarInt();\n const coordinates = [];\n for (let i = 0; i < pointCount; i++) {\n coordinates.push(parseNextPoint(reader, context, previousPoint));\n }\n return { type: 'MultiPoint', coordinates };\n}\nfunction parseMultiLineString(reader, context) {\n if (context.isEmpty) {\n return { type: 'MultiLineString', coordinates: [] };\n }\n const previousPoint = makePreviousPoint(context);\n const lineStringCount = reader.readVarInt();\n const coordinates = [];\n for (let i = 0; i < lineStringCount; i++) {\n const pointCount = reader.readVarInt();\n const lineString = [];\n for (let j = 0; j < pointCount; j++) {\n lineString.push(parseNextPoint(reader, context, previousPoint));\n }\n coordinates.push(lineString);\n }\n return { type: 'MultiLineString', coordinates };\n}\nfunction parseMultiPolygon(reader, context) {\n if (context.isEmpty) {\n return { type: 'MultiPolygon', coordinates: [] };\n }\n const previousPoint = makePreviousPoint(context);\n const polygonCount = reader.readVarInt();\n const polygons = [];\n for (let i = 0; i < polygonCount; i++) {\n const ringCount = reader.readVarInt();\n const exteriorPointCount = reader.readVarInt();\n const exteriorRing = [];\n for (let j = 0; j < exteriorPointCount; j++) {\n exteriorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n const polygon = exteriorRing ? [exteriorRing] : [];\n for (let j = 1; j < ringCount; j++) {\n const interiorRing = [];\n const interiorRingLength = reader.readVarInt();\n for (let k = 0; k < interiorRingLength; k++) {\n interiorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n polygon.push(interiorRing);\n }\n polygons.push(polygon);\n }\n return { type: 'MultiPolygon', coordinates: polygons };\n}\n/** Geometry collection not yet supported */\nfunction parseGeometryCollection(reader, context) {\n return { type: 'GeometryCollection', geometries: [] };\n /**\n if (context.isEmpty) {\n return {type: 'GeometryCollection', geometries: []};\n }\n \n const geometryCount = reader.readVarInt();\n \n const geometries: Geometry[] = new Array(geometryCount);\n for (let i = 0; i < geometryCount; i++) {\n const geometry = parseGeometry(reader, context, geometryType);\n geometries.push(geometry);\n }\n \n return {type: 'GeometryCollection', geometries: []};\n */\n}\n// HELPERS\n/**\n * Maps negative values to positive values while going back and\n forth (0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 ...)\n */\nfunction zigZagDecode(value) {\n return (value >> 1) ^ -(value & 1);\n}\nfunction makePointCoordinates(x, y, z, m) {\n return (z !== undefined ? (m !== undefined ? [x, y, z, m] : [x, y, z]) : [x, y]);\n}\nfunction makePreviousPoint(context) {\n return makePointCoordinates(0, 0, context.hasZ ? 0 : undefined, context.hasM ? 0 : undefined);\n}\nfunction readFirstPoint(reader, context) {\n const x = zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n const y = zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n const z = context.hasZ ? zigZagDecode(reader.readVarInt()) / context.zPrecisionFactor : undefined;\n const m = context.hasM ? zigZagDecode(reader.readVarInt()) / context.mPrecisionFactor : undefined;\n return makePointCoordinates(x, y, z, m);\n}\n/**\n * Modifies previousPoint\n */\nfunction parseNextPoint(reader, context, previousPoint) {\n previousPoint[0] += zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n previousPoint[1] += zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n if (context.hasZ) {\n previousPoint[2] += zigZagDecode(reader.readVarInt()) / context.zPrecisionFactor;\n }\n if (context.hasM) {\n previousPoint[3] += zigZagDecode(reader.readVarInt()) / context.mPrecisionFactor;\n }\n // Copy the point\n return previousPoint.slice();\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n/**\n * Stringifies a GeoJSON object into WKT\n * @param geojson\n * @returns string\n */\nexport function convertGeometryToWKT(geometry) {\n switch (geometry.type) {\n case 'Point':\n return `POINT ${wrapParens(pairWKT(geometry.coordinates))}`;\n case 'LineString':\n return `LINESTRING ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'Polygon':\n return `POLYGON ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'MultiPoint':\n return `MULTIPOINT ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'MultiPolygon':\n return `MULTIPOLYGON ${wrapParens(multiRingsWKT(geometry.coordinates))}`;\n case 'MultiLineString':\n return `MULTILINESTRING ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'GeometryCollection':\n return `GEOMETRYCOLLECTION ${wrapParens(geometry.geometries.map(convertGeometryToWKT).join(', '))}`;\n default:\n throw new Error('convertGeometryToWKT requires a valid GeoJSON Geometry (not Feature) as input');\n }\n}\nfunction pairWKT(c) {\n return c.join(' ');\n}\nfunction ringWKT(r) {\n return r.map(pairWKT).join(', ');\n}\nfunction ringsWKT(r) {\n return r.map(ringWKT).map(wrapParens).join(', ');\n}\nfunction multiRingsWKT(r) {\n return r.map(ringsWKT).map(wrapParens).join(', ');\n}\nfunction wrapParens(s) {\n return `(${s})`;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\nconst LE = true;\nconst BE = false;\nexport class BinaryWriter {\n arrayBuffer;\n dataView;\n byteOffset = 0;\n allowResize = false;\n constructor(size, allowResize) {\n this.arrayBuffer = new ArrayBuffer(size);\n this.dataView = new DataView(this.arrayBuffer);\n this.byteOffset = 0;\n this.allowResize = allowResize || false;\n }\n writeUInt8(value) {\n this._ensureSize(1);\n this.dataView.setUint8(this.byteOffset, value);\n this.byteOffset += 1;\n }\n writeUInt16LE(value) {\n this._ensureSize(2);\n this.dataView.setUint16(this.byteOffset, value, LE);\n this.byteOffset += 2;\n }\n writeUInt16BE(value) {\n this._ensureSize(2);\n this.dataView.setUint16(this.byteOffset, value, BE);\n this.byteOffset += 2;\n }\n writeUInt32LE(value) {\n this._ensureSize(4);\n this.dataView.setUint32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeUInt32BE(value) {\n this._ensureSize(4);\n this.dataView.setUint32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeInt8(value) {\n this._ensureSize(1);\n this.dataView.setInt8(this.byteOffset, value);\n this.byteOffset += 1;\n }\n writeInt16LE(value) {\n this._ensureSize(2);\n this.dataView.setInt16(this.byteOffset, value, LE);\n this.byteOffset += 2;\n }\n writeInt16BE(value) {\n this._ensureSize(2);\n this.dataView.setInt16(this.byteOffset, value, BE);\n this.byteOffset += 2;\n }\n writeInt32LE(value) {\n this._ensureSize(4);\n this.dataView.setInt32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeInt32BE(value) {\n this._ensureSize(4);\n this.dataView.setInt32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeFloatLE(value) {\n this._ensureSize(4);\n this.dataView.setFloat32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeFloatBE(value) {\n this._ensureSize(4);\n this.dataView.setFloat32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeDoubleLE(value) {\n this._ensureSize(8);\n this.dataView.setFloat64(this.byteOffset, value, LE);\n this.byteOffset += 8;\n }\n writeDoubleBE(value) {\n this._ensureSize(8);\n this.dataView.setFloat64(this.byteOffset, value, BE);\n this.byteOffset += 8;\n }\n /** A varint uses a variable number of bytes */\n writeVarInt(value) {\n // TODO - ensure size?\n let length = 1;\n while ((value & 0xffffff80) !== 0) {\n this.writeUInt8((value & 0x7f) | 0x80);\n value >>>= 7;\n length++;\n }\n this.writeUInt8(value & 0x7f);\n return length;\n }\n writeTypedArray(typedArray) {\n this._ensureSize(typedArray.byteLength);\n const tempArray = new Uint8Array(this.arrayBuffer);\n tempArray.set(typedArray, this.byteOffset);\n this.byteOffset += typedArray.byteLength;\n }\n /** Append another ArrayBuffer to this ArrayBuffer */\n writeBuffer(arrayBuffer) {\n this._ensureSize(arrayBuffer.byteLength);\n const tempArray = new Uint8Array(this.arrayBuffer);\n tempArray.set(new Uint8Array(arrayBuffer), this.byteOffset);\n this.byteOffset += arrayBuffer.byteLength;\n }\n /** Resizes this.arrayBuffer if not enough space */\n _ensureSize(size) {\n if (this.arrayBuffer.byteLength < this.byteOffset + size) {\n if (this.allowResize) {\n const newArrayBuffer = new ArrayBuffer(this.byteOffset + size);\n const tempArray = new Uint8Array(newArrayBuffer);\n tempArray.set(new Uint8Array(this.arrayBuffer));\n this.arrayBuffer = newArrayBuffer;\n }\n else {\n throw new Error('BinaryWriter overflow');\n }\n }\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\nimport { WKBGeometryType } from \"./helpers/wkb-types.js\";\nimport { BinaryWriter } from \"../../utils/binary-writer.js\";\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport function convertGeometryToWKB(geometry, options = {}) {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry, options) {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates, options) {\n const writer = new BinaryWriter(getPointSize(options));\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.Point, options);\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n }\n else {\n writeCoordinate(writer, coordinates, options);\n }\n return writer.arrayBuffer;\n}\n/** Write coordinate to buffer */\nfunction writeCoordinate(writer, coordinate, options) {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n/** Get encoded size of Point geometry */\nfunction getPointSize(options) {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(coordinates, options) {\n const size = getLineStringSize(coordinates, options);\n const writer = new BinaryWriter(size);\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n return writer.arrayBuffer;\n}\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates, options) {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates, options) {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.Polygon, options);\n const [exteriorRing = [], ...interiorRings] = coordinates;\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n }\n else {\n writer.writeUInt32LE(0);\n }\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n return writer.arrayBuffer;\n}\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates, options) {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing = [], ...interiorRings] = coordinates;\n let size = 1 + 4 + 4;\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n return size;\n}\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint, options) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n return writer.arrayBuffer;\n}\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint, options) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString, options) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n return writer.arrayBuffer;\n}\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString, options) {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n return size;\n}\nfunction encodeMultiPolygon(multiPolygon, options) {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n return writer.arrayBuffer;\n}\nfunction getMultiPolygonSize(multiPolygon, options) {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n return size;\n}\nfunction encodeGeometryCollection(collection, options) {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = convertGeometryToWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n return writer.arrayBuffer;\n}\nfunction getGeometryCollectionSize(collection, options) {\n let size = 1 + 4 + 4;\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n return size;\n}\n// HELPERS\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer, geometryType, options) {\n const { hasZ, hasM, srid } = options;\n let dimensionType = 0;\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n }\n else if (hasZ) {\n dimensionType += 1000;\n }\n else if (hasM) {\n dimensionType += 2000;\n }\n }\n else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options) {\n let coordinateSize = 16;\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n return coordinateSize;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\nimport { BinaryWriter } from \"../../utils/binary-writer.js\";\nimport { WKBGeometryType } from \"./helpers/wkb-types.js\";\nexport function convertGeometryToTWKB(geometry, options) {\n const writer = new BinaryWriter(0, true);\n const context = {\n ...getTwkbPrecision(5, 0, 0),\n hasZ: options?.hasZ,\n hasM: options?.hasM\n };\n encodeGeometry(writer, geometry, context);\n // TODO - we need to slice it?\n return writer.arrayBuffer;\n}\nfunction encodeGeometry(writer, geometry, context) {\n switch (geometry.type) {\n case 'Point':\n return encodePoint(writer, context, geometry);\n case 'LineString':\n return encodeLineString(writer, context, geometry);\n case 'Polygon':\n return encodePolygon(writer, context, geometry);\n case 'MultiPoint':\n return encodeMultiPoint(writer, context, geometry);\n case 'MultiLineString':\n return encodeMultiLineString(writer, context, geometry);\n case 'MultiPolygon':\n return encodeMultiPolygon(writer, context, geometry);\n case 'GeometryCollection':\n return encodeGeometryCollection(writer, context, geometry);\n default:\n throw new Error('unsupported geometry type');\n }\n}\nfunction encodePoint(writer, context, point) {\n const isEmpty = point.coordinates.length === 0 || point[0] === 'undefined' || point[1] === 'undefined';\n writeTwkbHeader(writer, context, WKBGeometryType.Point, isEmpty);\n if (!isEmpty) {\n const previousPoint = [0, 0, 0, 0];\n writeTwkbPoint(writer, context, point.coordinates, previousPoint);\n }\n}\nfunction encodeLineString(writer, context, lineString) {\n const points = lineString.coordinates;\n const isEmpty = points.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.LineString, isEmpty);\n if (!isEmpty) {\n writer.writeVarInt(points.length);\n const previousPoint = [0, 0, 0, 0];\n for (const point of points) {\n writeTwkbPoint(writer, context, point, previousPoint);\n }\n }\n return writer.arrayBuffer;\n}\nfunction encodePolygon(writer, context, polygon) {\n const polygonRings = polygon.coordinates;\n const isEmpty = polygonRings.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.Polygon, isEmpty);\n if (!isEmpty) {\n writer.writeVarInt(polygonRings.length);\n const previousPoint = [0, 0, 0, 0];\n for (const ring of polygonRings) {\n writer.writeVarInt(ring.length);\n for (const point of ring) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n return writer.arrayBuffer;\n}\nfunction encodeMultiPoint(writer, context, multiPoint) {\n const points = multiPoint.coordinates;\n const isEmpty = points.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.MultiPoint, isEmpty);\n if (!isEmpty) {\n writer.writeVarInt(points.length);\n const previousPoint = [0, 0, 0, 0];\n for (let i = 0; i < points.length; i++) {\n writeTwkbPoint(writer, context, previousPoint, points[i]);\n }\n }\n}\nfunction encodeMultiLineString(writer, context, multiLineStrings) {\n const lineStrings = multiLineStrings.coordinates;\n const isEmpty = lineStrings.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.MultiLineString, isEmpty);\n if (!isEmpty) {\n writer.writeVarInt(lineStrings.length);\n const previousPoint = [0, 0, 0, 0];\n for (const lineString of lineStrings) {\n writer.writeVarInt(lineString.length);\n for (const point of lineString) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n return writer.arrayBuffer;\n}\nfunction encodeMultiPolygon(writer, context, multiPolygon) {\n const { coordinates } = multiPolygon;\n const isEmpty = coordinates.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.MultiPolygon, isEmpty);\n if (!isEmpty) {\n const polygons = coordinates;\n writer.writeVarInt(polygons.length);\n const previousPoint = [0, 0, 0, 0];\n for (const polygonRings of polygons) {\n writer.writeVarInt(polygonRings.length);\n for (const ring of polygonRings) {\n writer.writeVarInt(ring.length);\n for (const point of ring) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n }\n}\nfunction encodeGeometryCollection(writer, context, geometryCollection) {\n const { geometries } = geometryCollection;\n const isEmpty = geometries.length === 0;\n writeTwkbHeader(writer, context, WKBGeometryType.GeometryCollection, isEmpty);\n if (geometries.length > 0) {\n writer.writeVarInt(geometries.length);\n for (const geometry of geometries) {\n encodeGeometry(writer, geometry, context);\n }\n }\n}\n/**\n *\n * @param writer\n * @param context\n * @param geometryType\n * @param isEmpty\n */\nfunction writeTwkbHeader(writer, context, geometryType, isEmpty) {\n const type = (zigZagEncode(context.xy) << 4) + geometryType;\n let metadataHeader = context.hasZ || context.hasM ? 1 << 3 : 0;\n metadataHeader += isEmpty ? 1 << 4 : 0;\n writer.writeUInt8(type);\n writer.writeUInt8(metadataHeader);\n if (context.hasZ || context.hasM) {\n let extendedPrecision = 0;\n if (context.hasZ) {\n extendedPrecision |= 0x1;\n }\n if (context.hasM) {\n extendedPrecision |= 0x2;\n }\n writer.writeUInt8(extendedPrecision);\n }\n}\n/**\n * Write one point to array buffer. ZigZagEncoding the delta fdrom the previous point. Mutates previousPoint.\n * @param writer\n * @param context\n * @param previousPoint - Mutated by this function\n * @param point\n */\nfunction writeTwkbPoint(writer, context, point, previousPoint) {\n const x = point[0] * context.xyFactor;\n const y = point[1] * context.xyFactor;\n const z = point[2] * context.zFactor;\n const m = point[3] * context.mFactor;\n writer.writeVarInt(zigZagEncode(x - previousPoint[0]));\n writer.writeVarInt(zigZagEncode(y - previousPoint[1]));\n if (context.hasZ) {\n writer.writeVarInt(zigZagEncode(z - previousPoint[2]));\n }\n if (context.hasM) {\n writer.writeVarInt(zigZagEncode(m - previousPoint[3]));\n }\n previousPoint[0] = x;\n previousPoint[1] = y;\n previousPoint[2] = z;\n previousPoint[3] = m;\n}\n// HELPERS\nfunction zigZagEncode(value) {\n return (value << 1) ^ (value >> 31);\n}\nfunction getTwkbPrecision(xyPrecision, zPrecision, mPrecision) {\n return {\n xy: xyPrecision,\n z: zPrecision,\n m: mPrecision,\n xyFactor: Math.pow(10, xyPrecision),\n zFactor: Math.pow(10, zPrecision),\n mFactor: Math.pow(10, mPrecision)\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n/**\n *\n * @param wkt\n * @param options\n * @returns\n */\nexport function parseWKTCRS(wkt, options) {\n if (options?.debug) {\n console.log('[wktcrs] parse starting with\\n', wkt);\n }\n // move all keywords into first array item slot\n // from PARAM[12345, 67890] to [\"PARAM\", 12345, 67890]\n wkt = wkt.replace(/[A-Z][A-Z\\d_]+\\[/gi, (match) => `[\"${match.substr(0, match.length - 1)}\",`);\n // wrap variables in strings\n // from [...,NORTH] to [...,\"NORTH\"]\n wkt = wkt.replace(/, ?([A-Z][A-Z\\d_]+[,\\]])/gi, (match, p1) => {\n const varname = p1.substr(0, p1.length - 1);\n return ',' + `\"${options?.raw ? 'raw:' : ''}${varname}\"${p1[p1.length - 1]}`;\n });\n if (options?.raw) {\n // replace all numbers with strings\n wkt = wkt.replace(/, {0,2}(-?[\\.\\d]+)(?=,|\\])/g, function (match, p1) {\n return ',' + `\"${options?.raw ? 'raw:' : ''}${p1}\"`;\n });\n }\n // str should now be valid JSON\n if (options?.debug) {\n console.log(`[wktcrs] json'd wkt: '${wkt}'`);\n }\n let data;\n try {\n data = JSON.parse(wkt);\n }\n catch (error) {\n console.error(`[wktcrs] failed to parse '${wkt}'`);\n throw error;\n }\n if (options?.debug) {\n console.log(`[wktcrs] json parsed: '${wkt}'`);\n }\n function process(data, parent) {\n const kw = data[0];\n // after removing the first element with .shift()\n // data is now just an array of attributes\n data.forEach(function (it) {\n if (Array.isArray(it)) {\n process(it, data);\n }\n });\n const kwarr = `MULTIPLE_${kw}`;\n if (kwarr in parent) {\n parent[kwarr].push(data);\n }\n else if (kw in parent) {\n parent[kwarr] = [parent[kw], data];\n delete parent[kw];\n }\n else {\n parent[kw] = data;\n }\n return parent;\n }\n const result = process(data, [data]);\n if (options?.debug) {\n console.log('[wktcrs] parse returning', result);\n }\n if (options?.sort) {\n sort(result, options);\n }\n return result;\n}\nfunction sort(data, options) {\n const keys = Object.keys(data).filter((k) => !/\\d+/.test(k));\n const keywords = options?.keywords || [];\n if (!options?.keywords) {\n // try to find multiples\n const counts = {};\n if (Array.isArray(data)) {\n data.forEach((it) => {\n if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {\n const k = it[0];\n if (!counts[k])\n counts[k] = 0;\n counts[k]++;\n }\n });\n for (const k in counts) {\n if (counts[k] > 0)\n keywords.push(k);\n }\n }\n }\n keys.forEach((key) => {\n data[key] = sort(data[key]);\n });\n keywords.forEach((key) => {\n const indices = [];\n const params = [];\n data.forEach((item, i) => {\n if (Array.isArray(item) && item[0] === key) {\n indices.push(i);\n params.push(item);\n }\n });\n params.sort((a, b) => {\n a = a[1].toString();\n b = b[1].toString();\n return a < b ? -1 : a > b ? 1 : 0;\n });\n // replace in order\n params.forEach((param, i) => {\n data[indices[i]] = param;\n });\n });\n return data;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n/**\n * convert JSON representation of Well-Known Text\n * back to standard Well-Known Text\n */\nexport function encodeWKTCRS(wkt, options) {\n if (Array.isArray(wkt) && wkt.length === 1 && Array.isArray(wkt[0])) {\n wkt = wkt[0]; // ignore first extra wrapper array\n }\n const [kw, ...attrs] = wkt;\n const str = `${kw}[${attrs\n .map((attr) => {\n if (Array.isArray(attr)) {\n return encodeWKTCRS(attr, options);\n }\n else if (typeof attr === 'number') {\n return attr.toString();\n }\n else if (typeof attr === 'string') {\n // can't automatically convert all caps to varibale\n // because EPSG is string in AUTHORITY[\"EPSG\", ...]\n if (attr.startsWith('raw:')) {\n // convert \"raw:NORTH\" to NORTH\n return attr.replace('raw:', '');\n }\n return `\"${attr}\"`;\n }\n throw new Error(`[wktcrs] unexpected attribute \"${attr}\"`);\n })\n .join(',')}]`;\n return str;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { earcut } from '@math.gl/polygon';\nimport { updateBoundsFromGeoArrowSamples } from '@loaders.gl/geoarrow';\n/**\n * Binary geometry type\n */\nvar BinaryGeometryType;\n(function (BinaryGeometryType) {\n BinaryGeometryType[\"points\"] = \"points\";\n BinaryGeometryType[\"lines\"] = \"lines\";\n BinaryGeometryType[\"polygons\"] = \"polygons\";\n})(BinaryGeometryType || (BinaryGeometryType = {}));\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 convertGeoArrowToBinaryFeatureCollection(geoColumn, geoEncoding, options) {\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 const chunks = options?.chunkIndex !== undefined && options?.chunkIndex >= 0\n ? [geoColumn.data[options?.chunkIndex]]\n : geoColumn.data;\n let bounds = [Infinity, Infinity, -Infinity, -Infinity];\n let globalFeatureIdOffset = options?.chunkOffset || 0;\n const binaryGeometries = [];\n chunks.forEach((chunk) => {\n const { featureIds, flatCoordinateArray, nDim, geomOffset, triangles } = getBinaryGeometriesFromChunk(chunk, geoEncoding, options);\n const globalFeatureIds = new Uint32Array(featureIds.length);\n for (let i = 0; i < featureIds.length; i++) {\n globalFeatureIds[i] = featureIds[i] + globalFeatureIdOffset;\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 // TODO: check if chunks are sequentially accessed\n globalFeatureIdOffset += chunk.length;\n // NOTE: deck.gl defines the BinaryFeatureCollection 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 bounds = updateBoundsFromGeoArrowSamples(flatCoordinateArray, nDim, bounds);\n });\n return {\n binaryGeometries,\n bounds,\n featureTypes,\n ...(options?.calculateMeanCenters\n ? { meanCenters: getMeanCentersFromBinaryGeometries(binaryGeometries) }\n : {})\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/**\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) {\n const globalMeanCenters = [];\n binaryGeometries.forEach((binaryGeometry) => {\n let binaryGeometryType = null;\n if (binaryGeometry.points && binaryGeometry.points.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.points;\n }\n else if (binaryGeometry.lines && binaryGeometry.lines.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.lines;\n }\n else if (binaryGeometry.polygons && binaryGeometry.polygons.positions.value.length > 0) {\n binaryGeometryType = BinaryGeometryType.polygons;\n }\n const binaryContent = binaryGeometryType ? binaryGeometry[binaryGeometryType] : null;\n if (binaryContent && binaryGeometryType !== null) {\n const featureIds = binaryContent.featureIds.value;\n const flatCoordinateArray = binaryContent.positions.value;\n const nDim = binaryContent.positions.size;\n const primitivePolygonIndices = binaryContent.type === 'Polygon' ? binaryContent.primitivePolygonIndices?.value : undefined;\n const meanCenters = getMeanCentersFromGeometry(featureIds, flatCoordinateArray, nDim, binaryGeometryType, primitivePolygonIndices);\n meanCenters.forEach((center) => {\n globalMeanCenters.push(center);\n });\n }\n });\n return globalMeanCenters;\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(featureIds, flatCoordinateArray, nDim, geometryType, primitivePolygonIndices) {\n const meanCenters = [];\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 (geometryType === BinaryGeometryType.polygons &&\n primitivePolygonIndices?.[primitiveIdx] === coordIdx) {\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 }\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 * 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(chunk, geoEncoding, options) {\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 * 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(polygonIndices, primitivePolygonIndices, flatCoordinateArray, nDim) {\n try {\n let primitiveIndex = 0;\n const triangles = [];\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 = [];\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(slicedFlatCoords, holeIndices.length > 0 ? holeIndices : undefined, nDim);\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 }\n catch (error) {\n // if earcut fails, return null\n return null;\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(chunk, geoEncoding, options) {\n const isMultiPolygon = geoEncoding === 'geoarrow.multipolygon';\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 const geometryIndexes = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndexes[i] = geomOffset[polygonOffset[i]];\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 const triangles = options?.triangulate\n ? getTriangleIndices(geometryIndexes, geomOffset, flatCoordinateArray, nDim)\n : null;\n return {\n featureIds,\n nDim,\n flatCoordinateArray,\n geomOffset,\n geometryIndexes,\n ...(options?.triangulate && triangles ? { triangles } : {})\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, geoEncoding) {\n const isMultiLineString = geoEncoding === 'geoarrow.multilinestring';\n const lineData = isMultiLineString ? chunk.children[0] : chunk;\n const pointData = lineData.children[0];\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const geomOffset = lineData.valueOffsets;\n const flatCoordinateArray = coordData.values;\n // geometryIndexes is not needed for line string\n const geometryIndexes = new Uint16Array(0);\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\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 }\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 return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndexes\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, geoEncoding) {\n const isMultiPoint = geoEncoding === 'geoarrow.multipoint';\n const pointData = isMultiPoint ? chunk.children[0] : chunk;\n const coordData = pointData.children[0];\n const nDim = pointData.stride;\n const flatCoordinateArray = coordData.values;\n // geometryIndices is not needed for point\n const geometryIndexes = new Uint16Array(0);\n // geomOffset is not needed for point\n const geomOffset = new Int32Array(0);\n const numOfVertices = flatCoordinateArray.length / nDim;\n const featureIds = new Uint32Array(numOfVertices);\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 }\n else {\n for (let i = 0; i < chunk.length; i++) {\n featureIds[i] = i;\n }\n }\n return {\n featureIds,\n flatCoordinateArray,\n nDim,\n geomOffset,\n geometryIndexes\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/jessetane/hex-transcoder under MIT license\nconst alphabet = '0123456789abcdef';\nconst encodeLookup = [];\nconst decodeLookup = [];\nfor (let i = 0; i < 256; i++) {\n encodeLookup[i] = alphabet[(i >> 4) & 0xf] + alphabet[i & 0xf];\n if (i < 16) {\n if (i < 10) {\n decodeLookup[0x30 + i] = i;\n }\n else {\n decodeLookup[0x61 - 10 + i] = i;\n }\n }\n}\n/**\n * Encode a Uint8Array to a hex string\n *\n * @param array Bytes to encode to string\n * @return hex string\n */\nexport function encodeHex(array) {\n const length = array.length;\n let string = '';\n let i = 0;\n while (i < length) {\n string += encodeLookup[array[i++]];\n }\n return string;\n}\n/**\n * Decodes a hex string to a Uint8Array\n *\n * @param string hex string to decode to Uint8Array\n * @return Uint8Array\n */\nexport function decodeHex(string) {\n const sizeof = string.length >> 1;\n const length = sizeof << 1;\n const array = new Uint8Array(sizeof);\n let n = 0;\n let i = 0;\n while (i < length) {\n array[n++] = (decodeLookup[string.charCodeAt(i++)] << 4) | decodeLookup[string.charCodeAt(i++)];\n }\n return array;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../src/index.ts", "../src/lib/geometry-api/geometry-info.ts", "../src/lib/binary-geometry-api/binary-geometry-info.ts", "../src/lib/binary-geometry-api/transform-coordinates.ts", "../src/lib/table-converters/convert-geoarrow-table.ts", "../src/lib/geometry-converters/convert-binary-geometry-to-geojson.ts", "../src/lib/utils/concat-typed-arrays.ts", "../src/lib/binary-geometry-api/concat-binary-geometry.ts", "../src/lib/geometry-converters/wkb/helpers/wkb-types.ts", "../src/lib/geometry-converters/wkb/helpers/parse-wkb-header.ts", "../src/lib/geometry-converters/wkb/convert-wkb-to-binary-geometry.ts", "../src/lib/geometry-converters/wkb/convert-wkb-to-geometry.ts", "../src/lib/geometry-converters/wkb/convert-wkt-to-geometry.ts", "../src/lib/geometry-converters/convert-geoarrow-to-geojson.ts", "../src/lib/table-converters/convert-wkb-table-to-geojson.ts", "../src/lib/feature-collection-converters/convert-flat-geojson-to-binary-features.ts", "../src/lib/feature-collection-converters/convert-geojson-to-flat-geojson.ts", "../src/lib/feature-collection-converters/convert-geojson-to-binary-features.ts", "../src/lib/feature-collection-converters/convert-binary-features-to-geojson.ts", "../src/lib/utils/binary-reader.ts", "../src/lib/geometry-converters/wkb/convert-twkb-to-geometry.ts", "../src/lib/geometry-converters/wkb/convert-geometry-to-wkt.ts", "../src/lib/utils/binary-writer.ts", "../src/lib/geometry-converters/wkb/convert-geometry-to-wkb.ts", "../src/lib/geometry-converters/wkb/convert-geometry-to-twkb.ts", "../src/lib/wkt-crs/parse-wkt-crs.ts", "../src/lib/wkt-crs/encode-wkt-crs.ts", "../src/lib/feature-collection-converters/convert-geoarrow-to-binary-features.ts", "../src/lib/utils/hex-transcoder.ts"],
|
|
4
|
+
"sourcesContent": ["// Types from `@loaders.gl/schema`\n\n// Geo Metadata\n// import {default as GEOPARQUET_METADATA_SCHEMA} from './lib/geo/geoparquet-metadata-schema.json';\n// export {GEOPARQUET_METADATA_SCHEMA};\n// export {GEOPARQUET_METADATA_JSON_SCHEMA} from './lib/geoarrow/geoparquet-metadata-schema';\n\n// export type {GeoMetadata} from './lib/geoarrow/geoparquet-metadata';\n// export {\n// getGeoMetadata,\n// setGeoMetadata,\n// unpackGeoMetadata\n// } from './lib/geoarrow/geoparquet-metadata';\n// export {unpackJSONStringMetadata} from './lib/geoarrow/geoparquet-metadata';\n\n//\nexport type {GeojsonGeometryInfo} from './lib/geometry-api/geometry-info';\nexport {getGeometryInfo} from './lib/geometry-api/geometry-info';\n\n// Binary Geometry Utilities\nexport type {BinaryGeometryInfo} from './lib/binary-geometry-api/binary-geometry-info';\nexport {getBinaryGeometryInfo} from './lib/binary-geometry-api/binary-geometry-info';\nexport {\n transformBinaryCoords,\n transformGeoJsonCoords\n} from './lib/binary-geometry-api/transform-coordinates';\n\n// TABLE CONVERSION\nexport {convertGeoArrowToTable} from './lib/table-converters/convert-geoarrow-table';\nexport {convertWKBTableToGeoJSON} from './lib/table-converters/convert-wkb-table-to-geojson';\n\n// FEATURE COLLECTION CONVERSION\nexport {\n convertFlatGeojsonToBinaryFeatureCollection,\n // deprecated\n convertFlatGeojsonToBinaryFeatureCollection as flatGeojsonToBinary\n} from './lib/feature-collection-converters/convert-flat-geojson-to-binary-features';\nexport {\n convertGeojsonToBinaryFeatureCollection,\n // deprecated\n convertGeojsonToBinaryFeatureCollection as geojsonToBinary\n} from './lib/feature-collection-converters/convert-geojson-to-binary-features';\nexport {\n convertGeojsonToFlatGeojson,\n // deprecated\n convertGeojsonToFlatGeojson as geojsonToFlatGeojson\n} from './lib/feature-collection-converters/convert-geojson-to-flat-geojson';\nexport {\n convertBinaryFeatureCollectionToGeojson,\n convertBinaryFeatureCollectionToGeojson as binaryToGeojson\n} from './lib/feature-collection-converters/convert-binary-features-to-geojson';\n\n// GEOMETRY ENCODING DETECTION\nexport {isWKB, isTWKB, isWKT} from './lib/geometry-converters/wkb/helpers/parse-wkb-header';\n\nexport type {WKBHeader} from './lib/geometry-converters/wkb/helpers/wkb-types';\nexport {WKT_MAGIC_STRINGS} from './lib/geometry-converters/wkb/helpers/wkb-types';\n\n// GEOMETRY CONVERSION\nexport {convertBinaryGeometryToGeometry} from './lib/geometry-converters/convert-binary-geometry-to-geojson';\n\nexport {convertWKTToGeometry} from './lib/geometry-converters/wkb/convert-wkt-to-geometry';\nexport {convertWKBToGeometry} from './lib/geometry-converters/wkb/convert-wkb-to-geometry';\nexport {convertWKBToBinaryGeometry} from './lib/geometry-converters/wkb/convert-wkb-to-binary-geometry';\nexport {convertTWKBToGeometry} from './lib/geometry-converters/wkb/convert-twkb-to-geometry';\n\nexport {convertGeometryToWKT} from './lib/geometry-converters/wkb/convert-geometry-to-wkt';\nexport {convertGeometryToWKB} from './lib/geometry-converters/wkb/convert-geometry-to-wkb';\nexport {convertGeometryToTWKB} from './lib/geometry-converters/wkb/convert-geometry-to-twkb';\n\n// CRS\nexport type {WKTCRS, ParseWKTCRSOptions} from './lib//wkt-crs/parse-wkt-crs';\nexport {parseWKTCRS} from './lib//wkt-crs/parse-wkt-crs';\nexport type {EncodeWKTCRSOptions} from './lib//wkt-crs/encode-wkt-crs';\nexport {encodeWKTCRS} from './lib//wkt-crs/encode-wkt-crs';\n\n// GEOARROW\nexport type {\n BinaryDataFromGeoArrow,\n BinaryGeometriesFromArrowOptions\n} from './lib/feature-collection-converters/convert-geoarrow-to-binary-features';\nexport {\n convertGeoArrowToBinaryFeatureCollection,\n // deprecated\n convertGeoArrowToBinaryFeatureCollection as getBinaryGeometriesFromArrow,\n getBinaryGeometryTemplate,\n getTriangleIndices,\n getMeanCentersFromBinaryGeometries\n} from './lib/feature-collection-converters/convert-geoarrow-to-binary-features';\n\nexport {convertGeoArrowGeometryToGeoJSON} from './lib/geometry-converters/convert-geoarrow-to-geojson';\n\n// EXPERIMENTAL APIs\n\nexport {encodeHex, decodeHex} from './lib/utils/hex-transcoder';\nexport {extractNumericPropTypes as _extractNumericPropTypes} from './lib/feature-collection-converters/convert-flat-geojson-to-binary-features';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Feature} from '@loaders.gl/schema';\n\n/** Aggregate information for converting GeoJSON into other formats */\nexport type GeojsonGeometryInfo = {\n coordLength: number;\n pointPositionsCount: number;\n pointFeaturesCount: number;\n linePositionsCount: number;\n linePathsCount: number;\n lineFeaturesCount: number;\n polygonPositionsCount: number;\n polygonObjectsCount: number;\n polygonRingsCount: number;\n polygonFeaturesCount: number;\n};\n\n/**\n * Initial scan over GeoJSON features\n * Counts number of coordinates of each geometry type and\n * keeps track of the max coordinate dimensions\n */\n// eslint-disable-next-line complexity, max-statements\nexport function getGeometryInfo(features: Feature[]): GeojsonGeometryInfo {\n // Counts the number of _positions_, so [x, y, z] counts as one\n let pointPositionsCount = 0;\n let pointFeaturesCount = 0;\n let linePositionsCount = 0;\n let linePathsCount = 0;\n let lineFeaturesCount = 0;\n let polygonPositionsCount = 0;\n let polygonObjectsCount = 0;\n let polygonRingsCount = 0;\n let polygonFeaturesCount = 0;\n const coordLengths = new Set<number>();\n\n for (const feature of features) {\n const geometry = feature.geometry;\n switch (geometry.type) {\n case 'Point':\n pointFeaturesCount++;\n pointPositionsCount++;\n coordLengths.add(geometry.coordinates.length);\n break;\n case 'MultiPoint':\n pointFeaturesCount++;\n pointPositionsCount += geometry.coordinates.length;\n for (const point of geometry.coordinates) {\n coordLengths.add(point.length);\n }\n break;\n case 'LineString':\n lineFeaturesCount++;\n linePositionsCount += geometry.coordinates.length;\n linePathsCount++;\n\n for (const coord of geometry.coordinates) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiLineString':\n lineFeaturesCount++;\n for (const line of geometry.coordinates) {\n linePositionsCount += line.length;\n linePathsCount++;\n\n // eslint-disable-next-line max-depth\n for (const coord of line) {\n coordLengths.add(coord.length);\n }\n }\n break;\n case 'Polygon':\n polygonFeaturesCount++;\n polygonObjectsCount++;\n polygonRingsCount += geometry.coordinates.length;\n const flattened = geometry.coordinates.flat();\n polygonPositionsCount += flattened.length;\n\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n break;\n case 'MultiPolygon':\n polygonFeaturesCount++;\n for (const polygon of geometry.coordinates) {\n polygonObjectsCount++;\n polygonRingsCount += polygon.length;\n const flattened = polygon.flat();\n polygonPositionsCount += flattened.length;\n\n // eslint-disable-next-line max-depth\n for (const coord of flattened) {\n coordLengths.add(coord.length);\n }\n }\n break;\n default:\n throw new Error(`Unsupported geometry type: ${geometry.type}`);\n }\n }\n\n return {\n coordLength: coordLengths.size > 0 ? Math.max(...coordLengths) : 2,\n\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {BinaryGeometry} from '@loaders.gl/schema';\n\n/**\n * Information about a binary geometry\n */\nexport type BinaryGeometryInfo = {\n /** The GeoJSON style geometry type corresponding to this particular binary geometry */\n multiGeometryType:\n | 'Point'\n | 'LineString'\n | 'Polygon'\n | 'MultiPoint'\n | 'MultiLineString'\n | 'MultiPolygon';\n /** Is this a \"Multi\" version of the binary geometry? */\n isMultiGeometry: boolean;\n /** How many dimensions are the coordinates? */\n dimension: number;\n /** How many points does this geometry have? */\n pointCount: number;\n /** How many coordinates does this geometry have? */\n coordinateCount: number;\n};\n\n/**\n * @returns information about a binary geometry\n */\nexport function getBinaryGeometryInfo(geometry: BinaryGeometry): BinaryGeometryInfo {\n return {\n isMultiGeometry: isMultiGeometryType(geometry),\n multiGeometryType: getMultiGeometryType(geometry),\n dimension: geometry.positions.size,\n pointCount: geometry.positions.value.length / geometry.positions.size,\n coordinateCount: geometry.positions.value.length\n };\n}\n\n/** @returns true if a binary geometry corresponds to a MultiPoint, MultiLineString or MultiPolygon */\nfunction isMultiGeometryType(geometry: BinaryGeometry) {\n switch (geometry.type) {\n case 'Point':\n const {positions} = geometry;\n return positions.value.length / positions.size > 1;\n case 'LineString':\n const {pathIndices} = geometry;\n return pathIndices.value.length > 1;\n case 'Polygon':\n const {polygonIndices} = geometry;\n return polygonIndices.value.length > 1;\n default:\n return false;\n }\n}\n\n/**\n * @returns geometry type of binary geometry, including MultiPoint, MultiLineString or MultiPolygon\n */\nfunction getMultiGeometryType(geometry: BinaryGeometry) {\n const isMulti = isMultiGeometryType(geometry);\n switch (geometry.type) {\n case 'Point':\n return isMulti ? 'MultiPoint' : 'Point';\n case 'LineString':\n return isMulti ? 'MultiLineString' : 'LineString';\n case 'Polygon':\n return isMulti ? 'MultiPolygon' : 'Polygon';\n default:\n // @ts-expect-error\n throw new Error(`Illegal geometry type: ${type}`);\n }\n}\n", "import type {BinaryFeatureCollection, BinaryGeometry, Feature} from '@loaders.gl/schema';\n\ntype TransformCoordinate = (coord: number[]) => number[];\n\n/**\n * Apply transformation to every coordinate of binary features\n * @param binaryFeatures binary features\n * @param transformCoordinate Function to call on each coordinate\n * @return Transformed binary features\n */\nexport function transformBinaryCoords(\n binaryFeatures: BinaryFeatureCollection,\n transformCoordinate: TransformCoordinate\n): BinaryFeatureCollection {\n if (binaryFeatures.points) {\n transformBinaryGeometryPositions(binaryFeatures.points, transformCoordinate);\n }\n if (binaryFeatures.lines) {\n transformBinaryGeometryPositions(binaryFeatures.lines, transformCoordinate);\n }\n if (binaryFeatures.polygons) {\n transformBinaryGeometryPositions(binaryFeatures.polygons, transformCoordinate);\n }\n return binaryFeatures;\n}\n\n/** Transform one binary geometry */\nfunction transformBinaryGeometryPositions(binaryGeometry: BinaryGeometry, fn: TransformCoordinate) {\n const {positions} = binaryGeometry;\n for (let i = 0; i < positions.value.length; i += positions.size) {\n // @ts-ignore inclusion of bigint causes problems\n const coord: Array<number> = Array.from(positions.value.subarray(i, i + positions.size));\n const transformedCoord = fn(coord);\n // @ts-ignore typescript typing for .set seems to require bigint?\n positions.value.set(transformedCoord, i);\n }\n}\n\n/**\n * Apply transformation to every coordinate of GeoJSON features\n * @param features Array of GeoJSON features\n * @param fn Function to call on each coordinate\n * @return Transformed GeoJSON features\n */\nexport function transformGeoJsonCoords(\n features: Feature[],\n fn: (coord: number[]) => number[]\n): Feature[] {\n for (const feature of features) {\n // @ts-ignore\n feature.geometry.coordinates = coordMap(feature.geometry.coordinates, fn);\n }\n return features;\n}\n\nfunction coordMap(array: unknown, fn: (coord: number[]) => number[]): unknown[] {\n if (isCoord(array)) {\n return fn(array as number[]);\n }\n\n return (array as unknown[]).map((item) => {\n return coordMap(item, fn);\n });\n}\n\nfunction isCoord(array: unknown) {\n return Array.isArray(array) && Number.isFinite(array[0]) && Number.isFinite(array[1]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport * as arrow from 'apache-arrow';\nimport type {\n Table,\n ArrayRowTable,\n ColumnarTable,\n ObjectRowTable,\n GeoJSONTable,\n ArrowTable,\n Feature\n} from '@loaders.gl/schema';\n\nimport {\n convertTable,\n convertArrowToSchema,\n convertSchemaToArrow,\n getTableLength,\n getTableNumCols,\n getTableCellAt\n} from '@loaders.gl/schema-utils';\nimport {getGeometryColumnsFromSchema} from '@loaders.gl/geoarrow';\nimport {convertGeoArrowGeometryToGeoJSON} from '../geometry-converters/convert-geoarrow-to-geojson';\n\n/**\n * * Convert a loaders.gl Table to an Apache Arrow Table\n * @param mesh\n * @param metadata\n * @param batchSize\n * @returns\n */\nexport function convertTableToArrow(table: Table, options?: {batchSize?: number}): arrow.Table {\n switch (table.shape) {\n case 'arrow-table':\n return table.data;\n\n case 'columnar-table':\n // TODO - optimized implementation is possible\n // return convertColumnarTableToArrow(table, options);\n\n // fall through\n\n default:\n const arrowBatchIterator = makeTableToArrowBatchesIterator(table, options);\n return new arrow.Table(arrowBatchIterator);\n }\n}\n\nexport function* makeTableToArrowBatchesIterator(\n table: Table,\n options?: {batchSize?: number}\n): IterableIterator<arrow.RecordBatch> {\n const arrowSchema = convertSchemaToArrow(table.schema!);\n\n const length = getTableLength(table);\n const numColumns = getTableNumCols(table);\n const batchSize = options?.batchSize || length;\n\n const builders = arrowSchema?.fields.map((arrowField) => arrow.makeBuilder(arrowField));\n const structField = new arrow.Struct(arrowSchema.fields);\n\n let batchLength = 0;\n for (let rowIndex = 0; rowIndex < length; rowIndex++) {\n for (let columnIndex = 0; columnIndex < numColumns; ++columnIndex) {\n const value = getTableCellAt(table, rowIndex, columnIndex);\n\n const builder = builders[columnIndex];\n builder.append(value);\n batchLength++;\n\n if (batchLength >= batchSize) {\n const datas = builders.map((builder) => builder.flush());\n const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);\n yield new arrow.RecordBatch(arrowSchema, structData);\n batchLength = 0;\n }\n }\n }\n\n if (batchLength > 0) {\n const datas = builders.map((builder) => builder.flush());\n const structData = new arrow.Data(structField, 0, batchLength, 0, undefined, datas);\n yield new arrow.RecordBatch(arrowSchema, structData);\n batchLength = 0;\n }\n\n builders.map((builder) => builder.finish());\n}\n\n/**\n * Convert an Apache Arrow table to a loaders.gl Table\n * @note Currently does not convert schema\n */\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: 'arrow-table'): ArrowTable;\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: 'columnar-table'): ColumnarTable;\nexport function convertGeoArrowToTable(\n arrow: arrow.Table,\n shape: 'object-row-table'\n): ObjectRowTable;\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: 'array-row-table'): ArrayRowTable;\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: 'geojson-table'): GeoJSONTable;\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: 'columnar-table'): ColumnarTable;\nexport function convertGeoArrowToTable(arrow: arrow.Table, shape: Table['shape']): Table;\n\n/**\n * Convert an Apache Arrow table to a loaders.gl Table\n * @note Currently does not convert schema\n */\nexport function convertGeoArrowToTable(arrowTable: arrow.Table, shape: Table['shape']): Table {\n switch (shape) {\n case 'arrow-table':\n return convertArrowToArrowTable(arrowTable);\n case 'array-row-table':\n return convertArrowToArrayRowTable(arrowTable);\n case 'object-row-table':\n return convertArrowToObjectRowTable(arrowTable);\n case 'columnar-table':\n return convertArrowToColumnarTable(arrowTable);\n case 'geojson-table':\n return convertArrowToGeoJSONTable(arrowTable);\n default:\n throw new Error(shape);\n }\n}\n\n/**\n * Wrap an apache arrow table in a loaders.gl table wrapper.\n * From this additional conversions are available.\n * @param arrowTable\n * @returns\n */\nfunction convertArrowToArrowTable(arrowTable: arrow.Table): ArrowTable {\n return {\n shape: 'arrow-table',\n schema: convertArrowToSchema(arrowTable.schema),\n data: arrowTable\n };\n}\n\nfunction convertArrowToArrayRowTable(arrowTable: arrow.Table): Table {\n const columnarTable = convertArrowToColumnarTable(arrowTable);\n return convertTable(columnarTable, 'array-row-table');\n}\n\nfunction convertArrowToObjectRowTable(arrowTable: arrow.Table): Table {\n const columnarTable = convertArrowToColumnarTable(arrowTable);\n return convertTable(columnarTable, 'object-row-table');\n}\n\n/**\n * Convert an Apache Arrow table to a ColumnarTable\n * @note Currently does not convert schema\n */\nfunction convertArrowToColumnarTable(arrowTable: arrow.Table): ColumnarTable {\n // TODO - avoid calling `getColumn` on columns we are not interested in?\n // Add options object?\n\n const columns: ColumnarTable['data'] = {};\n\n for (const field of arrowTable.schema.fields) {\n // This (is intended to) coalesce all record batches into a single typed array\n const arrowColumn = arrowTable.getChild(field.name);\n const values = arrowColumn?.toArray();\n columns[field.name] = values;\n }\n\n const schema = convertArrowToSchema(arrowTable.schema);\n\n return {\n shape: 'columnar-table',\n schema,\n data: columns\n };\n}\n\n/**\n * Convert an Apache Arrow table to a GeoJSONTable\n * @note Currently does not convert schema\n */\nfunction convertArrowToGeoJSONTable(arrowTable: arrow.Table): GeoJSONTable {\n const schema = convertArrowToSchema(arrowTable.schema);\n const geometryColumns = getGeometryColumnsFromSchema(schema);\n\n // get encoding from geometryColumns['geometry']\n const encoding = geometryColumns.geometry.encoding;\n\n const features: Feature[] = [];\n\n // Remove geometry columns\n const propertyColumnNames = arrowTable.schema.fields\n .map((field) => field.name)\n // TODO - this deletes all geometry columns\n .filter((name) => !(name in geometryColumns));\n const propertiesTable = arrowTable.select(propertyColumnNames);\n\n const arrowGeometryColumn = arrowTable.getChild('geometry');\n\n for (let row = 0; row < arrowTable.numRows; row++) {\n // get the geometry value from arrow geometry column\n // Note that type can vary\n const arrowGeometry = arrowGeometryColumn?.get(row);\n // parse arrow geometry to geojson feature\n const feature = convertGeoArrowGeometryToGeoJSON(arrowGeometry, encoding);\n if (feature) {\n const properties = propertiesTable.get(row)?.toJSON() || {};\n features.push({type: 'Feature', geometry: feature, properties});\n }\n }\n\n return {\n shape: 'geojson-table',\n type: 'FeatureCollection',\n schema,\n features\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry,\n BinaryAttribute,\n Geometry,\n Position,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon\n} from '@loaders.gl/schema';\n\n/** Parse input binary data and return a valid GeoJSON geometry object */\nexport function convertBinaryGeometryToGeometry(\n data: BinaryGeometry,\n startIndex?: number,\n endIndex?: number\n): Geometry {\n switch (data.type) {\n case 'Point':\n return pointToGeoJson(data, startIndex, endIndex);\n case 'LineString':\n return lineStringToGeoJson(data, startIndex, endIndex);\n case 'Polygon':\n return polygonToGeoJson(data, startIndex, endIndex);\n default:\n const unexpectedInput: never = data;\n throw new Error(`Unsupported geometry type: ${(unexpectedInput as any)?.type}`);\n }\n}\n\n/** Parse binary data of type Polygon */\nfunction polygonToGeoJson(\n data: BinaryPolygonGeometry,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): Polygon | MultiPolygon {\n const {positions} = data;\n const polygonIndices = data.polygonIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const primitivePolygonIndices = data.primitivePolygonIndices.value.filter(\n (x) => x >= startIndex && x <= endIndex\n );\n const multi = polygonIndices.length > 2;\n\n // Polygon\n if (!multi) {\n const coordinates: Position[][] = [];\n for (let i = 0; i < primitivePolygonIndices.length - 1; i++) {\n const startRingIndex = primitivePolygonIndices[i];\n const endRingIndex = primitivePolygonIndices[i + 1];\n const ringCoordinates = ringToGeoJson(positions, startRingIndex, endRingIndex);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'Polygon', coordinates};\n }\n\n // MultiPolygon\n const coordinates: Position[][][] = [];\n for (let i = 0; i < polygonIndices.length - 1; i++) {\n const startPolygonIndex = polygonIndices[i];\n const endPolygonIndex = polygonIndices[i + 1];\n const polygonCoordinates = polygonToGeoJson(\n data,\n startPolygonIndex,\n endPolygonIndex\n ).coordinates;\n coordinates.push(polygonCoordinates as Position[][]);\n }\n\n return {type: 'MultiPolygon', coordinates};\n}\n\n/** Parse binary data of type LineString */\nfunction lineStringToGeoJson(\n data: BinaryLineGeometry,\n startIndex: number = -Infinity,\n endIndex: number = Infinity\n): LineString | MultiLineString {\n const {positions} = data;\n const pathIndices = data.pathIndices.value.filter((x) => x >= startIndex && x <= endIndex);\n const multi = pathIndices.length > 2;\n\n if (!multi) {\n const coordinates = ringToGeoJson(positions, pathIndices[0], pathIndices[1]);\n return {type: 'LineString', coordinates};\n }\n\n const coordinates: Position[][] = [];\n for (let i = 0; i < pathIndices.length - 1; i++) {\n const ringCoordinates = ringToGeoJson(positions, pathIndices[i], pathIndices[i + 1]);\n coordinates.push(ringCoordinates);\n }\n\n return {type: 'MultiLineString', coordinates};\n}\n\n/** Parse binary data of type Point */\nfunction pointToGeoJson(\n data: BinaryPointGeometry,\n startIndex?: number,\n endIndex?: number\n): Point | MultiPoint {\n const {positions} = data;\n const coordinates = ringToGeoJson(positions, startIndex, endIndex);\n const multi = coordinates.length > 1;\n\n if (multi) {\n return {type: 'MultiPoint', coordinates};\n }\n\n return {type: 'Point', coordinates: coordinates[0]};\n}\n\n/**\n * Parse a linear ring of positions to a GeoJSON linear ring\n *\n * @param positions Positions TypedArray\n * @param startIndex Start index to include in ring\n * @param endIndex End index to include in ring\n * @returns GeoJSON ring\n */\nfunction ringToGeoJson(\n positions: BinaryAttribute,\n startIndex?: number,\n endIndex?: number\n): Position[] {\n startIndex = startIndex || 0;\n endIndex = endIndex || positions.value.length / positions.size;\n\n const ringCoordinates: Position[] = [];\n for (let j = startIndex; j < endIndex; j++) {\n const coord = Array<number>();\n for (let k = j * positions.size; k < (j + 1) * positions.size; k++) {\n coord.push(Number(positions.value[k]));\n }\n ringCoordinates.push(coord);\n }\n return ringCoordinates;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport type {TypedArray} from '@loaders.gl/schema';\n\n// TODO: remove copy; import from typed-array-utils\n// modules/math/src/geometry/typed-arrays/typed-array-utils.js\nexport function concatTypedArrays(arrays: TypedArray[]): TypedArray {\n let byteLength = 0;\n for (let i = 0; i < arrays.length; ++i) {\n byteLength += arrays[i].byteLength;\n }\n const buffer = new Uint8Array(byteLength);\n\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; ++i) {\n const data = new Uint8Array(arrays[i].buffer);\n byteLength = data.length;\n for (let j = 0; j < byteLength; ++j) {\n buffer[byteOffset++] = data[j];\n }\n }\n return buffer;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n TypedArray,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\nimport {concatTypedArrays} from '../utils/concat-typed-arrays';\n\nexport function concatenateBinaryPointGeometries(\n binaryPointGeometries: BinaryPointGeometry[],\n dimension: number\n): BinaryPointGeometry {\n const positions: TypedArray[] = binaryPointGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(positions).buffer);\n\n return {\n type: 'Point',\n positions: {value: concatenatedPositions, size: dimension}\n };\n}\n\nexport function concatenateBinaryLineGeometries(\n binaryLineGeometries: BinaryLineGeometry[],\n dimension: number\n): BinaryLineGeometry {\n const lines: TypedArray[] = binaryLineGeometries.map((geometry) => geometry.positions.value);\n const concatenatedPositions = new Float64Array(concatTypedArrays(lines).buffer);\n const pathIndices = lines.map((line) => line.length / dimension).map(cumulativeSum(0));\n pathIndices.unshift(0);\n\n return {\n type: 'LineString',\n positions: {value: concatenatedPositions, size: dimension},\n pathIndices: {value: new Uint32Array(pathIndices), size: 1}\n };\n}\n\nexport function concatenateBinaryPolygonGeometries(\n binaryPolygonGeometries: BinaryPolygonGeometry[],\n dimension: number\n): BinaryPolygonGeometry {\n const polygons: TypedArray[] = [];\n const primitivePolygons: TypedArray[] = [];\n\n for (const binaryPolygon of binaryPolygonGeometries) {\n const {positions, primitivePolygonIndices} = binaryPolygon;\n polygons.push(positions.value);\n primitivePolygons.push(primitivePolygonIndices.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(polygons).buffer);\n const polygonIndices = polygons.map((p) => p.length / dimension).map(cumulativeSum(0));\n polygonIndices.unshift(0);\n\n // Combine primitivePolygonIndices from each individual polygon\n const primitivePolygonIndices = [0];\n for (const primitivePolygon of primitivePolygons) {\n primitivePolygonIndices.push(\n ...primitivePolygon\n .filter((x: number) => x > 0)\n .map((x: number) => x + primitivePolygonIndices[primitivePolygonIndices.length - 1])\n );\n }\n\n return {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {value: new Uint32Array(polygonIndices), size: 1},\n primitivePolygonIndices: {value: new Uint32Array(primitivePolygonIndices), size: 1}\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/**\n * Integer codes for geometry types in WKB and related formats\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nexport enum WKBGeometryType {\n Point = 1,\n LineString = 2,\n Polygon = 3,\n MultiPoint = 4,\n MultiLineString = 5,\n MultiPolygon = 6,\n GeometryCollection = 7\n}\n\n/** Parsed WKB header */\nexport type WKBHeader = {\n /** WKB or TWKB */\n type: 'wkb' | 'twkb';\n /** WKB variant */\n variant: 'wkb' | 'ewkb' | 'iso-wkb' | 'twkb';\n /** geometry type encoded in this WKB: point, line, polygon etc */\n geometryType: 1 | 2 | 3 | 4 | 5 | 6 | 7;\n /** Number of dimensions for coordinate data */\n dimensions: 2 | 3 | 4;\n /** Coordinate names, Z and M are controlled by flags */\n coordinates: 'xy' | 'xyz' | 'xym' | 'xyzm';\n /** WKB Geometry has a spatial coordinate reference system id */\n srid?: number;\n /** true if binary data is stored as little endian */\n littleEndian: boolean;\n /** Offset to start of geometry */\n byteOffset: number;\n};\n\n/**\n * Options for writing WKB\n */\nexport type WKBOptions = {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n /** Spatial reference for input GeoJSON */\n srid?: any;\n};\n\n/** WKB Geometry has a z coordinate */\nexport const EWKB_FLAG_Z = 0x80000000;\n/** WKB Geometry has an m coordinate */\nexport const EWKB_FLAG_M = 0x40000000;\n/** WKB Geometry has a spatial coordinate reference system id */\nexport const EWKB_FLAG_SRID = 0x20000000;\n/** @todo: Assume no more than 10K SRIDs are defined */\nexport const MAX_SRID = 10000;\n\n/**\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n * @note Order matches WKBGeometryType enum (need to add 1)\n * @note: We only support this \"geojson\" subset of the OGC simple features standard\n */\nexport const WKT_MAGIC_STRINGS = [\n 'POINT(',\n 'LINESTRING(',\n 'POLYGON(',\n 'MULTIPOINT(',\n 'MULTILINESTRING(',\n 'MULTIPOLYGON(',\n 'GEOMETRYCOLLECTION('\n];\n\nconst textEncoder = new TextEncoder();\n\n/**\n * @see: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n * @note Order matches WKBGeometryType enum (need to add 1)\n * @note: We only support this \"geojson\" subset of the OGC simple features standard\n */\nexport const WKT_MAGIC_BYTES = WKT_MAGIC_STRINGS.map((string) => textEncoder.encode(string));\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {WKBGeometryType, WKBHeader} from './wkb-types';\nimport {\n EWKB_FLAG_Z,\n EWKB_FLAG_M,\n EWKB_FLAG_SRID,\n MAX_SRID,\n WKT_MAGIC_STRINGS,\n WKT_MAGIC_BYTES\n} from './wkb-types';\n\n/** \n * Check if a string is WKT.\n * @param input A potential WKT geometry string\n * @return `true` if input appears to be a WKT geometry string, `false` otherwise\n\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n * @todo Does not handle leading spaces which appear to be permitted per the spec:\n * \"A WKT string contains no white space outside of double quotes. \n * However padding with white space to improve human readability is permitted; \n * the examples of WKT that are included in this document have \n * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers.\"\n */\nexport function isWKT(input: string | ArrayBufferLike): boolean {\n return getWKTGeometryType(input) !== null;\n}\n\n/** \n * Get the geometry type of a WKT string.\n * @param input A potential WKT geometry string\n * @return `true` if input appears to be a WKT geometry string, `false` otherwise\n\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n * @todo Does not handle leading spaces which appear to be permitted per the spec:\n * \"A WKT string contains no white space outside of double quotes. \n * However padding with white space to improve human readability is permitted; \n * the examples of WKT that are included in this document have \n * spaces and line feeds inserted to improve clarity. Any padding is stripped out or ignored by parsers.\"\n */\nexport function getWKTGeometryType(input: string | ArrayBufferLike): WKBGeometryType | null {\n if (typeof input === 'string') {\n const index = WKT_MAGIC_STRINGS.findIndex((magicString) => input.startsWith(magicString));\n return index >= 0 ? ((index + 1) as WKBGeometryType) : null;\n }\n const inputArray = new Uint8Array(input);\n const index = WKT_MAGIC_BYTES.findIndex((magicBytes) =>\n magicBytes.every((value, index) => value === inputArray[index])\n );\n return index >= 0 ? ((index + 1) as WKBGeometryType) : null;\n}\n\n/**\n * Check if an array buffer might be a TWKB array buffer\n * @param arrayBuffer The array buffer to check\n * @returns false if this is definitely not a TWKB array buffer, true if it might be a TWKB array buffer\n */\nexport function isTWKB(arrayBuffer: ArrayBufferLike): boolean {\n const dataView = new DataView(arrayBuffer);\n const byteOffset = 0;\n\n const type = dataView.getUint8(byteOffset);\n const geometryType = type & 0x0f;\n\n // Only geometry types 1 to 7 (point to geometry collection are currently defined)\n if (geometryType < 1 || geometryType > 7) {\n return false;\n }\n\n return true;\n}\n\n/** Sanity checks that first to 5-9 bytes could represent a supported WKB dialect header */\nexport function isWKB(arrayBuffer: ArrayBufferLike): boolean {\n const dataView = new DataView(arrayBuffer);\n let byteOffset = 0;\n\n const endianness = dataView.getUint8(byteOffset);\n byteOffset += 1;\n\n // Check valid endianness (only 0 or 1 are allowed)\n if (endianness > 1) {\n return false;\n }\n\n const littleEndian = endianness === 1;\n\n const geometry = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n // check valid geometry type (we don't support extension geometries)\n const geometryType = geometry & 0x07;\n if (geometryType === 0 || geometryType > 7) {\n return false;\n }\n\n const geometryFlags = geometry - geometryType;\n\n // Accept iso-wkb flags\n if (\n geometryFlags === 0 ||\n geometryFlags === 1000 ||\n geometryFlags === 2000 ||\n geometryFlags === 3000\n ) {\n return true;\n }\n\n // Accept ewkb flags but reject otherwise\n if ((geometryFlags & ~(EWKB_FLAG_Z | EWKB_FLAG_M | EWKB_FLAG_SRID)) !== 0) {\n return false;\n }\n\n if (geometryFlags & EWKB_FLAG_SRID) {\n const srid = dataView.getUint32(byteOffset, littleEndian);\n byteOffset += 4;\n\n if (srid > MAX_SRID) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Parses header and provides a byteOffset to start of geometry data\n * @param dataView\n * @param target optionally supply a WKBHeader object to avoid creating a new object for every call\n * @returns a header object describing the WKB data\n */\n// eslint-disable-next-line max-statements, complexity\nexport function parseWKBHeader(dataView: DataView, target?: WKBHeader): WKBHeader {\n const wkbHeader: WKBHeader = Object.assign(target || {}, {\n type: 'wkb',\n variant: 'wkb',\n geometryType: 1,\n dimensions: 2,\n coordinates: 'xy',\n littleEndian: true,\n byteOffset: 0\n } as WKBHeader);\n\n if (isWKT(dataView.buffer)) {\n // TODO - WKB header could include WKT type\n throw new Error('WKB: Cannot parse WKT data');\n }\n\n // Check endianness of data\n wkbHeader.littleEndian = dataView.getUint8(wkbHeader.byteOffset) === 1;\n wkbHeader.byteOffset++;\n\n // 4-digit code representing dimension and type of geometry\n const geometryCode = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n\n wkbHeader.geometryType = (geometryCode & 0x7) as 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n // Check if iso-wkb variant: iso-wkb adds 1000, 2000 or 3000 to the geometry code\n const isoType = (geometryCode - wkbHeader.geometryType) / 1000;\n switch (isoType) {\n case 0:\n break;\n case 1:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n break;\n case 2:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n break;\n case 3:\n wkbHeader.variant = 'iso-wkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n break;\n default:\n throw new Error(`WKB: Unsupported iso-wkb type: ${isoType}`);\n }\n\n // Check if EWKB variant. Uses bitmasks for Z&M dimensions as well as optional SRID field\n const ewkbZ = geometryCode & EWKB_FLAG_Z;\n const ewkbM = geometryCode & EWKB_FLAG_M;\n const ewkbSRID = geometryCode & EWKB_FLAG_SRID;\n\n if (ewkbZ && ewkbM) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 4;\n wkbHeader.coordinates = 'xyzm';\n } else if (ewkbZ) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xyz';\n } else if (ewkbM) {\n wkbHeader.variant = 'ewkb';\n wkbHeader.dimensions = 3;\n wkbHeader.coordinates = 'xym';\n }\n\n // If SRID present read four more bytes\n if (ewkbSRID) {\n wkbHeader.variant = 'ewkb';\n // 4-digit code representing dimension and type of geometry\n wkbHeader.srid = dataView.getUint32(wkbHeader.byteOffset, wkbHeader.littleEndian);\n wkbHeader.byteOffset += 4;\n }\n\n return wkbHeader;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n TypedArray,\n BinaryGeometry,\n BinaryPointGeometry,\n BinaryLineGeometry,\n BinaryPolygonGeometry\n} from '@loaders.gl/schema';\n\nimport {\n concatenateBinaryPointGeometries,\n concatenateBinaryLineGeometries,\n concatenateBinaryPolygonGeometries\n} from '../../binary-geometry-api/concat-binary-geometry';\nimport {concatTypedArrays} from '../../utils/concat-typed-arrays';\nimport {WKBGeometryType} from './helpers/wkb-types';\nimport {parseWKBHeader} from './helpers/parse-wkb-header';\n\nexport function convertWKBToBinaryGeometry(arrayBuffer: ArrayBufferLike): BinaryGeometry {\n const dataView = new DataView(arrayBuffer);\n\n const wkbHeader = parseWKBHeader(dataView);\n\n const {geometryType, dimensions, littleEndian} = wkbHeader;\n const offset = wkbHeader.byteOffset;\n\n switch (geometryType) {\n case WKBGeometryType.Point:\n const point = parsePoint(dataView, offset, dimensions, littleEndian);\n return point.geometry;\n case WKBGeometryType.LineString:\n const line = parseLineString(dataView, offset, dimensions, littleEndian);\n return line.geometry;\n case WKBGeometryType.Polygon:\n const polygon = parsePolygon(dataView, offset, dimensions, littleEndian);\n return polygon.geometry;\n case WKBGeometryType.MultiPoint:\n const multiPoint = parseMultiPoint(dataView, offset, dimensions, littleEndian);\n multiPoint.type = 'Point';\n return multiPoint;\n case WKBGeometryType.MultiLineString:\n const multiLine = parseMultiLineString(dataView, offset, dimensions, littleEndian);\n multiLine.type = 'LineString';\n return multiLine;\n case WKBGeometryType.MultiPolygon:\n const multiPolygon = parseMultiPolygon(dataView, offset, dimensions, littleEndian);\n multiPolygon.type = 'Polygon';\n return multiPolygon;\n // case WKBGeometryType.GeometryCollection:\n // TODO: handle GeometryCollections\n // return parseGeometryCollection(dataView, offset, dimensions, littleEndian);\n default:\n throw new Error(`WKB: Unsupported geometry type: ${geometryType}`);\n }\n}\n\n// Primitives; parse point and linear ring\nfunction parsePoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPointGeometry; offset: number} {\n const positions = new Float64Array(dimension);\n for (let i = 0; i < dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n return {\n geometry: {type: 'Point', positions: {value: positions, size: dimension}},\n offset\n };\n}\n\nfunction parseLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryLineGeometry; offset: number} {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n // Instantiate array\n const positions = new Float64Array(nPoints * dimension);\n for (let i = 0; i < nPoints * dimension; i++) {\n positions[i] = dataView.getFloat64(offset, littleEndian);\n offset += 8;\n }\n\n const pathIndices = [0];\n if (nPoints > 0) {\n pathIndices.push(nPoints);\n }\n\n return {\n geometry: {\n type: 'LineString',\n positions: {value: positions, size: dimension},\n pathIndices: {value: new Uint32Array(pathIndices), size: 1}\n },\n offset\n };\n}\n\n// https://stackoverflow.com/a/55261098\nconst cumulativeSum = (sum: number) => (value: number) => (sum += value);\n\nfunction parsePolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): {geometry: BinaryPolygonGeometry; offset: number} {\n const nRings = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const rings: TypedArray[] = [];\n for (let i = 0; i < nRings; i++) {\n const parsed = parseLineString(dataView, offset, dimension, littleEndian);\n const {positions} = parsed.geometry;\n offset = parsed.offset;\n rings.push(positions.value);\n }\n\n const concatenatedPositions = new Float64Array(concatTypedArrays(rings).buffer);\n const polygonIndices = [0];\n if (concatenatedPositions.length > 0) {\n polygonIndices.push(concatenatedPositions.length / dimension);\n }\n const primitivePolygonIndices = rings.map((l) => l.length / dimension).map(cumulativeSum(0));\n primitivePolygonIndices.unshift(0);\n\n return {\n geometry: {\n type: 'Polygon',\n positions: {value: concatenatedPositions, size: dimension},\n polygonIndices: {\n value: new Uint32Array(polygonIndices),\n size: 1\n },\n primitivePolygonIndices: {value: new Uint32Array(primitivePolygonIndices), size: 1}\n },\n offset\n };\n}\n\nfunction parseMultiPoint(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPointGeometry {\n const nPoints = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPointGeometries: BinaryPointGeometry[] = [];\n for (let i = 0; i < nPoints; i++) {\n // Byte order for point\n const littleEndianPoint = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert point type\n if (dataView.getUint32(offset, littleEndianPoint) % 1000 !== 1) {\n throw new Error('WKB: Inner geometries of MultiPoint not of type Point');\n }\n\n offset += 4;\n\n const parsed = parsePoint(dataView, offset, dimension, littleEndianPoint);\n offset = parsed.offset;\n binaryPointGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPointGeometries(binaryPointGeometries, dimension);\n}\n\nfunction parseMultiLineString(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryLineGeometry {\n const nLines = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryLineGeometries: BinaryLineGeometry[] = [];\n for (let i = 0; i < nLines; i++) {\n // Byte order for line\n const littleEndianLine = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type LineString\n if (dataView.getUint32(offset, littleEndianLine) % 1000 !== 2) {\n throw new Error('WKB: Inner geometries of MultiLineString not of type LineString');\n }\n offset += 4;\n\n const parsed = parseLineString(dataView, offset, dimension, littleEndianLine);\n offset = parsed.offset;\n binaryLineGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryLineGeometries(binaryLineGeometries, dimension);\n}\n\nfunction parseMultiPolygon(\n dataView: DataView,\n offset: number,\n dimension: number,\n littleEndian: boolean\n): BinaryPolygonGeometry {\n const nPolygons = dataView.getUint32(offset, littleEndian);\n offset += 4;\n\n const binaryPolygonGeometries: BinaryPolygonGeometry[] = [];\n for (let i = 0; i < nPolygons; i++) {\n // Byte order for polygon\n const littleEndianPolygon = dataView.getUint8(offset) === 1;\n offset++;\n\n // Assert type Polygon\n if (dataView.getUint32(offset, littleEndianPolygon) % 1000 !== 3) {\n throw new Error('WKB: Inner geometries of MultiPolygon not of type Polygon');\n }\n offset += 4;\n\n const parsed = parsePolygon(dataView, offset, dimension, littleEndianPolygon);\n offset = parsed.offset;\n binaryPolygonGeometries.push(parsed.geometry);\n }\n\n return concatenateBinaryPolygonGeometries(binaryPolygonGeometries, dimension);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Geometry} from '@loaders.gl/schema';\nimport {convertBinaryGeometryToGeometry} from '../convert-binary-geometry-to-geojson';\nimport {convertWKBToBinaryGeometry} from './convert-wkb-to-binary-geometry';\n\nexport type convertWKBOptions = {\n /** Does the GeoJSON input have Z values? */\n hasZ?: boolean;\n\n /** Does the GeoJSON input have M values? */\n hasM?: boolean;\n\n /** Spatial reference for input GeoJSON */\n srid?: any;\n};\n\nexport function convertWKBToGeometry(arrayBuffer: ArrayBufferLike): Geometry {\n const binaryGeometry = convertWKBToBinaryGeometry(arrayBuffer);\n return convertBinaryGeometryToGeometry(binaryGeometry);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\nimport type {Geometry} from '@loaders.gl/schema';\n\n/* eslint-disable */\n// @ts-nocheck\n\nconst numberRegexp = /[-+]?([0-9]*\\.[0-9]+|[0-9]+)([eE][-+]?[0-9]+)?/;\n// Matches sequences like '100 100' or '100 100 100'.\nconst tuples = new RegExp('^' + numberRegexp.source + '(\\\\s' + numberRegexp.source + '){1,}');\n\nexport type ParseWKTOptions = {\n wkt?: {\n /** Whether to add any CRS, if found, as undocumented CRS property on the return geometry */\n crs?: boolean;\n };\n};\n\n/** State of parser, passed around between parser functions */\ntype ParseWKTState = {\n parts: string[];\n _: string | undefined;\n i: number;\n};\n\n/**\n * Parse WKT and return GeoJSON.\n * @param input A WKT geometry string\n * @return A GeoJSON geometry object\n *\n * @note We only support the \"geojson\" subset of the OGC simple features standard\n **/\nexport function convertWKTToGeometry(input: string, options?: ParseWKTOptions): Geometry | null {\n const parts = input.split(';');\n let _ = parts.pop();\n const srid = (parts.shift() || '').split('=').pop();\n\n const state: ParseWKTState = {parts, _, i: 0};\n\n const geometry = parseGeometry(state);\n\n return options?.wkt?.crs ? addCRS(geometry, srid) : geometry;\n}\n\nfunction parseGeometry(state: ParseWKTState): Geometry | null {\n return (\n parsePoint(state) ||\n parseLineString(state) ||\n parsePolygon(state) ||\n parseMultiPoint(state) ||\n parseMultiLineString(state) ||\n parseMultiPolygon(state) ||\n parseGeometryCollection(state)\n );\n}\n\n/** Adds a coordinate reference system as an undocumented */\nfunction addCRS(obj: Geometry | null, srid?: string): Geometry | null {\n if (obj && srid?.match(/\\d+/)) {\n const crs = {\n type: 'name',\n properties: {\n name: 'urn:ogc:def:crs:EPSG::' + srid\n }\n };\n // @ts-expect-error we assign an undocumented property on the geometry\n obj.crs = crs;\n }\n\n return obj;\n}\n\n// GEOMETRIES\n\nfunction parsePoint(state: ParseWKTState): Geometry | null {\n if (!$(/^(POINT(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n if (!$(/^(\\()/, state)) {\n return null;\n }\n const c = coords(state);\n if (!c) {\n return null;\n }\n white(state);\n if (!$(/^(\\))/, state)) {\n return null;\n }\n return {\n type: 'Point',\n coordinates: c[0]\n };\n}\n\nfunction parseMultiPoint(state: ParseWKTState): Geometry | null {\n if (!$(/^(MULTIPOINT)/i, state)) {\n return null;\n }\n white(state);\n const newCoordsFormat = state._?.substring(state._?.indexOf('(') + 1, state._.length - 1)\n .replace(/\\(/g, '')\n .replace(/\\)/g, '');\n state._ = 'MULTIPOINT (' + newCoordsFormat + ')';\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n white(state);\n return {\n type: 'MultiPoint',\n coordinates: c\n };\n}\n\nfunction parseLineString(state: ParseWKTState): Geometry | null {\n if (!$(/^(LINESTRING(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n if (!$(/^(\\()/, state)) {\n return null;\n }\n const c = coords(state);\n if (!c) {\n return null;\n }\n if (!$(/^(\\))/, state)) {\n return null;\n }\n return {\n type: 'LineString',\n coordinates: c\n };\n}\n\nfunction parseMultiLineString(state: ParseWKTState): Geometry | null {\n if (!$(/^(MULTILINESTRING)/i, state)) return null;\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n white(state);\n return {\n // @ts-ignore\n type: 'MultiLineString',\n // @ts-expect-error\n coordinates: c\n };\n}\n\nfunction parsePolygon(state: ParseWKTState): Geometry | null {\n if (!$(/^(POLYGON(\\sz)?)/i, state)) {\n return null;\n }\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n return {\n // @ts-ignore\n type: 'Polygon',\n // @ts-expect-error\n coordinates: c\n };\n}\n\nfunction parseMultiPolygon(state: ParseWKTState): Geometry | null {\n if (!$(/^(MULTIPOLYGON)/i, state)) {\n return null;\n }\n white(state);\n const c = multicoords(state);\n if (!c) {\n return null;\n }\n return {\n type: 'MultiPolygon',\n // @ts-expect-error\n coordinates: c\n };\n}\n\nfunction parseGeometryCollection(state: ParseWKTState): Geometry | null {\n const geometries: Geometry[] = [];\n let geometry: Geometry | null;\n\n if (!$(/^(GEOMETRYCOLLECTION)/i, state)) {\n return null;\n }\n white(state);\n\n if (!$(/^(\\()/, state)) {\n return null;\n }\n while ((geometry = parseGeometry(state))) {\n geometries.push(geometry);\n white(state);\n $(/^(,)/, state);\n white(state);\n }\n if (!$(/^(\\))/, state)) {\n return null;\n }\n\n return {\n type: 'GeometryCollection',\n geometries: geometries\n };\n}\n\n// COORDINATES\n\nfunction multicoords(state: ParseWKTState): number[][] | null {\n white(state);\n let depth = 0;\n const rings: number[][] = [];\n const stack = [rings];\n let pointer: any = rings;\n let elem;\n\n while ((elem = $(/^(\\()/, state) || $(/^(\\))/, state) || $(/^(,)/, state) || $(tuples, state))) {\n if (elem === '(') {\n stack.push(pointer);\n pointer = [];\n stack[stack.length - 1].push(pointer);\n depth++;\n } else if (elem === ')') {\n // For the case: Polygon(), ...\n if (pointer.length === 0) return null;\n\n // @ts-ignore\n pointer = stack.pop();\n // the stack was empty, input was malformed\n if (!pointer) return null;\n depth--;\n if (depth === 0) break;\n } else if (elem === ',') {\n pointer = [];\n stack[stack.length - 1].push(pointer);\n } else if (!elem.split(/\\s/g).some(isNaN)) {\n Array.prototype.push.apply(pointer, elem.split(/\\s/g).map(parseFloat));\n } else {\n return null;\n }\n white(state);\n }\n\n if (depth !== 0) return null;\n\n return rings;\n}\n\nfunction coords(state: ParseWKTState): number[][] | null {\n const list: number[][] = [];\n let item: any;\n let pt;\n while ((pt = $(tuples, state) || $(/^(,)/, state))) {\n if (pt === ',') {\n list.push(item);\n item = [];\n } else if (!pt.split(/\\s/g).some(isNaN)) {\n if (!item) item = [];\n Array.prototype.push.apply(item, pt.split(/\\s/g).map(parseFloat));\n }\n white(state);\n }\n\n if (item) list.push(item);\n else return null;\n\n return list.length ? list : null;\n}\n\n// HELPERS\n\nfunction $(regexp: RegExp, state: ParseWKTState) {\n const match = state._?.substring(state.i).match(regexp);\n if (!match) return null;\n else {\n state.i += match[0].length;\n return match[0];\n }\n}\n\nfunction white(state: ParseWKTState) {\n $(/^\\s*/, state);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// import * as arrow from 'apache-arrow';\nimport type {\n MultiPolygon,\n Position,\n Polygon,\n MultiPoint,\n Point,\n MultiLineString,\n LineString,\n Geometry\n} from '@loaders.gl/schema';\nimport type {GeoArrowEncoding} from '@loaders.gl/geoarrow';\nimport {convertWKBToGeometry} from './wkb/convert-wkb-to-geometry';\nimport {convertWKTToGeometry} from './wkb/convert-wkt-to-geometry';\n\n/**\n * parse geometry from arrow data that is returned from processArrowData()\n * NOTE: this function could be deduplicated with the binaryToGeometry() 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 convertGeoArrowGeometryToGeoJSON(\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 switch (encoding) {\n case 'geoarrow.multipolygon':\n return arrowMultiPolygonToGeometry(arrowCellValue);\n case 'geoarrow.polygon':\n return arrowPolygonToGeometry(arrowCellValue);\n case 'geoarrow.multipoint':\n return arrowMultiPointToGeometry(arrowCellValue);\n case 'geoarrow.point':\n return arrowPointToGeometry(arrowCellValue);\n case 'geoarrow.multilinestring':\n return arrowMultiLineStringToGeometry(arrowCellValue);\n case 'geoarrow.linestring':\n return arrowLineStringToGeometry(arrowCellValue);\n case 'geoarrow.wkb':\n return arrowWKBToGeometry(arrowCellValue);\n case 'geoarrow.wkt':\n return arrowWKTToGeometry(arrowCellValue);\n default: {\n throw Error(`GeoArrow encoding not supported ${encoding}`);\n }\n }\n}\n\nfunction arrowWKBToGeometry(arrowCellValue: any): Geometry | null {\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 return convertWKBToGeometry(arrayBuffer);\n}\n\nfunction arrowWKTToGeometry(arrowCellValue: any): Geometry | null {\n const string: string = arrowCellValue;\n return convertWKTToGeometry(string);\n}\n\n/**\n * convert Arrow MultiPolygon to geojson Feature\n */\nfunction arrowMultiPolygonToGeometry(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 arrowPolygonToGeometry(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 arrowMultiPointToGeometry(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 arrowPointToGeometry(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 arrowMultiLineStringToGeometry(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 arrowLineStringToGeometry(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", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n ArrayRowTable,\n GeoJSONTable,\n ObjectRowTable,\n Schema,\n Feature,\n Geometry\n} from '@loaders.gl/schema';\nimport {getTableLength, getTableRowAsObject} from '@loaders.gl/schema-utils';\nimport {GeoColumnMetadata, getGeoMetadata} from '@loaders.gl/geoarrow';\nimport {convertWKBToGeometry} from '../geometry-converters/wkb/convert-wkb-to-geometry';\nimport {convertWKTToGeometry} from '../geometry-converters/wkb/convert-wkt-to-geometry';\n\n/** TODO - move to loaders.gl/gis? */\nexport function convertWKBTableToGeoJSON(\n table: ArrayRowTable | ObjectRowTable,\n schema: Schema\n): GeoJSONTable {\n const geoMetadata = getGeoMetadata(schema.metadata);\n const primaryColumn = geoMetadata?.primary_column;\n if (!primaryColumn) {\n throw new Error('no geometry column');\n }\n const columnMetadata = geoMetadata.columns[primaryColumn];\n\n const features: Feature[] = [];\n\n const length = getTableLength(table);\n for (let rowIndex = 0; rowIndex < length; rowIndex++) {\n const row = getTableRowAsObject(table, rowIndex);\n const geometry = parseGeometry(row[primaryColumn], columnMetadata);\n delete row[primaryColumn];\n const feature: Feature = {type: 'Feature', geometry: geometry!, properties: row};\n features.push(feature);\n }\n\n return {shape: 'geojson-table', schema, type: 'FeatureCollection', features};\n}\n\nfunction parseGeometry(geometry: unknown, columnMetadata: GeoColumnMetadata): Geometry | null {\n switch (columnMetadata.encoding) {\n case 'wkt':\n return convertWKTToGeometry(geometry as string) || null;\n case 'wkb':\n default:\n const arrayBuffer = ArrayBuffer.isView(geometry)\n ? geometry.buffer.slice(geometry.byteOffset, geometry.byteOffset + geometry.byteLength)\n : (geometry as ArrayBuffer);\n return convertWKBToGeometry(arrayBuffer);\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable indent */\nimport {earcut} from '@math.gl/polygon';\nimport type {\n BinaryAttribute,\n BinaryFeatureCollection,\n BinaryPolygonFeature,\n FlatFeature,\n FlatPoint,\n FlatLineString,\n FlatPolygon,\n TypedArray\n} from '@loaders.gl/schema';\nimport {GeojsonGeometryInfo} from '../geometry-api/geometry-info';\nimport {\n PropArrayConstructor,\n Lines,\n Points,\n Polygons\n} from './helpers/flat-geojson-to-binary-types';\n\n/**\n * Convert binary features to flat binary arrays. Similar to\n * `geojsonToBinary` helper function, except that it expects\n * a binary representation of the feature data, which enables\n * 2X-3X speed increase in parse speed, compared to using\n * geoJSON. See `binary-vector-tile/VectorTileFeature` for\n * data format detais\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns filled arrays\n */\nexport function convertFlatGeojsonToBinaryFeatureCollection(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo,\n options?: FlatGeojsonToBinaryOptions\n): BinaryFeatureCollection {\n const propArrayTypes = extractNumericPropTypes(features);\n const numericPropKeys = Object.keys(propArrayTypes).filter((k) => propArrayTypes[k] !== Array);\n return fillArrays(\n features,\n {\n propArrayTypes,\n ...geometryInfo\n },\n {\n numericPropKeys: (options && options.numericPropKeys) || numericPropKeys,\n PositionDataType: options ? options.PositionDataType : Float32Array,\n triangulate: options ? options.triangulate : true\n }\n );\n}\n\n/**\n * Options for `flatGeojsonToBinary`\n */\nexport type FlatGeojsonToBinaryOptions = {\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n triangulate?: boolean;\n};\n\n/**\n * Extracts properties that are always numeric\n *\n * @param features\n * @returns object with numeric types\n */\nexport function extractNumericPropTypes(features: FlatFeature[]): {\n [key: string]: PropArrayConstructor;\n} {\n const propArrayTypes = {};\n for (const feature of features) {\n if (feature.properties) {\n for (const key in feature.properties) {\n // If property has not been seen before, or if property has been numeric\n // in all previous features, check if numeric in this feature\n // If not numeric, Array is stored to prevent rechecking in the future\n // Additionally, detects if 64 bit precision is required\n const val = feature.properties[key];\n propArrayTypes[key] = deduceArrayType(val, propArrayTypes[key]);\n }\n }\n }\n\n return propArrayTypes;\n}\n\n/**\n * Fills coordinates into pre-allocated typed arrays\n *\n * @param features\n * @param geometryInfo\n * @param options\n * @returns an accessor object with value and size keys\n */\n// eslint-disable-next-line complexity, max-statements\nfunction fillArrays(\n features: FlatFeature[],\n geometryInfo: GeojsonGeometryInfo & {\n propArrayTypes: {[key: string]: PropArrayConstructor};\n },\n options: FlatGeojsonToBinaryOptions\n) {\n const {\n pointPositionsCount,\n pointFeaturesCount,\n linePositionsCount,\n linePathsCount,\n lineFeaturesCount,\n polygonPositionsCount,\n polygonObjectsCount,\n polygonRingsCount,\n polygonFeaturesCount,\n propArrayTypes,\n coordLength\n } = geometryInfo;\n const {numericPropKeys = [], PositionDataType = Float32Array, triangulate = true} = options;\n const hasGlobalId = features[0] && 'id' in features[0];\n const GlobalFeatureIdsDataType = features.length > 65535 ? Uint32Array : Uint16Array;\n const points: Points = {\n type: 'Point',\n positions: new PositionDataType(pointPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(pointPositionsCount),\n featureIds:\n pointFeaturesCount > 65535\n ? new Uint32Array(pointPositionsCount)\n : new Uint16Array(pointPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const lines: Lines = {\n type: 'LineString',\n pathIndices:\n linePositionsCount > 65535\n ? new Uint32Array(linePathsCount + 1)\n : new Uint16Array(linePathsCount + 1),\n positions: new PositionDataType(linePositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(linePositionsCount),\n featureIds:\n lineFeaturesCount > 65535\n ? new Uint32Array(linePositionsCount)\n : new Uint16Array(linePositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n const polygons: Polygons = {\n type: 'Polygon',\n polygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonObjectsCount + 1)\n : new Uint16Array(polygonObjectsCount + 1),\n primitivePolygonIndices:\n polygonPositionsCount > 65535\n ? new Uint32Array(polygonRingsCount + 1)\n : new Uint16Array(polygonRingsCount + 1),\n positions: new PositionDataType(polygonPositionsCount * coordLength),\n globalFeatureIds: new GlobalFeatureIdsDataType(polygonPositionsCount),\n featureIds:\n polygonFeaturesCount > 65535\n ? new Uint32Array(polygonPositionsCount)\n : new Uint16Array(polygonPositionsCount),\n numericProps: {},\n properties: [],\n fields: []\n };\n\n if (triangulate) {\n polygons.triangles = [];\n }\n\n // Instantiate numeric properties arrays; one value per vertex\n for (const object of [points, lines, polygons]) {\n for (const propName of numericPropKeys) {\n // If property has been numeric in all previous features in which the property existed, check\n // if numeric in this feature\n const T = propArrayTypes[propName];\n object.numericProps[propName] = new T(object.positions.length / coordLength) as TypedArray;\n }\n }\n\n // Set last element of path/polygon indices as positions length\n lines.pathIndices[linePathsCount] = linePositionsCount;\n polygons.polygonIndices[polygonObjectsCount] = polygonPositionsCount;\n polygons.primitivePolygonIndices[polygonRingsCount] = polygonPositionsCount;\n\n const indexMap = {\n pointPosition: 0,\n pointFeature: 0,\n linePosition: 0,\n linePath: 0,\n lineFeature: 0,\n polygonPosition: 0,\n polygonObject: 0,\n polygonRing: 0,\n polygonFeature: 0,\n feature: 0\n };\n\n for (const feature of features) {\n const geometry = feature.geometry;\n const properties = feature.properties || {};\n\n switch (geometry.type) {\n case 'Point':\n handlePoint(geometry, points, indexMap, coordLength, properties);\n points.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n points.fields.push({id: feature.id});\n }\n indexMap.pointFeature++;\n break;\n case 'LineString':\n handleLineString(geometry, lines, indexMap, coordLength, properties);\n lines.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n lines.fields.push({id: feature.id});\n }\n indexMap.lineFeature++;\n break;\n case 'Polygon':\n handlePolygon(geometry, polygons, indexMap, coordLength, properties);\n polygons.properties.push(keepStringProperties(properties, numericPropKeys));\n if (hasGlobalId) {\n polygons.fields.push({id: feature.id});\n }\n indexMap.polygonFeature++;\n break;\n default:\n throw new Error('Invalid geometry type');\n }\n\n indexMap.feature++;\n }\n\n // Wrap each array in an accessor object with value and size keys\n return makeAccessorObjects(points, lines, polygons, coordLength);\n}\n\n/**\n * Fills (Multi)Point coordinates into points object of arrays\n *\n * @param geometry\n * @param points\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePoint(\n geometry: FlatPoint,\n points: Points,\n indexMap: {\n pointPosition: number;\n pointFeature: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n points.positions.set(geometry.data, indexMap.pointPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(points, properties, indexMap.pointPosition, nPositions);\n points.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n points.featureIds.fill(\n indexMap.pointFeature,\n indexMap.pointPosition,\n indexMap.pointPosition + nPositions\n );\n\n indexMap.pointPosition += nPositions;\n}\n\n/**\n * Fills (Multi)LineString coordinates into lines object of arrays\n *\n * @param geometry\n * @param lines\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handleLineString(\n geometry: FlatLineString,\n lines: Lines,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition: number;\n linePath: number;\n lineFeature: number;\n polygonPosition?: number;\n polygonObject?: number;\n polygonRing?: number;\n polygonFeature?: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n lines.positions.set(geometry.data, indexMap.linePosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(lines, properties, indexMap.linePosition, nPositions);\n\n lines.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n lines.featureIds.fill(\n indexMap.lineFeature,\n indexMap.linePosition,\n indexMap.linePosition + nPositions\n );\n\n for (let i = 0, il = geometry.indices.length; i < il; ++i) {\n // Extract range of data we are working with, defined by start\n // and end indices (these index into the geometry.data array)\n const start = geometry.indices[i];\n const end =\n i === il - 1\n ? geometry.data.length // last line, so read to end of data\n : geometry.indices[i + 1]; // start index for next line\n\n lines.pathIndices[indexMap.linePath++] = indexMap.linePosition;\n indexMap.linePosition += (end - start) / coordLength;\n }\n}\n\n/**\n * Fills (Multi)Polygon coordinates into polygons object of arrays\n *\n * @param geometry\n * @param polygons\n * @param indexMap\n * @param coordLength\n * @param properties\n */\nfunction handlePolygon(\n geometry: FlatPolygon,\n polygons: Polygons,\n indexMap: {\n pointPosition?: number;\n pointFeature?: number;\n linePosition?: number;\n linePath?: number;\n lineFeature?: number;\n polygonPosition: number;\n polygonObject: number;\n polygonRing: number;\n polygonFeature: number;\n feature: number;\n },\n coordLength: number,\n properties: {[x: string]: string | number | boolean | null}\n): void {\n polygons.positions.set(geometry.data, indexMap.polygonPosition * coordLength);\n\n const nPositions = geometry.data.length / coordLength;\n fillNumericProperties(polygons, properties, indexMap.polygonPosition, nPositions);\n polygons.globalFeatureIds.fill(\n indexMap.feature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n polygons.featureIds.fill(\n indexMap.polygonFeature,\n indexMap.polygonPosition,\n indexMap.polygonPosition + nPositions\n );\n\n // Unlike Point & LineString geometry.indices is a 2D array\n for (let l = 0, ll = geometry.indices.length; l < ll; ++l) {\n const startPosition = indexMap.polygonPosition;\n polygons.polygonIndices[indexMap.polygonObject++] = startPosition;\n\n const areas = geometry.areas[l];\n const indices = geometry.indices[l];\n const nextIndices = geometry.indices[l + 1];\n\n for (let i = 0, il = indices.length; i < il; ++i) {\n const start = indices[i];\n const end =\n i === il - 1\n ? // last line, so either read to:\n nextIndices === undefined\n ? geometry.data.length // end of data (no next indices)\n : nextIndices[0] // start of first line in nextIndices\n : indices[i + 1]; // start index for next line\n\n polygons.primitivePolygonIndices[indexMap.polygonRing++] = indexMap.polygonPosition;\n indexMap.polygonPosition += (end - start) / coordLength;\n }\n\n const endPosition = indexMap.polygonPosition;\n triangulatePolygon(polygons, areas, indices, {startPosition, endPosition, coordLength});\n }\n}\n\n/**\n * Triangulate polygon using earcut\n *\n * @param polygons\n * @param areas\n * @param indices\n * @param param3\n */\nfunction triangulatePolygon(\n polygons: Polygons,\n areas: number[],\n indices: number[],\n {\n startPosition,\n endPosition,\n coordLength\n }: {startPosition: number; endPosition: number; coordLength: number}\n): void {\n if (!polygons.triangles) {\n return;\n }\n\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.subarray(start, end);\n\n // Holes are referenced relative to outer polygon\n const offset = indices[0];\n const holes = indices.slice(1).map((n: number) => (n - offset) / coordLength);\n\n // Compute triangulation\n const triangles = earcut(polygonPositions, holes, coordLength, areas);\n\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n polygons.triangles.push(startPosition + triangles[t]);\n }\n}\n\n/**\n * Wraps an object containing array into accessors\n *\n * @param obj\n * @param size\n */\nfunction wrapProps(\n obj: {[key: string]: TypedArray},\n size: number\n): {[key: string]: BinaryAttribute} {\n const returnObj = {};\n for (const key in obj) {\n returnObj[key] = {value: obj[key], size};\n }\n return returnObj;\n}\n\n/**\n * Wrap each array in an accessor object with value and size keys\n *\n * @param points\n * @param lines\n * @param polygons\n * @param coordLength\n * @returns object\n */\nfunction makeAccessorObjects(\n points: Points,\n lines: Lines,\n polygons: Polygons,\n coordLength: number\n): BinaryFeatureCollection {\n const binaryFeatures: BinaryFeatureCollection = {\n shape: 'binary-feature-collection',\n points: {\n ...points,\n positions: {value: points.positions, size: coordLength},\n globalFeatureIds: {value: points.globalFeatureIds, size: 1},\n featureIds: {value: points.featureIds, size: 1},\n numericProps: wrapProps(points.numericProps, 1)\n },\n lines: {\n ...lines,\n positions: {value: lines.positions, size: coordLength},\n pathIndices: {value: lines.pathIndices, size: 1},\n globalFeatureIds: {value: lines.globalFeatureIds, size: 1},\n featureIds: {value: lines.featureIds, size: 1},\n numericProps: wrapProps(lines.numericProps, 1)\n },\n polygons: {\n ...polygons,\n positions: {value: polygons.positions, size: coordLength},\n polygonIndices: {value: polygons.polygonIndices, size: 1},\n primitivePolygonIndices: {value: polygons.primitivePolygonIndices, size: 1},\n globalFeatureIds: {value: polygons.globalFeatureIds, size: 1},\n featureIds: {value: polygons.featureIds, size: 1},\n numericProps: wrapProps(polygons.numericProps, 1)\n } as BinaryPolygonFeature // triangles not expected\n };\n\n if (binaryFeatures.polygons && polygons.triangles) {\n binaryFeatures.polygons.triangles = {value: new Uint32Array(polygons.triangles), size: 1};\n }\n\n return binaryFeatures;\n}\n\n/**\n * Add numeric properties to object\n *\n * @param object\n * @param properties\n * @param index\n * @param length\n */\nfunction fillNumericProperties(\n object: Points | Lines | Polygons,\n properties: {[x: string]: string | number | boolean | null},\n index: number,\n length: number\n): void {\n for (const numericPropName in object.numericProps) {\n if (numericPropName in properties) {\n const value = properties[numericPropName] as number;\n object.numericProps[numericPropName].fill(value, index, index + length);\n }\n }\n}\n\n/**\n * Keep string properties in object\n *\n * @param properties\n * @param numericKeys\n * @returns object\n */\nfunction keepStringProperties(\n properties: {[x: string]: string | number | boolean | null},\n numericKeys: string[]\n) {\n const props = {};\n for (const key in properties) {\n if (!numericKeys.includes(key)) {\n props[key] = properties[key];\n }\n }\n return props;\n}\n\n/**\n *\n * Deduce correct array constructor to use for a given value\n *\n * @param x value to test\n * @param constructor previous constructor deduced\n * @returns PropArrayConstructor\n */\nfunction deduceArrayType(x: any, constructor: PropArrayConstructor): PropArrayConstructor {\n if (constructor === Array || !Number.isFinite(x)) {\n return Array;\n }\n\n // If this or previous value required 64bits use Float64Array\n return constructor === Float64Array || Math.fround(x) !== x ? Float64Array : Float32Array;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {getPolygonSignedArea} from '@math.gl/polygon';\n\nimport {Feature, Position, FlatFeature} from '@loaders.gl/schema';\n\n/**\n * Options for `geojsonToFlatGeojson`\n */\nexport type GeojsonToFlatGeojsonOptions = {\n coordLength: number;\n fixRingWinding: boolean;\n};\n\n// Coordinates defining a Point\ntype PointCoordinates = Position;\n// Coordinates defining a LineString\ntype LineStringCoordinates = Position[];\n// Coordinates defining a Polygon\ntype PolygonCoordinates = Position[][];\n\n/**\n * Convert GeoJSON features to Flat GeoJSON features\n *\n * @param features\n * @param options\n * @returns an Array of Flat GeoJSON features\n */\nexport function convertGeojsonToFlatGeojson(\n features: Feature[],\n options: GeojsonToFlatGeojsonOptions = {coordLength: 2, fixRingWinding: true}\n): FlatFeature[] {\n return features.map((feature) => flattenFeature(feature, options));\n}\n\n/**\n * Helper function to copy Point values from `coordinates` into `data` & `indices`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param options\n */\nfunction flattenPoint(\n coordinates: PointCoordinates,\n data: number[],\n indices: number[],\n options: GeojsonToFlatGeojsonOptions\n) {\n indices.push(data.length);\n data.push(...coordinates);\n\n // Pad up to coordLength\n for (let i = coordinates.length; i < options.coordLength; i++) {\n data.push(0);\n }\n}\n\n/**\n * Helper function to copy LineString values from `coordinates` into `data` & `indices`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param options\n */\nfunction flattenLineString(\n coordinates: LineStringCoordinates,\n data: number[],\n indices: number[],\n options: GeojsonToFlatGeojsonOptions\n) {\n indices.push(data.length);\n for (const c of coordinates) {\n data.push(...c);\n\n // Pad up to coordLength\n for (let i = c.length; i < options.coordLength; i++) {\n data.push(0);\n }\n }\n}\n\n/**\n * Helper function to copy Polygon values from `coordinates` into `data` & `indices` & `areas`\n *\n * @param coordinates\n * @param data\n * @param indices\n * @param areas\n * @param options\n */\nfunction flattenPolygon(\n coordinates: PolygonCoordinates,\n data: number[],\n indices: number[][],\n areas: number[][],\n options: GeojsonToFlatGeojsonOptions\n) {\n let count = 0;\n const ringAreas: number[] = [];\n const polygons: number[] = [];\n for (const lineString of coordinates) {\n const lineString2d = lineString.map((p) => p.slice(0, 2));\n let area = getPolygonSignedArea(lineString2d.flat());\n const ccw = area < 0;\n\n // Exterior ring must be CCW and interior rings CW\n if (options.fixRingWinding && ((count === 0 && !ccw) || (count > 0 && ccw))) {\n lineString.reverse();\n area = -area;\n }\n ringAreas.push(area);\n flattenLineString(lineString, data, polygons, options);\n count++;\n }\n\n if (count > 0) {\n areas.push(ringAreas);\n indices.push(polygons);\n }\n}\n\n/**\n * Flatten single GeoJSON feature into Flat GeoJSON\n *\n * @param feature\n * @param options\n * @returns A Flat GeoJSON feature\n */\nfunction flattenFeature(feature: Feature, options: GeojsonToFlatGeojsonOptions): FlatFeature {\n const {geometry} = feature;\n if (geometry.type === 'GeometryCollection') {\n throw new Error('GeometryCollection type not supported');\n }\n const data = [];\n const indices = [];\n let areas;\n let type;\n\n switch (geometry.type) {\n case 'Point':\n type = 'Point';\n flattenPoint(geometry.coordinates, data, indices, options);\n break;\n case 'MultiPoint':\n type = 'Point';\n geometry.coordinates.map((c) => flattenPoint(c, data, indices, options));\n break;\n case 'LineString':\n type = 'LineString';\n flattenLineString(geometry.coordinates, data, indices, options);\n break;\n case 'MultiLineString':\n type = 'LineString';\n geometry.coordinates.map((c) => flattenLineString(c, data, indices, options));\n break;\n case 'Polygon':\n type = 'Polygon';\n areas = [];\n flattenPolygon(geometry.coordinates, data, indices, areas, options);\n break;\n case 'MultiPolygon':\n type = 'Polygon';\n areas = [];\n geometry.coordinates.map((c) => flattenPolygon(c, data, indices, areas, options));\n break;\n default:\n throw new Error(`Unknown type: ${type}`);\n }\n\n return {...feature, geometry: {type, indices, data, areas}};\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Feature, BinaryFeatureCollection} from '@loaders.gl/schema';\n\nimport {getGeometryInfo} from '../geometry-api/geometry-info';\nimport {convertGeojsonToFlatGeojson} from './convert-geojson-to-flat-geojson';\nimport {convertFlatGeojsonToBinaryFeatureCollection} from './convert-flat-geojson-to-binary-features';\n\n/**\n * Options for `geojsonToBinary`\n */\nexport type GeojsonToBinaryOptions = {\n fixRingWinding: boolean;\n numericPropKeys?: string[];\n PositionDataType?: Float32ArrayConstructor | Float64ArrayConstructor;\n triangulate?: boolean;\n};\n\n/**\n * Convert GeoJSON features to flat binary arrays\n *\n * @param features\n * @param options\n * @returns features in binary format, grouped by geometry type\n */\nexport function convertGeojsonToBinaryFeatureCollection(\n features: Feature[],\n options: GeojsonToBinaryOptions = {fixRingWinding: true, triangulate: true}\n): BinaryFeatureCollection {\n const geometryInfo = getGeometryInfo(features);\n const coordLength = geometryInfo.coordLength;\n const {fixRingWinding} = options;\n const flatFeatures = convertGeojsonToFlatGeojson(features, {coordLength, fixRingWinding});\n return convertFlatGeojsonToBinaryFeatureCollection(flatFeatures, geometryInfo, {\n numericPropKeys: options.numericPropKeys,\n PositionDataType: options.PositionDataType || Float32Array,\n triangulate: options.triangulate\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {\n BinaryGeometryType,\n BinaryFeatureCollection,\n BinaryFeature,\n // BinaryPointFeature,\n // BinaryLineFeature,\n // BinaryPolygonFeature,\n Feature,\n GeoJsonProperties\n} from '@loaders.gl/schema';\nimport {convertBinaryGeometryToGeometry} from '../geometry-converters/convert-binary-geometry-to-geojson';\n\n// Note: We do not handle GeometryCollection, define a limited Geometry type that always has coordinates.\n// type FeatureGeometry = Point | MultiPoint | LineString | MultiLineString | Polygon | MultiPolygon;\n\ntype BinaryToGeoJsonOptions = {\n type?: BinaryGeometryType;\n globalFeatureId?: number;\n};\n\n/**\n * Convert binary geometry representation to GeoJSON\n * @param data geometry data in binary representation\n * @param options\n * @param options.type Input data type: Point, LineString, or Polygon\n * @param options.featureId Global feature id. If specified, only a single feature is extracted\n * @return GeoJSON objects\n */\nexport function convertBinaryFeatureCollectionToGeojson(\n data: BinaryFeatureCollection,\n options?: BinaryToGeoJsonOptions\n): Feature[] | Feature {\n const globalFeatureId = options?.globalFeatureId;\n if (globalFeatureId !== undefined) {\n return getSingleFeature(data, globalFeatureId);\n }\n return parseFeatures(data, options?.type);\n}\n\n/**\n * Return a single feature from a binary geometry representation as GeoJSON\n * @param data geometry data in binary representation\n * @return GeoJSON feature\n */\nfunction getSingleFeature(data: BinaryFeatureCollection, globalFeatureId: number): Feature {\n const dataArray = normalizeInput(data);\n for (const data of dataArray) {\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Scan through data until we find matching feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, i);\n }\n lastIndex = i;\n lastValue = currValue;\n }\n\n if (globalFeatureId === data.globalFeatureIds.value[lastIndex]) {\n return parseFeature(data, lastIndex, data.featureIds.value.length);\n }\n }\n\n throw new Error(`featureId:${globalFeatureId} not found`);\n}\n\nfunction parseFeatures(data: BinaryFeatureCollection, type?: BinaryGeometryType): Feature[] {\n const dataArray = normalizeInput(data, type);\n return parseFeatureCollection(dataArray);\n}\n\n// Normalize features\n// Return an array of data objects, each of which have a type key\nfunction normalizeInput(data: BinaryFeatureCollection, type?: BinaryGeometryType): BinaryFeature[] {\n const features: BinaryFeature[] = [];\n if (data.points) {\n data.points.type = 'Point';\n features.push(data.points);\n }\n if (data.lines) {\n data.lines.type = 'LineString';\n features.push(data.lines);\n }\n if (data.polygons) {\n data.polygons.type = 'Polygon';\n features.push(data.polygons);\n }\n\n return features;\n}\n\n/** Parse input binary data and return an array of GeoJSON Features */\nfunction parseFeatureCollection(dataArray: BinaryFeature[]): Feature[] {\n const features: Feature[] = [];\n for (const data of dataArray) {\n if (data.featureIds.value.length === 0) {\n // eslint-disable-next-line no-continue\n continue;\n }\n let lastIndex = 0;\n let lastValue = data.featureIds.value[0];\n\n // Need to deduce start, end indices of each feature\n for (let i = 0; i < data.featureIds.value.length; i++) {\n const currValue = data.featureIds.value[i];\n if (currValue === lastValue) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n features.push(parseFeature(data, lastIndex, i));\n lastIndex = i;\n lastValue = currValue;\n }\n\n // Last feature\n features.push(parseFeature(data, lastIndex, data.featureIds.value.length));\n }\n return features;\n}\n\n/** Parse input binary data and return a single GeoJSON Feature */\nfunction parseFeature(data: BinaryFeature, startIndex?: number, endIndex?: number): Feature {\n const geometry = convertBinaryGeometryToGeometry(data, startIndex, endIndex);\n const properties = parseProperties(data, startIndex, endIndex);\n const fields = parseFields(data, startIndex, endIndex);\n return {type: 'Feature', geometry, properties, ...fields};\n}\n\n/** Parse input binary data and return an object of fields */\nfunction parseFields(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n return data.fields && data.fields[data.featureIds.value[startIndex]];\n}\n\n/** Parse input binary data and return an object of properties */\nfunction parseProperties(data, startIndex: number = 0, endIndex?: number): GeoJsonProperties {\n const properties = Object.assign({}, data.properties[data.featureIds.value[startIndex]]);\n for (const key in data.numericProps) {\n properties[key] = data.numericProps[key].value[startIndex];\n }\n return properties;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n/** A DataView that tracks byte offset when reading. */\nexport class BinaryReader {\n arrayBuffer: ArrayBuffer;\n dataView: DataView;\n byteOffset: number;\n littleEndian: boolean;\n\n constructor(arrayBuffer: ArrayBuffer, isBigEndian: boolean = false) {\n this.arrayBuffer = arrayBuffer;\n this.dataView = new DataView(arrayBuffer);\n this.byteOffset = 0;\n this.littleEndian = !isBigEndian;\n }\n\n readUInt8() {\n const value = this.dataView.getUint8(this.byteOffset);\n this.byteOffset += 1;\n return value;\n }\n readUInt16() {\n const value = this.dataView.getUint16(this.byteOffset, this.littleEndian);\n this.byteOffset += 2;\n return value;\n }\n readUInt32() {\n const value = this.dataView.getUint32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readInt8() {\n const value = this.dataView.getInt8(this.byteOffset);\n this.byteOffset += 1;\n return value;\n }\n readInt16() {\n const value = this.dataView.getInt16(this.byteOffset, this.littleEndian);\n this.byteOffset += 2;\n return value;\n }\n readInt32() {\n const value = this.dataView.getInt32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readFloat() {\n const value = this.dataView.getFloat32(this.byteOffset, this.littleEndian);\n this.byteOffset += 4;\n return value;\n }\n readDouble() {\n const value = this.dataView.getFloat64(this.byteOffset, this.littleEndian);\n this.byteOffset += 8;\n return value;\n }\n\n readVarInt() {\n let result = 0;\n let bytesRead = 0;\n\n let nextByte;\n do {\n // TODO - this needs to be accessed via data view?\n nextByte = this.dataView.getUint8(this.byteOffset + bytesRead);\n result += (nextByte & 0x7f) << (7 * bytesRead);\n bytesRead++;\n } while (nextByte >= 0x80);\n\n this.byteOffset += bytesRead;\n\n return result;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n\nimport type {\n Geometry,\n GeometryCollection,\n Point,\n LineString,\n Polygon,\n MultiPoint,\n MultiLineString,\n MultiPolygon\n} from '@loaders.gl/schema';\nimport {BinaryReader} from '../../utils/binary-reader';\nimport {WKBGeometryType} from './helpers/wkb-types';\n\n/**\n * Check if an array buffer might be a TWKB array buffer\n * @param arrayBuffer The array buffer to check\n * @returns false if this is definitely not a TWKB array buffer, true if it might be a TWKB array buffer\n */\nexport function isTWKB(arrayBuffer: ArrayBuffer): boolean {\n const binaryReader = new BinaryReader(arrayBuffer);\n\n const type = binaryReader.readUInt8();\n const geometryType = type & 0x0f;\n\n // Only geometry types 1 to 7 (point to geometry collection are currently defined)\n if (geometryType < 1 || geometryType > 7) {\n return false;\n }\n\n return true;\n}\n\n/** Passed around between parsing functions, extracted from the header */\ntype TWKBHeader = {\n geometryType: WKBGeometryType;\n\n hasBoundingBox: boolean;\n hasSizeAttribute: boolean;\n hasIdList: boolean;\n hasExtendedPrecision: boolean;\n isEmpty: boolean;\n\n precision: number;\n precisionFactor: number;\n\n hasZ: boolean;\n zPrecision: number;\n zPrecisionFactor: number;\n\n hasM: boolean;\n mPrecision: number;\n mPrecisionFactor: number;\n};\n\n/** Converts a TWKB encoded buffer to a GeoJSON Geometry */\nexport function convertTWKBToGeometry(arrayBuffer: ArrayBuffer): Geometry {\n const binaryReader = new BinaryReader(arrayBuffer);\n\n const context = parseTWKBHeader(binaryReader);\n\n if (context.hasSizeAttribute) {\n binaryReader.readVarInt();\n }\n\n if (context.hasBoundingBox) {\n let dimensions = 2;\n\n if (context.hasZ) {\n dimensions++;\n }\n if (context.hasM) {\n dimensions++;\n }\n\n // TODO why are we throwing away these datums?\n for (let i = 0; i < dimensions; i++) {\n binaryReader.readVarInt();\n binaryReader.readVarInt();\n }\n }\n\n return parseGeometry(binaryReader, context, context.geometryType);\n}\n\nfunction parseTWKBHeader(binaryReader: BinaryReader): TWKBHeader {\n const type = binaryReader.readUInt8();\n const metadataHeader = binaryReader.readUInt8();\n\n const geometryType = type & 0x0f;\n\n const precision = zigZagDecode(type >> 4);\n\n const hasExtendedPrecision = Boolean((metadataHeader >> 3) & 1);\n let hasZ = false;\n let hasM = false;\n let zPrecision = 0;\n let zPrecisionFactor = 1;\n let mPrecision = 0;\n let mPrecisionFactor = 1;\n\n if (hasExtendedPrecision) {\n const extendedPrecision = binaryReader.readUInt8();\n hasZ = (extendedPrecision & 0x01) === 0x01;\n hasM = (extendedPrecision & 0x02) === 0x02;\n\n zPrecision = zigZagDecode((extendedPrecision & 0x1c) >> 2);\n zPrecisionFactor = Math.pow(10, zPrecision);\n\n mPrecision = zigZagDecode((extendedPrecision & 0xe0) >> 5);\n mPrecisionFactor = Math.pow(10, mPrecision);\n }\n\n return {\n geometryType,\n\n precision,\n precisionFactor: Math.pow(10, precision),\n\n hasBoundingBox: Boolean((metadataHeader >> 0) & 1),\n hasSizeAttribute: Boolean((metadataHeader >> 1) & 1),\n hasIdList: Boolean((metadataHeader >> 2) & 1),\n hasExtendedPrecision,\n isEmpty: Boolean((metadataHeader >> 4) & 1),\n\n hasZ,\n hasM,\n zPrecision,\n zPrecisionFactor,\n mPrecision,\n mPrecisionFactor\n };\n}\n\nfunction parseGeometry(\n binaryReader: BinaryReader,\n context: TWKBHeader,\n geometryType: WKBGeometryType\n): Geometry {\n switch (geometryType) {\n case WKBGeometryType.Point:\n return parsePoint(binaryReader, context);\n case WKBGeometryType.LineString:\n return parseLineString(binaryReader, context);\n case WKBGeometryType.Polygon:\n return parsePolygon(binaryReader, context);\n case WKBGeometryType.MultiPoint:\n return parseMultiPoint(binaryReader, context);\n case WKBGeometryType.MultiLineString:\n return parseMultiLineString(binaryReader, context);\n case WKBGeometryType.MultiPolygon:\n return parseMultiPolygon(binaryReader, context);\n case WKBGeometryType.GeometryCollection:\n return parseGeometryCollection(binaryReader, context);\n default:\n throw new Error(`GeometryType ${geometryType} not supported`);\n }\n}\n\n// GEOMETRIES\n\nfunction parsePoint(reader: BinaryReader, context: TWKBHeader): Point {\n if (context.isEmpty) {\n return {type: 'Point', coordinates: []};\n }\n\n return {type: 'Point', coordinates: readFirstPoint(reader, context)};\n}\n\nfunction parseLineString(reader: BinaryReader, context: TWKBHeader): LineString {\n if (context.isEmpty) {\n return {type: 'LineString', coordinates: []};\n }\n\n const pointCount = reader.readVarInt();\n\n const previousPoint = makePreviousPoint(context);\n\n const points: number[][] = [];\n for (let i = 0; i < pointCount; i++) {\n points.push(parseNextPoint(reader, context, previousPoint));\n }\n\n return {type: 'LineString', coordinates: points};\n}\n\nfunction parsePolygon(reader: BinaryReader, context: TWKBHeader): Polygon {\n if (context.isEmpty) {\n return {type: 'Polygon', coordinates: []};\n }\n\n const ringCount = reader.readVarInt();\n\n const previousPoint = makePreviousPoint(context);\n\n const exteriorRingLength = reader.readVarInt();\n const exteriorRing: number[][] = [];\n\n for (let i = 0; i < exteriorRingLength; i++) {\n exteriorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n\n const polygon: number[][][] = [exteriorRing];\n for (let i = 1; i < ringCount; i++) {\n const interiorRingCount = reader.readVarInt();\n\n const interiorRing: number[][] = [];\n for (let j = 0; j < interiorRingCount; j++) {\n interiorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n\n polygon.push(interiorRing);\n }\n\n return {type: 'Polygon', coordinates: polygon};\n}\n\nfunction parseMultiPoint(reader: BinaryReader, context: TWKBHeader): MultiPoint {\n if (context.isEmpty) {\n return {type: 'MultiPoint', coordinates: []};\n }\n\n const previousPoint = makePreviousPoint(context);\n const pointCount = reader.readVarInt();\n\n const coordinates: number[][] = [];\n for (let i = 0; i < pointCount; i++) {\n coordinates.push(parseNextPoint(reader, context, previousPoint));\n }\n\n return {type: 'MultiPoint', coordinates};\n}\n\nfunction parseMultiLineString(reader: BinaryReader, context: TWKBHeader): MultiLineString {\n if (context.isEmpty) {\n return {type: 'MultiLineString', coordinates: []};\n }\n\n const previousPoint = makePreviousPoint(context);\n const lineStringCount = reader.readVarInt();\n\n const coordinates: number[][][] = [];\n for (let i = 0; i < lineStringCount; i++) {\n const pointCount = reader.readVarInt();\n\n const lineString: number[][] = [];\n for (let j = 0; j < pointCount; j++) {\n lineString.push(parseNextPoint(reader, context, previousPoint));\n }\n\n coordinates.push(lineString);\n }\n\n return {type: 'MultiLineString', coordinates};\n}\n\nfunction parseMultiPolygon(reader: BinaryReader, context: TWKBHeader): MultiPolygon {\n if (context.isEmpty) {\n return {type: 'MultiPolygon', coordinates: []};\n }\n\n const previousPoint = makePreviousPoint(context);\n const polygonCount = reader.readVarInt();\n\n const polygons: number[][][][] = [];\n for (let i = 0; i < polygonCount; i++) {\n const ringCount = reader.readVarInt();\n\n const exteriorPointCount = reader.readVarInt();\n\n const exteriorRing: number[][] = [];\n for (let j = 0; j < exteriorPointCount; j++) {\n exteriorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n\n const polygon: number[][][] = exteriorRing ? [exteriorRing] : [];\n\n for (let j = 1; j < ringCount; j++) {\n const interiorRing: number[][] = [];\n\n const interiorRingLength = reader.readVarInt();\n\n for (let k = 0; k < interiorRingLength; k++) {\n interiorRing.push(parseNextPoint(reader, context, previousPoint));\n }\n\n polygon.push(interiorRing);\n }\n\n polygons.push(polygon);\n }\n\n return {type: 'MultiPolygon', coordinates: polygons};\n}\n\n/** Geometry collection not yet supported */\nfunction parseGeometryCollection(reader: BinaryReader, context: TWKBHeader): GeometryCollection {\n return {type: 'GeometryCollection', geometries: []};\n /**\n if (context.isEmpty) {\n return {type: 'GeometryCollection', geometries: []};\n }\n\n const geometryCount = reader.readVarInt();\n\n const geometries: Geometry[] = new Array(geometryCount);\n for (let i = 0; i < geometryCount; i++) {\n const geometry = parseGeometry(reader, context, geometryType);\n geometries.push(geometry);\n }\n\n return {type: 'GeometryCollection', geometries: []};\n */\n}\n\n// HELPERS\n\n/** \n * Maps negative values to positive values while going back and\n forth (0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 ...)\n */\nfunction zigZagDecode(value: number): number {\n return (value >> 1) ^ -(value & 1);\n}\n\nfunction makePointCoordinates(x: number, y: number, z?: number, m?: number): number[] {\n return (z !== undefined ? (m !== undefined ? [x, y, z, m] : [x, y, z]) : [x, y]) as number[];\n}\n\nfunction makePreviousPoint(context: TWKBHeader): number[] {\n return makePointCoordinates(0, 0, context.hasZ ? 0 : undefined, context.hasM ? 0 : undefined);\n}\n\nfunction readFirstPoint(reader: BinaryReader, context: TWKBHeader): number[] {\n const x = zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n const y = zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n const z = context.hasZ ? zigZagDecode(reader.readVarInt()) / context.zPrecisionFactor : undefined;\n const m = context.hasM ? zigZagDecode(reader.readVarInt()) / context.mPrecisionFactor : undefined;\n return makePointCoordinates(x, y, z, m);\n}\n\n/**\n * Modifies previousPoint\n */\nfunction parseNextPoint(\n reader: BinaryReader,\n context: TWKBHeader,\n previousPoint: number[]\n): number[] {\n previousPoint[0] += zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n previousPoint[1] += zigZagDecode(reader.readVarInt()) / context.precisionFactor;\n\n if (context.hasZ) {\n previousPoint[2] += zigZagDecode(reader.readVarInt()) / context.zPrecisionFactor;\n }\n if (context.hasM) {\n previousPoint[3] += zigZagDecode(reader.readVarInt()) / context.mPrecisionFactor;\n }\n\n // Copy the point\n return previousPoint.slice();\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Fork of https://github.com/mapbox/wellknown under ISC license (MIT/BSD-2-clause equivalent)\n\nimport type {Geometry} from '@loaders.gl/schema';\n\n/**\n * Stringifies a GeoJSON object into WKT\n * @param geojson\n * @returns string\n */\nexport function convertGeometryToWKT(geometry: Geometry): string {\n switch (geometry.type) {\n case 'Point':\n return `POINT ${wrapParens(pairWKT(geometry.coordinates))}`;\n case 'LineString':\n return `LINESTRING ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'Polygon':\n return `POLYGON ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'MultiPoint':\n return `MULTIPOINT ${wrapParens(ringWKT(geometry.coordinates))}`;\n case 'MultiPolygon':\n return `MULTIPOLYGON ${wrapParens(multiRingsWKT(geometry.coordinates))}`;\n case 'MultiLineString':\n return `MULTILINESTRING ${wrapParens(ringsWKT(geometry.coordinates))}`;\n case 'GeometryCollection':\n return `GEOMETRYCOLLECTION ${wrapParens(geometry.geometries.map(convertGeometryToWKT).join(', '))}`;\n default:\n throw new Error(\n 'convertGeometryToWKT requires a valid GeoJSON Geometry (not Feature) as input'\n );\n }\n}\n\nfunction pairWKT(c: number[]): string {\n return c.join(' ');\n}\n\nfunction ringWKT(r: number[][]): string {\n return r.map(pairWKT).join(', ');\n}\n\nfunction ringsWKT(r: number[][][]): string {\n return r.map(ringWKT).map(wrapParens).join(', ');\n}\n\nfunction multiRingsWKT(r: number[][][][]): string {\n return r.map(ringsWKT).map(wrapParens).join(', ');\n}\n\nfunction wrapParens(s: string): string {\n return `(${s})`;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n\nimport {TypedArray} from '@math.gl/types';\n\nconst LE = true;\nconst BE = false;\n\nexport class BinaryWriter {\n arrayBuffer: ArrayBuffer;\n dataView: DataView;\n byteOffset: number = 0;\n allowResize: boolean = false;\n\n constructor(size: number, allowResize?: boolean) {\n this.arrayBuffer = new ArrayBuffer(size);\n this.dataView = new DataView(this.arrayBuffer);\n this.byteOffset = 0;\n this.allowResize = allowResize || false;\n }\n\n writeUInt8(value: number): void {\n this._ensureSize(1);\n this.dataView.setUint8(this.byteOffset, value);\n this.byteOffset += 1;\n }\n writeUInt16LE(value: number): void {\n this._ensureSize(2);\n this.dataView.setUint16(this.byteOffset, value, LE);\n this.byteOffset += 2;\n }\n writeUInt16BE(value: number): void {\n this._ensureSize(2);\n this.dataView.setUint16(this.byteOffset, value, BE);\n this.byteOffset += 2;\n }\n writeUInt32LE(value: number): void {\n this._ensureSize(4);\n this.dataView.setUint32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeUInt32BE(value: number): void {\n this._ensureSize(4);\n this.dataView.setUint32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeInt8(value: number): void {\n this._ensureSize(1);\n this.dataView.setInt8(this.byteOffset, value);\n this.byteOffset += 1;\n }\n writeInt16LE(value: number): void {\n this._ensureSize(2);\n this.dataView.setInt16(this.byteOffset, value, LE);\n this.byteOffset += 2;\n }\n writeInt16BE(value: number): void {\n this._ensureSize(2);\n this.dataView.setInt16(this.byteOffset, value, BE);\n this.byteOffset += 2;\n }\n writeInt32LE(value: number): void {\n this._ensureSize(4);\n this.dataView.setInt32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeInt32BE(value: number): void {\n this._ensureSize(4);\n this.dataView.setInt32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeFloatLE(value: number): void {\n this._ensureSize(4);\n this.dataView.setFloat32(this.byteOffset, value, LE);\n this.byteOffset += 4;\n }\n writeFloatBE(value: number): void {\n this._ensureSize(4);\n this.dataView.setFloat32(this.byteOffset, value, BE);\n this.byteOffset += 4;\n }\n writeDoubleLE(value: number): void {\n this._ensureSize(8);\n this.dataView.setFloat64(this.byteOffset, value, LE);\n this.byteOffset += 8;\n }\n writeDoubleBE(value: number): void {\n this._ensureSize(8);\n this.dataView.setFloat64(this.byteOffset, value, BE);\n this.byteOffset += 8;\n }\n\n /** A varint uses a variable number of bytes */\n writeVarInt(value: number): number {\n // TODO - ensure size?\n let length = 1;\n while ((value & 0xffffff80) !== 0) {\n this.writeUInt8((value & 0x7f) | 0x80);\n value >>>= 7;\n length++;\n }\n this.writeUInt8(value & 0x7f);\n return length;\n }\n\n writeTypedArray(typedArray: TypedArray) {\n this._ensureSize(typedArray.byteLength);\n const tempArray = new Uint8Array(this.arrayBuffer);\n tempArray.set(typedArray, this.byteOffset);\n this.byteOffset += typedArray.byteLength;\n }\n\n /** Append another ArrayBuffer to this ArrayBuffer */\n writeBuffer(arrayBuffer: ArrayBuffer): void {\n this._ensureSize(arrayBuffer.byteLength);\n const tempArray = new Uint8Array(this.arrayBuffer);\n tempArray.set(new Uint8Array(arrayBuffer), this.byteOffset);\n this.byteOffset += arrayBuffer.byteLength;\n }\n\n /** Resizes this.arrayBuffer if not enough space */\n _ensureSize(size: number) {\n if (this.arrayBuffer.byteLength < this.byteOffset + size) {\n if (this.allowResize) {\n const newArrayBuffer = new ArrayBuffer(this.byteOffset + size);\n const tempArray = new Uint8Array(newArrayBuffer);\n tempArray.set(new Uint8Array(this.arrayBuffer));\n this.arrayBuffer = newArrayBuffer;\n } else {\n throw new Error('BinaryWriter overflow');\n }\n }\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n// Reference: https://www.ogc.org/standards/sfa\n\nimport type {\n Feature,\n Geometry,\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection\n} from '@loaders.gl/schema';\nimport {WKBGeometryType, WKBOptions} from './helpers/wkb-types';\nimport {BinaryWriter} from '../../utils/binary-writer';\n\n/**\n * Encodes a GeoJSON object into WKB\n * @param geojson A GeoJSON Feature or Geometry\n * @returns string\n */\nexport function convertGeometryToWKB(\n geometry: Geometry | Feature,\n options: WKBOptions = {}\n): ArrayBuffer {\n if (geometry.type === 'Feature') {\n geometry = geometry.geometry;\n }\n\n switch (geometry.type) {\n case 'Point':\n return encodePoint(geometry.coordinates, options);\n case 'LineString':\n return encodeLineString(geometry.coordinates, options);\n case 'Polygon':\n return encodePolygon(geometry.coordinates, options);\n case 'MultiPoint':\n return encodeMultiPoint(geometry, options);\n case 'MultiPolygon':\n return encodeMultiPolygon(geometry, options);\n case 'MultiLineString':\n return encodeMultiLineString(geometry, options);\n case 'GeometryCollection':\n return encodeGeometryCollection(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Calculate the binary size (in the WKB encoding) of a specific GeoJSON geometry */\nfunction getGeometrySize(geometry: Geometry, options: WKBOptions): number {\n switch (geometry.type) {\n case 'Point':\n return getPointSize(options);\n case 'LineString':\n return getLineStringSize(geometry.coordinates, options);\n case 'Polygon':\n return getPolygonSize(geometry.coordinates, options);\n case 'MultiPoint':\n return getMultiPointSize(geometry, options);\n case 'MultiPolygon':\n return getMultiPolygonSize(geometry, options);\n case 'MultiLineString':\n return getMultiLineStringSize(geometry, options);\n case 'GeometryCollection':\n return getGeometryCollectionSize(geometry, options);\n default:\n const exhaustiveCheck: never = geometry;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n}\n\n/** Encode Point geometry as WKB ArrayBuffer */\nfunction encodePoint(coordinates: Point['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPointSize(options));\n\n writer.writeInt8(1);\n writeWkbType(writer, WKBGeometryType.Point, options);\n\n // I believe this special case is to handle writing Point(NaN, NaN) correctly\n if (typeof coordinates[0] === 'undefined' && typeof coordinates[1] === 'undefined') {\n writer.writeDoubleLE(NaN);\n writer.writeDoubleLE(NaN);\n\n if (options.hasZ) {\n writer.writeDoubleLE(NaN);\n }\n if (options.hasM) {\n writer.writeDoubleLE(NaN);\n }\n } else {\n writeCoordinate(writer, coordinates, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Write coordinate to buffer */\nfunction writeCoordinate(\n writer: BinaryWriter,\n coordinate: Point['coordinates'],\n options: WKBOptions\n): void {\n writer.writeDoubleLE(coordinate[0]);\n writer.writeDoubleLE(coordinate[1]);\n\n if (options.hasZ) {\n writer.writeDoubleLE(coordinate[2]);\n }\n if (options.hasM) {\n writer.writeDoubleLE(coordinate[3]);\n }\n}\n\n/** Get encoded size of Point geometry */\nfunction getPointSize(options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n return 1 + 4 + coordinateSize;\n}\n\n/** Encode LineString geometry as WKB ArrayBuffer */\nfunction encodeLineString(\n coordinates: LineString['coordinates'],\n options: WKBOptions\n): ArrayBuffer {\n const size = getLineStringSize(coordinates, options);\n\n const writer = new BinaryWriter(size);\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.LineString, options);\n writer.writeUInt32LE(coordinates.length);\n\n for (const coordinate of coordinates) {\n writeCoordinate(writer, coordinate, options);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of LineString geometry */\nfunction getLineStringSize(coordinates: LineString['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n\n return 1 + 4 + 4 + coordinates.length * coordinateSize;\n}\n\n/** Encode Polygon geometry as WKB ArrayBuffer */\nfunction encodePolygon(coordinates: Polygon['coordinates'], options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getPolygonSize(coordinates, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.Polygon, options);\n const [exteriorRing = [], ...interiorRings] = coordinates;\n\n if (exteriorRing.length > 0) {\n writer.writeUInt32LE(1 + interiorRings.length);\n writer.writeUInt32LE(exteriorRing.length);\n } else {\n writer.writeUInt32LE(0);\n }\n\n for (const coordinate of exteriorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n\n for (const interiorRing of interiorRings) {\n writer.writeUInt32LE(interiorRing.length);\n\n for (const coordinate of interiorRing) {\n writeCoordinate(writer, coordinate, options);\n }\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of Polygon geometry */\nfunction getPolygonSize(coordinates: Polygon['coordinates'], options: WKBOptions): number {\n const coordinateSize = getCoordinateSize(options);\n const [exteriorRing = [], ...interiorRings] = coordinates;\n\n let size = 1 + 4 + 4;\n\n if (exteriorRing.length > 0) {\n size += 4 + exteriorRing.length * coordinateSize;\n }\n\n for (const interiorRing of interiorRings) {\n size += 4 + interiorRing.length * coordinateSize;\n }\n\n return size;\n}\n\n/** Encode MultiPoint geometry as WKB ArrayBufer */\nfunction encodeMultiPoint(multiPoint: MultiPoint, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiPointSize(multiPoint, options));\n const points = multiPoint.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.MultiPoint, options);\n writer.writeUInt32LE(points.length);\n\n for (const point of points) {\n // TODO: add srid to this options object? {srid: multiPoint.srid}\n const arrayBuffer = encodePoint(point, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiPoint geometry */\nfunction getMultiPointSize(multiPoint: MultiPoint, options: WKBOptions) {\n let coordinateSize = getCoordinateSize(options);\n const points = multiPoint.coordinates;\n\n // This is because each point has a 5-byte header?\n coordinateSize += 5;\n\n return 1 + 4 + 4 + points.length * coordinateSize;\n}\n\n/** Encode MultiLineString geometry as WKB ArrayBufer */\nfunction encodeMultiLineString(multiLineString: MultiLineString, options: WKBOptions) {\n const writer = new BinaryWriter(getMultiLineStringSize(multiLineString, options));\n const lineStrings = multiLineString.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.MultiLineString, options);\n writer.writeUInt32LE(lineStrings.length);\n\n for (const lineString of lineStrings) {\n // TODO: Handle srid?\n const encodedLineString = encodeLineString(lineString, options);\n writer.writeBuffer(encodedLineString);\n }\n\n return writer.arrayBuffer;\n}\n\n/** Get encoded size of MultiLineString geometry */\nfunction getMultiLineStringSize(multiLineString: MultiLineString, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const lineStrings = multiLineString.coordinates;\n\n for (const lineString of lineStrings) {\n size += getLineStringSize(lineString, options);\n }\n\n return size;\n}\n\nfunction encodeMultiPolygon(multiPolygon: MultiPolygon, options: WKBOptions): ArrayBuffer {\n const writer = new BinaryWriter(getMultiPolygonSize(multiPolygon, options));\n const polygons = multiPolygon.coordinates;\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.MultiPolygon, options);\n writer.writeUInt32LE(polygons.length);\n\n for (const polygon of polygons) {\n const encodedPolygon = encodePolygon(polygon, options);\n writer.writeBuffer(encodedPolygon);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getMultiPolygonSize(multiPolygon: MultiPolygon, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n const polygons = multiPolygon.coordinates;\n\n for (const polygon of polygons) {\n size += getPolygonSize(polygon, options);\n }\n\n return size;\n}\n\nfunction encodeGeometryCollection(\n collection: GeometryCollection,\n options: WKBOptions\n): ArrayBuffer {\n const writer = new BinaryWriter(getGeometryCollectionSize(collection, options));\n\n writer.writeInt8(1);\n\n writeWkbType(writer, WKBGeometryType.GeometryCollection, options);\n writer.writeUInt32LE(collection.geometries.length);\n\n for (const geometry of collection.geometries) {\n // TODO: handle srid? {srid: collection.srid}\n const arrayBuffer = convertGeometryToWKB(geometry, options);\n writer.writeBuffer(arrayBuffer);\n }\n\n return writer.arrayBuffer;\n}\n\nfunction getGeometryCollectionSize(collection: GeometryCollection, options: WKBOptions): number {\n let size = 1 + 4 + 4;\n\n for (const geometry of collection.geometries) {\n size += getGeometrySize(geometry, options);\n }\n\n return size;\n}\n\n// HELPERS\n\n/**\n * Construct and write WKB integer code\n * Reference: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary\n */\nfunction writeWkbType(writer: BinaryWriter, geometryType: number, options: WKBOptions): void {\n const {hasZ, hasM, srid} = options;\n\n let dimensionType = 0;\n\n if (!srid) {\n if (hasZ && hasM) {\n dimensionType += 3000;\n } else if (hasZ) {\n dimensionType += 1000;\n } else if (hasM) {\n dimensionType += 2000;\n }\n } else {\n if (hasZ) {\n dimensionType |= 0x80000000;\n }\n if (hasM) {\n dimensionType |= 0x40000000;\n }\n }\n\n writer.writeUInt32LE((dimensionType + geometryType) >>> 0);\n}\n\n/** Get coordinate size given Z/M dimensions */\nfunction getCoordinateSize(options: WKBOptions): number {\n let coordinateSize = 16;\n\n if (options.hasZ) {\n coordinateSize += 8;\n }\n if (options.hasM) {\n coordinateSize += 8;\n }\n\n return coordinateSize;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Forked from https://github.com/cschwarz/wkx under MIT license, Copyright (c) 2013 Christian Schwarz\n\nimport type {\n Point,\n MultiPoint,\n LineString,\n MultiLineString,\n Polygon,\n MultiPolygon,\n GeometryCollection,\n Geometry\n} from '@loaders.gl/schema';\n\nimport {BinaryWriter} from '../../utils/binary-writer';\nimport {WKBGeometryType} from './helpers/wkb-types';\n\ntype TWKBPrecision = {\n xy: number;\n z: number;\n m: number;\n xyFactor: number;\n zFactor: number;\n mFactor: number;\n};\n\ntype TWKBEncoderContext = TWKBPrecision & {\n hasZ?: boolean;\n hasM?: boolean;\n};\n\nexport function convertGeometryToTWKB(\n geometry: Geometry,\n options?: {hasZ?: boolean; hasM?: boolean}\n): ArrayBuffer {\n const writer = new BinaryWriter(0, true);\n\n const context: TWKBEncoderContext = {\n ...getTwkbPrecision(5, 0, 0),\n hasZ: options?.hasZ,\n hasM: options?.hasM\n };\n\n encodeGeometry(writer, geometry, context);\n\n // TODO - we need to slice it?\n return writer.arrayBuffer;\n}\n\nfunction encodeGeometry(writer: BinaryWriter, geometry: Geometry, context: TWKBEncoderContext) {\n switch (geometry.type) {\n case 'Point':\n return encodePoint(writer, context, geometry);\n case 'LineString':\n return encodeLineString(writer, context, geometry);\n case 'Polygon':\n return encodePolygon(writer, context, geometry);\n case 'MultiPoint':\n return encodeMultiPoint(writer, context, geometry);\n case 'MultiLineString':\n return encodeMultiLineString(writer, context, geometry);\n case 'MultiPolygon':\n return encodeMultiPolygon(writer, context, geometry);\n case 'GeometryCollection':\n return encodeGeometryCollection(writer, context, geometry);\n default:\n throw new Error('unsupported geometry type');\n }\n}\n\nfunction encodePoint(writer: BinaryWriter, context: TWKBEncoderContext, point: Point): void {\n const isEmpty =\n point.coordinates.length === 0 || point[0] === 'undefined' || point[1] === 'undefined';\n\n writeTwkbHeader(writer, context, WKBGeometryType.Point, isEmpty);\n\n if (!isEmpty) {\n const previousPoint = [0, 0, 0, 0];\n writeTwkbPoint(writer, context, point.coordinates, previousPoint);\n }\n}\n\nfunction encodeLineString(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n lineString: LineString\n): ArrayBuffer {\n const points = lineString.coordinates;\n const isEmpty = points.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.LineString, isEmpty);\n\n if (!isEmpty) {\n writer.writeVarInt(points.length);\n const previousPoint = [0, 0, 0, 0];\n for (const point of points) {\n writeTwkbPoint(writer, context, point, previousPoint);\n }\n }\n\n return writer.arrayBuffer;\n}\n\nfunction encodePolygon(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n polygon: Polygon\n): ArrayBuffer {\n const polygonRings = polygon.coordinates;\n\n const isEmpty = polygonRings.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.Polygon, isEmpty);\n\n if (!isEmpty) {\n writer.writeVarInt(polygonRings.length);\n\n const previousPoint = [0, 0, 0, 0];\n for (const ring of polygonRings) {\n writer.writeVarInt(ring.length);\n for (const point of ring) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n\n return writer.arrayBuffer;\n}\n\nfunction encodeMultiPoint(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n multiPoint: MultiPoint\n): void {\n const points = multiPoint.coordinates;\n const isEmpty = points.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.MultiPoint, isEmpty);\n\n if (!isEmpty) {\n writer.writeVarInt(points.length);\n\n const previousPoint = [0, 0, 0, 0];\n for (let i = 0; i < points.length; i++) {\n writeTwkbPoint(writer, context, previousPoint, points[i]);\n }\n }\n}\n\nfunction encodeMultiLineString(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n multiLineStrings: MultiLineString\n): ArrayBuffer {\n const lineStrings = multiLineStrings.coordinates;\n const isEmpty = lineStrings.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.MultiLineString, isEmpty);\n\n if (!isEmpty) {\n writer.writeVarInt(lineStrings.length);\n\n const previousPoint = [0, 0, 0, 0];\n for (const lineString of lineStrings) {\n writer.writeVarInt(lineString.length);\n\n for (const point of lineString) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n\n return writer.arrayBuffer;\n}\n\nfunction encodeMultiPolygon(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n multiPolygon: MultiPolygon\n): void {\n const {coordinates} = multiPolygon;\n const isEmpty = coordinates.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.MultiPolygon, isEmpty);\n\n if (!isEmpty) {\n const polygons = coordinates;\n writer.writeVarInt(polygons.length);\n\n const previousPoint = [0, 0, 0, 0];\n\n for (const polygonRings of polygons) {\n writer.writeVarInt(polygonRings.length);\n for (const ring of polygonRings) {\n writer.writeVarInt(ring.length);\n for (const point of ring) {\n writeTwkbPoint(writer, context, previousPoint, point);\n }\n }\n }\n }\n}\n\nfunction encodeGeometryCollection(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n geometryCollection: GeometryCollection\n): void {\n const {geometries} = geometryCollection;\n const isEmpty = geometries.length === 0;\n\n writeTwkbHeader(writer, context, WKBGeometryType.GeometryCollection, isEmpty);\n\n if (geometries.length > 0) {\n writer.writeVarInt(geometries.length);\n for (const geometry of geometries) {\n encodeGeometry(writer, geometry, context);\n }\n }\n}\n\n/**\n *\n * @param writer\n * @param context\n * @param geometryType\n * @param isEmpty\n */\nfunction writeTwkbHeader(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n geometryType: WKBGeometryType,\n isEmpty: boolean\n) {\n const type = (zigZagEncode(context.xy) << 4) + geometryType;\n let metadataHeader = context.hasZ || context.hasM ? 1 << 3 : 0;\n metadataHeader += isEmpty ? 1 << 4 : 0;\n\n writer.writeUInt8(type);\n writer.writeUInt8(metadataHeader);\n\n if (context.hasZ || context.hasM) {\n let extendedPrecision = 0;\n if (context.hasZ) {\n extendedPrecision |= 0x1;\n }\n if (context.hasM) {\n extendedPrecision |= 0x2;\n }\n writer.writeUInt8(extendedPrecision);\n }\n}\n\n/**\n * Write one point to array buffer. ZigZagEncoding the delta fdrom the previous point. Mutates previousPoint.\n * @param writer\n * @param context\n * @param previousPoint - Mutated by this function\n * @param point\n */\nfunction writeTwkbPoint(\n writer: BinaryWriter,\n context: TWKBEncoderContext,\n point: number[],\n previousPoint: number[]\n): void {\n const x = point[0] * context.xyFactor;\n const y = point[1] * context.xyFactor;\n const z = point[2] * context.zFactor;\n const m = point[3] * context.mFactor;\n\n writer.writeVarInt(zigZagEncode(x - previousPoint[0]));\n writer.writeVarInt(zigZagEncode(y - previousPoint[1]));\n if (context.hasZ) {\n writer.writeVarInt(zigZagEncode(z - previousPoint[2]));\n }\n if (context.hasM) {\n writer.writeVarInt(zigZagEncode(m - previousPoint[3]));\n }\n\n previousPoint[0] = x;\n previousPoint[1] = y;\n previousPoint[2] = z;\n previousPoint[3] = m;\n}\n\n// HELPERS\n\nfunction zigZagEncode(value: number): number {\n return (value << 1) ^ (value >> 31);\n}\n\nfunction getTwkbPrecision(\n xyPrecision: number,\n zPrecision: number,\n mPrecision: number\n): TWKBPrecision {\n return {\n xy: xyPrecision,\n z: zPrecision,\n m: mPrecision,\n xyFactor: Math.pow(10, xyPrecision),\n zFactor: Math.pow(10, zPrecision),\n mFactor: Math.pow(10, mPrecision)\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n\n/* eslint-disable no-console */ // TODO switch to options.log\n\nexport type ParseWKTCRSOptions = {\n sort?: boolean;\n keywords?: string[];\n raw?: boolean;\n debug?: boolean;\n};\n\nexport type WKTCRS = any;\n\n/**\n *\n * @param wkt\n * @param options\n * @returns\n */\nexport function parseWKTCRS(wkt: string, options?: ParseWKTCRSOptions): WKTCRS {\n if (options?.debug) {\n console.log('[wktcrs] parse starting with\\n', wkt);\n }\n\n // move all keywords into first array item slot\n // from PARAM[12345, 67890] to [\"PARAM\", 12345, 67890]\n wkt = wkt.replace(/[A-Z][A-Z\\d_]+\\[/gi, (match) => `[\"${match.substr(0, match.length - 1)}\",`);\n\n // wrap variables in strings\n // from [...,NORTH] to [...,\"NORTH\"]\n wkt = wkt.replace(/, ?([A-Z][A-Z\\d_]+[,\\]])/gi, (match, p1) => {\n const varname = p1.substr(0, p1.length - 1);\n return ',' + `\"${options?.raw ? 'raw:' : ''}${varname}\"${p1[p1.length - 1]}`;\n });\n\n if (options?.raw) {\n // replace all numbers with strings\n wkt = wkt.replace(/, {0,2}(-?[\\.\\d]+)(?=,|\\])/g, function (match, p1) {\n return ',' + `\"${options?.raw ? 'raw:' : ''}${p1}\"`;\n });\n }\n\n // str should now be valid JSON\n if (options?.debug) {\n console.log(`[wktcrs] json'd wkt: '${wkt}'`);\n }\n\n let data;\n try {\n data = JSON.parse(wkt);\n } catch (error) {\n console.error(`[wktcrs] failed to parse '${wkt}'`);\n throw error;\n }\n\n if (options?.debug) {\n console.log(`[wktcrs] json parsed: '${wkt}'`);\n }\n\n function process(data, parent) {\n const kw = data[0];\n\n // after removing the first element with .shift()\n // data is now just an array of attributes\n\n data.forEach(function (it) {\n if (Array.isArray(it)) {\n process(it, data);\n }\n });\n\n const kwarr = `MULTIPLE_${kw}`;\n\n if (kwarr in parent) {\n parent[kwarr].push(data);\n } else if (kw in parent) {\n parent[kwarr] = [parent[kw], data];\n delete parent[kw];\n } else {\n parent[kw] = data;\n }\n return parent;\n }\n\n const result = process(data, [data]);\n if (options?.debug) {\n console.log('[wktcrs] parse returning', result);\n }\n\n if (options?.sort) {\n sort(result, options);\n }\n\n return result;\n}\n\nfunction sort(data: string[], options?: {keywords?: string[]}) {\n const keys = Object.keys(data).filter((k) => !/\\d+/.test(k));\n\n const keywords: string[] = options?.keywords || [];\n if (!options?.keywords) {\n // try to find multiples\n const counts = {};\n if (Array.isArray(data)) {\n data.forEach((it) => {\n if (Array.isArray(it) && it.length >= 2 && typeof it[1] === 'string') {\n const k = it[0];\n if (!counts[k]) counts[k] = 0;\n counts[k]++;\n }\n });\n for (const k in counts) {\n if (counts[k] > 0) keywords.push(k);\n }\n }\n }\n\n keys.forEach((key) => {\n data[key] = sort(data[key]);\n });\n\n keywords.forEach((key) => {\n const indices: number[] = [];\n const params: string[] = [];\n\n data.forEach((item, i) => {\n if (Array.isArray(item) && item[0] === key) {\n indices.push(i);\n params.push(item);\n }\n });\n\n params.sort((a, b) => {\n a = a[1].toString();\n b = b[1].toString();\n return a < b ? -1 : a > b ? 1 : 0;\n });\n\n // replace in order\n params.forEach((param, i) => {\n data[indices[i]] = param;\n });\n });\n\n return data;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// parse-wkt-crs was forked from https://github.com/DanielJDufour/wkt-crs under Creative Commons CC0 1.0 license.\n\nimport type {WKTCRS} from './parse-wkt-crs';\n\nexport type EncodeWKTCRSOptions = {\n debug?: boolean;\n};\n\n/**\n * convert JSON representation of Well-Known Text\n * back to standard Well-Known Text\n */\nexport function encodeWKTCRS(wkt: WKTCRS, options?: EncodeWKTCRSOptions): string {\n if (Array.isArray(wkt) && wkt.length === 1 && Array.isArray(wkt[0])) {\n wkt = wkt[0]; // ignore first extra wrapper array\n }\n\n const [kw, ...attrs] = wkt;\n const str = `${kw}[${attrs\n .map((attr) => {\n if (Array.isArray(attr)) {\n return encodeWKTCRS(attr, options);\n } else if (typeof attr === 'number') {\n return attr.toString();\n } else if (typeof attr === 'string') {\n // can't automatically convert all caps to varibale\n // because EPSG is string in AUTHORITY[\"EPSG\", ...]\n if (attr.startsWith('raw:')) {\n // convert \"raw:NORTH\" to NORTH\n return attr.replace('raw:', '');\n }\n return `\"${attr}\"`;\n }\n throw new Error(`[wktcrs] unexpected attribute \"${attr}\"`);\n })\n .join(',')}]`;\n return str;\n}\n", "// 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 type {BinaryFeatureCollection} from '@loaders.gl/schema';\nimport type {GeoArrowEncoding} from '@loaders.gl/geoarrow';\nimport {updateBoundsFromGeoArrowSamples} from '@loaders.gl/geoarrow';\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: BinaryFeatureCollection[];\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 geometryIndexes: 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\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 convertGeoArrowToBinaryFeatureCollection(\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: BinaryFeatureCollection[] = [];\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 BinaryFeatureCollection 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 * 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\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(\n binaryGeometries: BinaryFeatureCollection[]\n): number[][] {\n const globalMeanCenters: number[][] = [];\n binaryGeometries.forEach((binaryGeometry: BinaryFeatureCollection) => {\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 geometryIndexes = new Uint16Array(polygonOffset.length);\n for (let i = 0; i < polygonOffset.length; i++) {\n geometryIndexes[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(geometryIndexes, geomOffset, flatCoordinateArray, nDim)\n : null;\n\n return {\n featureIds,\n nDim,\n flatCoordinateArray,\n geomOffset,\n geometryIndexes,\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 // geometryIndexes is not needed for line string\n const geometryIndexes = 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 geometryIndexes\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 geometryIndexes = 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 geometryIndexes\n };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\n// Forked from https://github.com/jessetane/hex-transcoder under MIT license\n\nconst alphabet = '0123456789abcdef';\nconst encodeLookup: string[] = [];\nconst decodeLookup: number[] = [];\n\nfor (let i = 0; i < 256; i++) {\n encodeLookup[i] = alphabet[(i >> 4) & 0xf] + alphabet[i & 0xf];\n if (i < 16) {\n if (i < 10) {\n decodeLookup[0x30 + i] = i;\n } else {\n decodeLookup[0x61 - 10 + i] = i;\n }\n }\n}\n\n/**\n * Encode a Uint8Array to a hex string\n *\n * @param array Bytes to encode to string\n * @return hex string\n */\nexport function encodeHex(array: Uint8Array): string {\n const length = array.length;\n let string = '';\n let i = 0;\n while (i < length) {\n string += encodeLookup[array[i++]];\n }\n return string;\n}\n\n/**\n * Decodes a hex string to a Uint8Array\n *\n * @param string hex string to decode to Uint8Array\n * @return Uint8Array\n */\nexport function decodeHex(string: string): Uint8Array {\n const sizeof = string.length >> 1;\n const length = sizeof << 1;\n const array = new Uint8Array(sizeof);\n let n = 0;\n let i = 0;\n while (i < length) {\n array[n++] = (decodeLookup[string.charCodeAt(i++)] << 4) | decodeLookup[string.charCodeAt(i++)];\n }\n return array;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["flattened", "coordinates", "primitivePolygonIndices", "WKBGeometryType", "index", "type", "cumulativeSum", "parsePoint", "parseLineString", "parsePolygon", "parseMultiPoint", "parseMultiLineString", "parseMultiPolygon", "coords", "import_schema_utils", "import_geoarrow", "parseGeometry", "import_polygon", "type", "data", "type", "parseGeometry", "type", "parsePoint", "parseLineString", "parsePolygon", "parseMultiPoint", "parseMultiLineString", "parseMultiPolygon", "parseGeometryCollection", "encodePoint", "encodeLineString", "encodePolygon", "encodeMultiPoint", "encodeMultiLineString", "encodeMultiPolygon", "encodeGeometryCollection", "type", "data", "import_polygon", "import_geoarrow", "BinaryGeometryType"]
|
|
7
7
|
}
|