{
  "version": 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"],
  "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"],
  "mappings": "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",
  "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"]
}
