@deck.gl/geo-layers 8.9.17 → 8.10.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/dist.dev.js +27 -24
  2. package/dist/es5/h3-layers/h3-cluster-layer.js +1 -1
  3. package/dist/es5/h3-layers/h3-cluster-layer.js.map +1 -1
  4. package/dist/es5/h3-layers/h3-hexagon-layer.js +23 -21
  5. package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
  6. package/dist/esm/h3-layers/h3-cluster-layer.js +2 -2
  7. package/dist/esm/h3-layers/h3-cluster-layer.js.map +1 -1
  8. package/dist/esm/h3-layers/h3-hexagon-layer.js +15 -13
  9. package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
  10. package/dist.min.js +8 -8
  11. package/package.json +3 -3
  12. package/src/h3-layers/h3-cluster-layer.ts +2 -2
  13. package/src/h3-layers/h3-hexagon-layer.ts +24 -21
  14. package/typed/geo-cell-layer/GeoCellLayer.js +49 -0
  15. package/typed/great-circle-layer/great-circle-layer.js +29 -0
  16. package/typed/h3-layers/h3-cluster-layer.js +33 -0
  17. package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
  18. package/typed/h3-layers/h3-hexagon-layer.js +251 -0
  19. package/typed/imagery-layer/imagery-layer.d.ts +53 -0
  20. package/typed/imagery-layer/imagery-layer.d.ts.map +1 -0
  21. package/typed/index.js +33 -0
  22. package/typed/mesh-layer/mesh-layer-fragment.glsl.js +55 -0
  23. package/typed/mesh-layer/mesh-layer-vertex.glsl.js +80 -0
  24. package/typed/mesh-layer/mesh-layer.js +110 -0
  25. package/typed/mvt-layer/coordinate-transform.js +41 -0
  26. package/typed/mvt-layer/find-index-binary.js +96 -0
  27. package/typed/mvt-layer/mvt-layer.js +297 -0
  28. package/typed/quadkey-layer/quadkey-layer.js +18 -0
  29. package/typed/quadkey-layer/quadkey-utils.js +26 -0
  30. package/typed/s2-layer/s2-geometry.js +123 -0
  31. package/typed/s2-layer/s2-layer.js +37 -0
  32. package/typed/s2-layer/s2-utils.js +88 -0
  33. package/typed/terrain-layer/terrain-layer.js +226 -0
  34. package/typed/tile-3d-layer/tile-3d-layer.js +294 -0
  35. package/typed/tile-layer/tile-2d-header.js +113 -0
  36. package/typed/tile-layer/tile-2d-traversal.js +181 -0
  37. package/typed/tile-layer/tile-layer.js +192 -0
  38. package/typed/tile-layer/tileset-2d.d.ts.map +1 -1
  39. package/typed/tile-layer/tileset-2d.js +399 -0
  40. package/typed/tile-layer/types.js +1 -0
  41. package/typed/tile-layer/utils.d.ts +1 -1
  42. package/typed/tile-layer/utils.d.ts.map +1 -1
  43. package/typed/tile-layer/utils.js +197 -0
  44. package/typed/trips-layer/trips-layer.js +92 -0
  45. package/typed/tile-3d-layer/utils.d.ts +0 -3
  46. package/typed/tile-3d-layer/utils.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/h3-layers/h3-hexagon-layer.ts"],"names":["h3ToGeoBoundary","h3GetResolution","h3ToGeo","geoToH3","h3IsPentagon","h3Distance","edgeLength","lerp","CompositeLayer","createIterable","ColumnLayer","PolygonLayer","UPDATE_THRESHOLD_KM","normalizeLongitudes","vertices","refLng","undefined","pt","deltaLng","scalePolygon","hexId","factor","lat","lng","actualCount","length","vertexCount","i","getHexagonCentroid","getHexagon","object","objectInfo","hexagonId","h3ToPolygon","coverage","flattenPolygon","positions","Float64Array","mergeTriggers","trigger","defaultProps","highPrecision","type","min","max","value","centerHexagon","x","hexagon","extruded","H3HexagonLayer","initializeState","_checkH3Lib","state","edgeLengthKM","resolution","shouldUpdateState","changeFlags","_shouldUseHighPrecision","propsOrDataChanged","somethingChanged","updateState","props","dataChanged","updateTriggersChanged","dataProps","_calculateH3DataProps","setState","_updateVertices","context","viewport","hasPentagon","hasMultipleRes","iterable","data","index","hexResolution","Boolean","centerHex","hex","latitude","longitude","distance","unitsPerMeter","distanceScales","centerLat","centerLng","centerX","centerY","projectFlat","map","p","worldPosition","renderLayers","_renderPolygonLayer","_renderColumnLayer","_getForwardProps","elevationScale","material","wireframe","stroked","filled","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","getFillColor","getElevation","getLineColor","getLineWidth","transitions","updateTriggers","SubLayerClass","getSubLayerClass","forwardProps","getPolygon","getSubLayerProps","id","_normalize","_windingOrder","positionFormat","getPosition","flatShading","diskResolution","radius","bind"],"mappings":"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","sourcesContent":["import {\n h3ToGeoBoundary,\n h3GetResolution,\n h3ToGeo,\n geoToH3,\n h3IsPentagon,\n h3Distance,\n edgeLength,\n H3Index\n} from 'h3-js';\nimport {lerp} from '@math.gl/core';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: number[][], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3Index, vertices: number[][], factor: number): void {\n const [lat, lng] = h3ToGeo(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `h3ToGeoBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\nfunction getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = h3ToGeo(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = h3ToGeoBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nfunction flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: x => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = any> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = h3GetResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (h3IsPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? edgeLength(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || geoToH3(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n const distance = h3Distance(centerHex, hex);\n // h3Distance returns a negative number if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n if (distance >= 0 && distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = h3ToGeo(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n"],"file":"h3-hexagon-layer.js"}
1
+ {"version":3,"sources":["../../../src/h3-layers/h3-hexagon-layer.ts"],"names":["cellToBoundary","getResolution","cellToLatLng","latLngToCell","isPentagon","gridDistance","getHexagonEdgeLengthAvg","lerp","CompositeLayer","createIterable","ColumnLayer","PolygonLayer","UPDATE_THRESHOLD_KM","normalizeLongitudes","vertices","refLng","undefined","pt","deltaLng","scalePolygon","hexId","factor","lat","lng","actualCount","length","vertexCount","i","getHexagonCentroid","getHexagon","object","objectInfo","hexagonId","h3ToPolygon","coverage","flattenPolygon","positions","Float64Array","mergeTriggers","trigger","defaultProps","highPrecision","type","min","max","value","centerHexagon","x","hexagon","extruded","H3HexagonLayer","initializeState","_checkH3Lib","state","edgeLengthKM","resolution","shouldUpdateState","changeFlags","_shouldUseHighPrecision","propsOrDataChanged","somethingChanged","updateState","props","dataChanged","updateTriggersChanged","dataProps","_calculateH3DataProps","setState","_updateVertices","context","viewport","hasPentagon","hasMultipleRes","iterable","data","index","hexResolution","Boolean","centerHex","hex","latitude","longitude","distance","unitsPerMeter","distanceScales","centerLat","centerLng","centerX","centerY","projectFlat","map","p","worldPosition","renderLayers","_renderPolygonLayer","_renderColumnLayer","_getForwardProps","elevationScale","material","wireframe","stroked","filled","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","getFillColor","getElevation","getLineColor","getLineWidth","transitions","updateTriggers","SubLayerClass","getSubLayerClass","forwardProps","getPolygon","getSubLayerProps","id","_normalize","_windingOrder","positionFormat","getPosition","flatShading","diskResolution","radius","bind"],"mappings":"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","sourcesContent":["import {\n cellToBoundary,\n getResolution,\n cellToLatLng,\n latLngToCell,\n isPentagon,\n gridDistance,\n getHexagonEdgeLengthAvg,\n H3Index\n} from 'h3-js';\nimport {lerp} from '@math.gl/core';\nimport {\n AccessorFunction,\n CompositeLayer,\n createIterable,\n Layer,\n LayersList,\n UpdateParameters,\n WebMercatorViewport,\n DefaultProps\n} from '@deck.gl/core';\nimport {ColumnLayer, PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\n// There is a cost to updating the instanced geometries when using highPrecision: false\n// This constant defines the distance between two hexagons that leads to \"significant\n// distortion.\" Smaller value makes the column layer more sensitive to viewport change.\nconst UPDATE_THRESHOLD_KM = 10;\n\n// normalize longitudes w.r.t center (refLng), when not provided first vertex\nexport function normalizeLongitudes(vertices: number[][], refLng?: number): void {\n refLng = refLng === undefined ? vertices[0][0] : refLng;\n for (const pt of vertices) {\n const deltaLng = pt[0] - refLng;\n if (deltaLng > 180) {\n pt[0] -= 360;\n } else if (deltaLng < -180) {\n pt[0] += 360;\n }\n }\n}\n\n// scale polygon vertices w.r.t center (hexId)\nexport function scalePolygon(hexId: H3Index, vertices: number[][], factor: number): void {\n const [lat, lng] = cellToLatLng(hexId);\n const actualCount = vertices.length;\n\n // normalize with respect to center\n normalizeLongitudes(vertices, lng);\n\n // `cellToBoundary` returns same array object for first and last vertex (closed polygon),\n // if so skip scaling the last vertex\n const vertexCount = vertices[0] === vertices[actualCount - 1] ? actualCount - 1 : actualCount;\n for (let i = 0; i < vertexCount; i++) {\n vertices[i][0] = lerp(lng, vertices[i][0], factor);\n vertices[i][1] = lerp(lat, vertices[i][1], factor);\n }\n}\n\nfunction getHexagonCentroid(getHexagon, object, objectInfo) {\n const hexagonId = getHexagon(object, objectInfo);\n const [lat, lng] = cellToLatLng(hexagonId);\n return [lng, lat];\n}\n\nfunction h3ToPolygon(hexId: H3Index, coverage: number = 1): number[][] {\n const vertices = cellToBoundary(hexId, true);\n\n if (coverage !== 1) {\n // scale and normalize vertices w.r.t to center\n scalePolygon(hexId, vertices, coverage);\n } else {\n // normalize w.r.t to start vertex\n normalizeLongitudes(vertices);\n }\n\n return vertices;\n}\n\nfunction flattenPolygon(vertices: number[][]): Float64Array {\n const positions = new Float64Array(vertices.length * 2);\n let i = 0;\n for (const pt of vertices) {\n positions[i++] = pt[0];\n positions[i++] = pt[1];\n }\n return positions;\n}\n\nfunction mergeTriggers(getHexagon, coverage) {\n let trigger;\n if (getHexagon === undefined || getHexagon === null) {\n trigger = coverage;\n } else if (typeof getHexagon === 'object') {\n trigger = {...getHexagon, coverage};\n } else {\n trigger = {getHexagon, coverage};\n }\n return trigger;\n}\n\nconst defaultProps: DefaultProps<H3HexagonLayerProps> = {\n ...PolygonLayer.defaultProps,\n highPrecision: 'auto',\n coverage: {type: 'number', min: 0, max: 1, value: 1},\n centerHexagon: null,\n getHexagon: {type: 'accessor', value: x => x.hexagon},\n extruded: true\n};\n\n/** All properties supported by H3HexagonLayer */\nexport type H3HexagonLayerProps<DataT = any> = _H3HexagonLayerProps<DataT> &\n PolygonLayerProps<DataT>;\n\n/** Props added by the H3HexagonLayer */\ntype _H3HexagonLayerProps<DataT> = {\n /**\n * Whether or not draw hexagons with high precision.\n * @default 'auto'\n */\n highPrecision?: boolean | 'auto';\n /**\n * Coverage of hexagon in cell.\n * @default 1\n */\n coverage?: number;\n /**\n * Center hexagon that best represents the shape of the set. If not specified, the hexagon closest to the center of the viewport is used.\n */\n centerHexagon?: H3Index | null;\n /**\n * Called for each data object to retrieve the quadkey string identifier.\n *\n * By default, it reads `hexagon` property of data object.\n */\n getHexagon?: AccessorFunction<DataT, string>;\n /**\n * Whether to extrude polygons.\n * @default true\n */\n extruded?: boolean;\n};\n\n/**\n * Render hexagons from the [H3](https://h3geo.org/) geospatial indexing system.\n */\nexport default class H3HexagonLayer<\n DataT = any,\n ExtraPropsT extends {} = {}\n> extends CompositeLayer<ExtraPropsT & Required<H3HexagonLayerProps<DataT>>> {\n static defaultProps = defaultProps;\n static layerName = 'H3HexagonLayer';\n\n // See `main/bundle.ts`\n static _checkH3Lib = () => {};\n\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n this.state = {\n edgeLengthKM: 0,\n resolution: -1\n };\n }\n\n state!: {\n centerHex?: H3Index;\n edgeLengthKM: number;\n hasMultipleRes?: boolean;\n hasPentagon?: boolean;\n resolution: number;\n vertices?: number[][];\n };\n\n shouldUpdateState({changeFlags}: UpdateParameters<this>): boolean {\n return this._shouldUseHighPrecision()\n ? changeFlags.propsOrDataChanged\n : changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}: UpdateParameters<this>): void {\n if (\n props.highPrecision !== true &&\n (changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged && changeFlags.updateTriggersChanged.getHexagon))\n ) {\n const dataProps = this._calculateH3DataProps();\n this.setState(dataProps);\n }\n\n this._updateVertices(this.context.viewport as WebMercatorViewport);\n }\n\n private _calculateH3DataProps() {\n let resolution = -1;\n let hasPentagon = false;\n let hasMultipleRes = false;\n\n const {iterable, objectInfo} = createIterable(this.props.data);\n for (const object of iterable) {\n objectInfo.index++;\n const hexId = this.props.getHexagon(object, objectInfo);\n // Take the resolution of the first hex\n const hexResolution = getResolution(hexId);\n if (resolution < 0) {\n resolution = hexResolution;\n if (!this.props.highPrecision) break;\n } else if (resolution !== hexResolution) {\n hasMultipleRes = true;\n break;\n }\n if (isPentagon(hexId)) {\n hasPentagon = true;\n break;\n }\n }\n\n return {\n resolution,\n edgeLengthKM: resolution >= 0 ? getHexagonEdgeLengthAvg(resolution, 'km') : 0,\n hasMultipleRes,\n hasPentagon\n };\n }\n\n private _shouldUseHighPrecision(): boolean {\n if (this.props.highPrecision === 'auto') {\n const {resolution, hasPentagon, hasMultipleRes} = this.state;\n const {viewport} = this.context;\n return (\n Boolean(viewport?.resolution) ||\n hasMultipleRes ||\n hasPentagon ||\n (resolution >= 0 && resolution <= 5)\n );\n }\n\n return this.props.highPrecision;\n }\n\n private _updateVertices(viewport: WebMercatorViewport): void {\n if (this._shouldUseHighPrecision()) {\n return;\n }\n const {resolution, edgeLengthKM, centerHex} = this.state;\n if (resolution < 0) {\n return;\n }\n const hex =\n this.props.centerHexagon || latLngToCell(viewport.latitude, viewport.longitude, resolution);\n if (centerHex === hex) {\n return;\n }\n if (centerHex) {\n try {\n const distance = gridDistance(centerHex, hex);\n if (distance * edgeLengthKM < UPDATE_THRESHOLD_KM) {\n return;\n }\n } catch {\n // gridDistance throws if the distance could not be computed\n // due to the two indexes very far apart or on opposite sides of a pentagon.\n }\n }\n\n const {unitsPerMeter} = viewport.distanceScales;\n\n let vertices = h3ToPolygon(hex);\n const [centerLat, centerLng] = cellToLatLng(hex);\n\n const [centerX, centerY] = viewport.projectFlat([centerLng, centerLat]);\n vertices = vertices.map(p => {\n const worldPosition = viewport.projectFlat(p);\n return [\n (worldPosition[0] - centerX) / unitsPerMeter[0],\n (worldPosition[1] - centerY) / unitsPerMeter[1]\n ];\n });\n\n this.setState({centerHex: hex, vertices});\n }\n\n renderLayers(): Layer | null | LayersList {\n return this._shouldUseHighPrecision() ? this._renderPolygonLayer() : this._renderColumnLayer();\n }\n\n private _getForwardProps() {\n const {\n elevationScale,\n material,\n coverage,\n extruded,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n getFillColor,\n getElevation,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers\n } = this.props;\n\n return {\n elevationScale,\n extruded,\n coverage,\n wireframe,\n stroked,\n filled,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n material,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth,\n transitions,\n updateTriggers: {\n getFillColor: updateTriggers.getFillColor,\n getElevation: updateTriggers.getElevation,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n } as {\n getFillColor: any;\n getElevation: any;\n getLineColor: any;\n getLineWidth: any;\n getPolygon?: any;\n getPosition?: any;\n }\n };\n }\n\n private _renderPolygonLayer(): PolygonLayer {\n const {data, getHexagon, updateTriggers, coverage} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell-hifi', PolygonLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPolygon = mergeTriggers(updateTriggers.getHexagon, coverage);\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell-hifi',\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n _normalize: false,\n _windingOrder: 'CCW',\n positionFormat: 'XY',\n getPolygon: (object, objectInfo) => {\n const hexagonId = getHexagon(object, objectInfo);\n return flattenPolygon(h3ToPolygon(hexagonId, coverage));\n }\n }\n );\n }\n\n private _renderColumnLayer(): ColumnLayer {\n const {data, getHexagon, updateTriggers} = this.props;\n\n const SubLayerClass = this.getSubLayerClass('hexagon-cell', ColumnLayer);\n const forwardProps = this._getForwardProps();\n forwardProps.updateTriggers.getPosition = updateTriggers.getHexagon;\n\n return new SubLayerClass(\n forwardProps,\n this.getSubLayerProps({\n id: 'hexagon-cell',\n flatShading: true,\n updateTriggers: forwardProps.updateTriggers\n }),\n {\n data,\n diskResolution: 6, // generate an extruded hexagon as the base geometry\n radius: 1,\n vertices: this.state.vertices,\n getPosition: getHexagonCentroid.bind(null, getHexagon)\n }\n );\n }\n}\n"],"file":"h3-hexagon-layer.js"}