@deck.gl/geo-layers 8.9.0-beta.3 → 8.9.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +196 -1689
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/es5/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +1 -0
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +6 -11
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +6 -12
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/wms-layer/wms-layer.js +0 -4
- package/dist/es5/wms-layer/wms-layer.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/h3-layers/h3-hexagon-layer.js.map +1 -1
- package/dist/esm/mesh-layer/mesh-layer.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +2 -1
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +6 -11
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +6 -12
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/wms-layer/wms-layer.js +0 -4
- package/dist/esm/wms-layer/wms-layer.js.map +1 -1
- package/dist.min.js +65 -66
- package/package.json +2 -2
- package/src/geo-cell-layer/GeoCellLayer.ts +2 -2
- package/src/h3-layers/h3-hexagon-layer.ts +2 -6
- package/src/mesh-layer/mesh-layer.ts +3 -3
- package/src/mvt-layer/mvt-layer.ts +15 -11
- package/src/tile-3d-layer/tile-3d-layer.ts +9 -8
- package/src/tile-layer/tile-layer.ts +10 -9
- package/src/wms-layer/wms-layer.ts +6 -5
- package/typed/geo-cell-layer/GeoCellLayer.d.ts +2 -2
- package/typed/geo-cell-layer/GeoCellLayer.d.ts.map +1 -1
- package/typed/h3-layers/h3-hexagon-layer.d.ts +3 -3
- package/typed/h3-layers/h3-hexagon-layer.d.ts.map +1 -1
- package/typed/mesh-layer/mesh-layer.d.ts +3 -3
- package/typed/mesh-layer/mesh-layer.d.ts.map +1 -1
- package/typed/mvt-layer/mvt-layer.d.ts +4 -4
- package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
- package/typed/tile-3d-layer/tile-3d-layer.d.ts +2 -1
- package/typed/tile-3d-layer/tile-3d-layer.d.ts.map +1 -1
- package/typed/tile-layer/tile-layer.d.ts +4 -2
- package/typed/tile-layer/tile-layer.d.ts.map +1 -1
- package/typed/wms-layer/wms-layer.d.ts +2 -1
- package/typed/wms-layer/wms-layer.d.ts.map +1 -1
- package/LICENSE +0 -19
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","info","sourceLayer","sourceTile","picked","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","id","_offset","Boolean","clone","Object","keys","some","cullRect","isTileVisible","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = any> = CompositeLayerProps<any> & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return this.state?.tileset?.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.id}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","type","value","dataComparator","urlType","equal","renderSubLayers","props","GeoJsonLayer","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","info","sourceLayer","sourceTile","picked","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","id","_offset","Boolean","clone","Object","keys","some","cullRect","isTileVisible","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n PickingInfo,\n GetPickingInfoParams,\n DefaultProps,\n FilterContext,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from '@deck.gl/core';\n\nimport type {TileLoadProps, ZRange} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n RefinementStrategy,\n STRATEGY_DEFAULT,\n Tileset2DProps\n} from '../tileset-2d';\nimport {urlType, URLTemplate, getURLFromTemplate} from '../tileset-2d';\n\nconst defaultProps: DefaultProps<TileLayerProps> = {\n TilesetClass: Tileset2D,\n data: {type: 'data', value: []},\n dataComparator: urlType.equal,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props)},\n getTileData: {type: 'function', optional: true, value: null},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null},\n onTileLoad: {type: 'function', value: tile => {}},\n onTileUnload: {type: 'function', value: tile => {}},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err)},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT = any> = CompositeLayerProps & _TileLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n data: URLTemplate;\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass?: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ) => Layer | null | LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: ((props: TileLoadProps) => Promise<DataT> | DataT) | null;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: ((tiles: Tile2DHeader<DataT>[]) => void) | null;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader<DataT>) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any, tile?) => void;\n\n /** The bounding box of the layer's data. */\n extent?: number[] | null;\n\n /** The pixel dimension of the tiles, usually a power of 2. */\n tileSize?: number;\n\n /** The max zoom level of the layer's data.\n * @default null\n */\n maxZoom?: number | null;\n\n /** The min zoom level of the layer's data.\n * @default 0\n */\n minZoom?: number | null;\n\n /** The maximum number of tiles that can be cached. */\n maxCacheSize?: number | null;\n\n /**\n * The maximum memory used for caching tiles.\n *\n * @default null\n */\n maxCacheByteSize?: number | null;\n\n /**\n * How the tile layer refines the visibility of tiles.\n *\n * @default 'best-available'\n */\n refinementStrategy?: RefinementStrategy;\n\n /** Range of minimum and maximum heights in the tile. */\n zRange?: ZRange | null;\n\n /**\n * The maximum number of concurrent getTileData calls.\n *\n * @default 6\n */\n maxRequests?: number;\n\n /**\n * This offset changes the zoom level at which the tiles are fetched.\n *\n * Needs to be an integer.\n *\n * @default 0\n */\n zoomOffset?: number;\n};\n\nexport type TiledPickingInfo<DataT = any> = PickingInfo & {\n tile?: Tile2DHeader<DataT>;\n};\n\n/**\n * The TileLayer is a composite layer that makes it possible to visualize very large datasets.\n *\n * Instead of fetching the entire dataset, it only loads and renders what's visible in the current viewport.\n */\nexport default class TileLayer<DataT = any, ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps: DefaultProps = defaultProps;\n static layerName = 'TileLayer';\n\n initializeState() {\n this.state = {\n tileset: null,\n isLoaded: false\n };\n }\n\n finalizeState() {\n this.state?.tileset?.finalize();\n }\n\n get isLoaded(): boolean {\n return this.state?.tileset?.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}): boolean {\n return changeFlags.somethingChanged;\n }\n\n updateState({changeFlags}: UpdateParameters<this>) {\n let {tileset} = this.state;\n const propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;\n const dataChanged =\n changeFlags.dataChanged ||\n (changeFlags.updateTriggersChanged &&\n (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData));\n\n if (!tileset) {\n tileset = new this.props.TilesetClass(this._getTilesetOptions());\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions());\n\n if (dataChanged) {\n // reload all tiles\n // use cached layers until new content is loaded\n tileset.reloadAll();\n } else {\n // some render options changed, regenerate sub layers now\n this.state.tileset.tiles.forEach(tile => {\n tile.layers = null;\n });\n }\n }\n\n this._updateTileset();\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = this.props;\n\n return {\n maxCacheSize,\n maxCacheByteSize,\n maxZoom,\n minZoom,\n tileSize,\n refinementStrategy,\n extent,\n maxRequests,\n zoomOffset,\n\n getTileData: this.getTileData.bind(this),\n onTileLoad: this._onTileLoad.bind(this),\n onTileError: this._onTileError.bind(this),\n onTileUnload: this._onTileUnload.bind(this)\n };\n }\n\n private _updateTileset(): void {\n const {tileset} = this.state;\n const {zRange, modelMatrix} = this.props;\n const frameNumber = tileset.update(this.context.viewport, {zRange, modelMatrix});\n const {isLoaded} = tileset;\n\n const loadingStateChanged = this.state.isLoaded !== isLoaded;\n const tilesetChanged = this.state.frameNumber !== frameNumber;\n\n if (isLoaded && (loadingStateChanged || tilesetChanged)) {\n this._onViewportLoad();\n }\n\n if (tilesetChanged) {\n // Save the tileset frame number - trigger a rerender\n this.setState({frameNumber});\n }\n // Save the loaded state - should not trigger a rerender\n this.state.isLoaded = isLoaded;\n }\n\n _onViewportLoad(): void {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile: Tile2DHeader<DataT>): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader<DataT>) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader<DataT>) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps): Promise<DataT> | DataT | null {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? getURLFromTemplate(data, tile) : null;\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (fetch && tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: DataT;\n _offset: number;\n tile: Tile2DHeader<DataT>;\n }\n ): Layer | null | LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): Partial<LayerProps> | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}: GetPickingInfoParams): TiledPickingInfo<DataT> {\n const sourceTile = (sourceLayer as any).props.tile;\n if (info.picked) {\n (info as any).tile = sourceTile;\n }\n (info as any).sourceTile = sourceTile;\n return info;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const sourceTile = (info as any).sourceTile as Tile2DHeader;\n if (sourceTile && sourceTile.layers) {\n for (const layer of sourceTile.layers) {\n layer.updateAutoHighlight(info);\n }\n }\n }\n\n renderLayers(): Layer | null | LayersList {\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.id}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer<{tile?: Tile2DHeader}>[]).map(layer =>\n layer.clone({\n tile,\n ...subLayerProps\n })\n );\n } else if (\n subLayerProps &&\n tile.layers[0] &&\n Object.keys(subLayerProps).some(\n propName => tile.layers![0].props[propName] !== subLayerProps[propName]\n )\n ) {\n tile.layers = tile.layers.map(layer => layer.clone(subLayerProps));\n }\n return tile.layers;\n });\n }\n\n filterSubLayer({layer, cullRect}: FilterContext) {\n const {tile} = (layer as Layer<{tile: Tile2DHeader}>).props;\n return this.state.tileset.isTileVisible(tile, cullRect);\n }\n}\n"],"file":"tile-layer.js"}
|
|
@@ -55,22 +55,18 @@ var defaultProps = {
|
|
|
55
55
|
},
|
|
56
56
|
onMetadataLoad: {
|
|
57
57
|
type: 'function',
|
|
58
|
-
compare: false,
|
|
59
58
|
value: function value() {}
|
|
60
59
|
},
|
|
61
60
|
onMetadataLoadError: {
|
|
62
61
|
type: 'function',
|
|
63
|
-
compare: false,
|
|
64
62
|
value: console.error
|
|
65
63
|
},
|
|
66
64
|
onImageLoadStart: {
|
|
67
65
|
type: 'function',
|
|
68
|
-
compare: false,
|
|
69
66
|
value: function value() {}
|
|
70
67
|
},
|
|
71
68
|
onImageLoad: {
|
|
72
69
|
type: 'function',
|
|
73
|
-
compare: false,
|
|
74
70
|
value: function value() {}
|
|
75
71
|
},
|
|
76
72
|
onImageLoadError: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/wms-layer/wms-layer.ts"],"names":["defaultProps","id","data","serviceType","srs","layers","type","compare","value","onMetadataLoad","onMetadataLoadError","console","error","onImageLoadStart","onImageLoad","onImageLoadError","requestId","projConverter","Proj4Projection","from","to","WMSLayer","state","_nextRequestId","lastRequestId","changeFlags","props","oldProps","viewport","context","dataChanged","imageSource","_createImageSource","_loadMetadata","debounce","loadImage","viewportChanged","bounds","image","lastRequestParameters","BitmapLayer","getSubLayerProps","_imageCoordinateSystem","COORDINATE_SYSTEM","LNGLAT","CARTESIAN","x","y","getFeatureInfoText","query_layers","info_format","featureInfo","ImageSource","url","loadOptions","Error","getMetadata","metadata","getCurrentLayer","reason","length","getBounds","width","height","getRequestId","resolution","requestParams","bbox","project","minX","minY","maxX","maxY","getImage","setState","raiseError","fn","ms","clearTimeout","_timeoutId","setTimeout","CompositeLayer"],"mappings":"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","sourcesContent":["// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {ImageSourceMetadata, ImageType, ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {Proj4Projection} from '@math.gl/proj4';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps<any> & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', compare: false, value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', compare: false, value: console.error},\n onImageLoadStart: {type: 'function', compare: false, value: () => {}},\n onImageLoad: {type: 'function', compare: false, value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\nconst projConverter = new Proj4Projection({from: 'EPSG:4326', to: 'EPSG:3857'});\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n\n _nextRequestId: number;\n _timeoutId: any;\n };\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams = {\n width,\n height,\n bbox: bounds,\n layers,\n srs\n };\n if (srs === 'EPSG:3857') {\n const [minX, minY] = projConverter.project([bounds[0], bounds[1]]);\n const [maxX, maxY] = projConverter.project([bounds[2], bounds[3]]);\n requestParams.bbox = [minX, minY, maxX, maxY];\n }\n\n try {\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n"],"file":"wms-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/wms-layer/wms-layer.ts"],"names":["defaultProps","id","data","serviceType","srs","layers","type","compare","value","onMetadataLoad","onMetadataLoadError","console","error","onImageLoadStart","onImageLoad","onImageLoadError","requestId","projConverter","Proj4Projection","from","to","WMSLayer","state","_nextRequestId","lastRequestId","changeFlags","props","oldProps","viewport","context","dataChanged","imageSource","_createImageSource","_loadMetadata","debounce","loadImage","viewportChanged","bounds","image","lastRequestParameters","BitmapLayer","getSubLayerProps","_imageCoordinateSystem","COORDINATE_SYSTEM","LNGLAT","CARTESIAN","x","y","getFeatureInfoText","query_layers","info_format","featureInfo","ImageSource","url","loadOptions","Error","getMetadata","metadata","getCurrentLayer","reason","length","getBounds","width","height","getRequestId","resolution","requestParams","bbox","project","minX","minY","maxX","maxY","getImage","setState","raiseError","fn","ms","clearTimeout","_timeoutId","setTimeout","CompositeLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA;;AAUA;;AAEA;;AACA;;;;;;;;;;AAkBA,IAAMA,YAAyC,GAAG;AAChDC,EAAAA,EAAE,EAAE,eAD4C;AAEhDC,EAAAA,IAAI,EAAE,EAF0C;AAGhDC,EAAAA,WAAW,EAAE,MAHmC;AAIhDC,EAAAA,GAAG,EAAE,MAJ2C;AAKhDC,EAAAA,MAAM,EAAE;AAACC,IAAAA,IAAI,EAAE,OAAP;AAAgBC,IAAAA,OAAO,EAAE,IAAzB;AAA+BC,IAAAA,KAAK,EAAE;AAAtC,GALwC;AAMhDC,EAAAA,cAAc,EAAE;AAACH,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAE,iBAAM,CAAE;AAAlC,GANgC;AAQhDE,EAAAA,mBAAmB,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAEG,OAAO,CAACC;AAAlC,GAR2B;AAShDC,EAAAA,gBAAgB,EAAE;AAACP,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAE,iBAAM,CAAE;AAAlC,GAT8B;AAUhDM,EAAAA,WAAW,EAAE;AAACR,IAAAA,IAAI,EAAE,UAAP;AAAmBE,IAAAA,KAAK,EAAE,iBAAM,CAAE;AAAlC,GAVmC;AAWhDO,EAAAA,gBAAgB,EAAE;AAChBT,IAAAA,IAAI,EAAE,UADU;AAEhBC,IAAAA,OAAO,EAAE,KAFO;AAIhBC,IAAAA,KAAK,EAAE,eAACQ,SAAD,EAAqBJ,KAArB;AAAA,aAAsCD,OAAO,CAACC,KAAR,CAAcA,KAAd,EAAqBI,SAArB,CAAtC;AAAA;AAJS;AAX8B,CAAlD;AAmBA,IAAMC,aAAa,GAAG,IAAIC,qBAAJ,CAAoB;AAACC,EAAAA,IAAI,EAAE,WAAP;AAAoBC,EAAAA,EAAE,EAAE;AAAxB,CAApB,CAAtB;;IAKaC,Q;;;;;;;;;;;;;;;;;;;;;WAwBX,6BAAsC;AACpC,aAAO,IAAP;AACD;;;WAED,2BAAiC;AAE/B,WAAKC,KAAL,CAAWC,cAAX,GAA4B,CAA5B;AACA,WAAKD,KAAL,CAAWE,aAAX,GAA2B,CAAC,CAA5B;AACD;;;WAED,2BAAmF;AAAA;;AAAA,UAA7DC,WAA6D,QAA7DA,WAA6D;AAAA,UAAhDC,KAAgD,QAAhDA,KAAgD;AAAA,UAAzCC,QAAyC,QAAzCA,QAAyC;AACjF,UAAOC,QAAP,GAAmB,KAAKC,OAAxB,CAAOD,QAAP;;AAGA,UAAIH,WAAW,CAACK,WAAZ,IAA2BJ,KAAK,CAACvB,WAAN,KAAsBwB,QAAQ,CAACxB,WAA9D,EAA2E;AACzE,aAAKmB,KAAL,CAAWS,WAAX,GAAyB,KAAKC,kBAAL,CAAwBN,KAAxB,CAAzB;;AAEA,aAAKO,aAAL;;AACA,aAAKC,QAAL,CAAc;AAAA,iBAAM,MAAI,CAACC,SAAL,CAAeP,QAAf,EAAyB,sBAAzB,CAAN;AAAA,SAAd,EAAsE,CAAtE;AACD,OALD,MAKO,IAAI,CAAC,sBAAUF,KAAK,CAACrB,MAAhB,EAAwBsB,QAAQ,CAACtB,MAAjC,EAAyC,CAAzC,CAAL,EAAkD;AACvD,aAAK6B,QAAL,CAAc;AAAA,iBAAM,MAAI,CAACC,SAAL,CAAeP,QAAf,EAAyB,gBAAzB,CAAN;AAAA,SAAd,EAAgE,CAAhE;AACD,OAFM,MAEA,IAAIH,WAAW,CAACW,eAAhB,EAAiC;AACtC,aAAKF,QAAL,CAAc;AAAA,iBAAM,MAAI,CAACC,SAAL,CAAeP,QAAf,EAAyB,kBAAzB,CAAN;AAAA,SAAd;AACD;AACF;;;WAED,yBAA+B,CAE9B;;;WAED,wBAA+B;AAG7B,wBAA+C,KAAKN,KAApD;AAAA,UAAOe,MAAP,eAAOA,MAAP;AAAA,UAAeC,KAAf,eAAeA,KAAf;AAAA,UAAsBC,qBAAtB,eAAsBA,qBAAtB;AAEA,aACED,KAAK,IACL,IAAIE,mBAAJ,iCACK,KAAKC,gBAAL,CAAsB;AAACxC,QAAAA,EAAE,EAAE;AAAL,OAAtB,CADL;AAEEyC,QAAAA,sBAAsB,EACpBH,qBAAqB,CAACnC,GAAtB,KAA8B,WAA9B,GACIuC,wBAAkBC,MADtB,GAEID,wBAAkBE,SAL1B;AAMER,QAAAA,MAAM,EAANA,MANF;AAOEC,QAAAA,KAAK,EAALA;AAPF,SAFF;AAYD;;;;0FAED,iBAAyBQ,CAAzB,EAAoCC,CAApC;AAAA;;AAAA;AAAA;AAAA;AAAA;AACSR,gBAAAA,qBADT,GACkC,KAAKjB,KADvC,CACSiB,qBADT;;AAAA,qBAEMA,qBAFN;AAAA;AAAA;AAAA;;AAAA;AAAA,gDAI8B,+BAAKjB,KAAL,CAAWS,WAAX,EAAuBiB,kBAJrD,0DAI8B,mFACrBT,qBADqB;AAExBU,kBAAAA,YAAY,EAAEV,qBAAqB,CAAClC,MAFZ;AAGxByC,kBAAAA,CAAC,EAADA,CAHwB;AAIxBC,kBAAAA,CAAC,EAADA,CAJwB;AAKxBG,kBAAAA,WAAW,EAAE;AALW,mBAJ9B;;AAAA;AAIUC,gBAAAA,WAJV;AAAA,iDAWWA,WAXX;;AAAA;AAAA,iDAaS,EAbT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAgBA,4BAAmBzB,KAAnB,EAAsD;AACpD,UAAIA,KAAK,CAACxB,IAAN,YAAsBkD,gBAA1B,EAAuC;AACrC,eAAO1B,KAAK,CAACxB,IAAb;AACD;;AAED,UAAI,OAAOwB,KAAK,CAACxB,IAAb,KAAsB,QAA1B,EAAoC;AAClC,eAAO,4BAAkB;AACvBmD,UAAAA,GAAG,EAAE3B,KAAK,CAACxB,IADY;AAEvBoD,UAAAA,WAAW,EAAE5B,KAAK,CAAC4B,WAFI;AAGvBhD,UAAAA,IAAI,EAAEoB,KAAK,CAACvB;AAHW,SAAlB,CAAP;AAKD;;AAED,YAAM,IAAIoD,KAAJ,CAAU,oCAAV,CAAN;AACD;;;;qFAGD;AAAA;;AAAA;AAAA;AAAA;AAAA;AACSxB,gBAAAA,WADT,GACwB,KAAKT,KAD7B,CACSS,WADT;AAAA;AAAA;AAAA,uBAG2BA,WAAW,CAACyB,WAAZ,EAH3B;;AAAA;AAGUC,gBAAAA,SAHV;;AAMI,oBAAI,KAAKnC,KAAL,CAAWS,WAAX,KAA2BA,WAA/B,EAA4C;AAC1C,gDAAK2B,eAAL,kFAAwBhC,KAAxB,CAA8BjB,cAA9B,CAA6CgD,SAA7C;AACD;;AARL;AAAA;;AAAA;AAAA;AAAA;AAUI,+CAAKC,eAAL,oFAAwBhC,KAAxB,CAA8BhB,mBAA9B;;AAVJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;iFAeA,kBAAgBkB,QAAhB,EAAoC+B,MAApC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,8BACgC,KAAKjC,KADrC,EACSrB,MADT,eACSA,MADT,EACiBF,WADjB,eACiBA,WADjB;;AAAA,sBAIMA,WAAW,KAAK,KAAhB,IAAyBE,MAAM,CAACuD,MAAP,KAAkB,CAJjD;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAQQvB,gBAAAA,MARR,GAQiBT,QAAQ,CAACiC,SAAT,EARjB;AASSC,gBAAAA,KATT,GAS0BlC,QAT1B,CASSkC,KATT,EASgBC,MAThB,GAS0BnC,QAT1B,CASgBmC,MAThB;AAUQ/C,gBAAAA,SAVR,GAUoB,KAAKgD,YAAL,EAVpB;AAWO5D,gBAAAA,GAXP,GAWc,KAAKsB,KAXnB,CAWOtB,GAXP;;AAYE,oBAAIA,GAAG,KAAK,MAAZ,EAAoB;AAElBA,kBAAAA,GAAG,GAAGwB,QAAQ,CAACqC,UAAT,GAAsB,WAAtB,GAAoC,WAA1C;AACD;;AACKC,gBAAAA,aAhBR,GAgBwB;AACpBJ,kBAAAA,KAAK,EAALA,KADoB;AAEpBC,kBAAAA,MAAM,EAANA,MAFoB;AAGpBI,kBAAAA,IAAI,EAAE9B,MAHc;AAIpBhC,kBAAAA,MAAM,EAANA,MAJoB;AAKpBD,kBAAAA,GAAG,EAAHA;AALoB,iBAhBxB;;AAuBE,oBAAIA,GAAG,KAAK,WAAZ,EAAyB;AAAA,0CACFa,aAAa,CAACmD,OAAd,CAAsB,CAAC/B,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAAtB,CADE,mFAChBgC,IADgB,8BACVC,IADU;AAAA,2CAEFrD,aAAa,CAACmD,OAAd,CAAsB,CAAC/B,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAAtB,CAFE,oFAEhBkC,IAFgB,8BAEVC,IAFU;AAGvBN,kBAAAA,aAAa,CAACC,IAAd,GAAqB,CAACE,IAAD,EAAOC,IAAP,EAAaC,IAAb,EAAmBC,IAAnB,CAArB;AACD;;AA3BH;AA8BI,qBAAK9C,KAAL,CAAWb,gBAAX,CAA4BG,SAA5B;AA9BJ;AAAA,uBAgCwB,KAAKM,KAAL,CAAWS,WAAX,CAAuB0C,QAAvB,CAAgCP,aAAhC,CAhCxB;;AAAA;AAgCU5B,gBAAAA,KAhCV;;AAmCI,oBAAI,KAAKhB,KAAL,CAAWE,aAAX,GAA2BR,SAA/B,EAA0C;AACxC,iDAAK0C,eAAL,oFAAwBhC,KAAxB,CAA8BZ,WAA9B,CAA0CE,SAA1C;AAEA,uBAAK0D,QAAL,CAAc;AACZpC,oBAAAA,KAAK,EAALA,KADY;AAEZD,oBAAAA,MAAM,EAANA,MAFY;AAGZE,oBAAAA,qBAAqB,EAAE2B,aAHX;AAIZ1C,oBAAAA,aAAa,EAAER;AAJH,mBAAd;AAMD;;AA5CL;AAAA;;AAAA;AAAA;AAAA;AA8CI,qBAAK2D,UAAL,eAAgC,YAAhC;AACA,+CAAKjB,eAAL,oFAAwBhC,KAAxB,CAA8BX,gBAA9B,CAA+CC,SAA/C;;AA/CJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAsDA,wBAA+B;AAC7B,aAAO,KAAKM,KAAL,CAAWC,cAAX,EAAP;AACD;;;WAGD,kBAAiBqD,EAAjB,EAA+C;AAAA,UAAhBC,EAAgB,uEAAX,GAAW;AAC7CC,MAAAA,YAAY,CAAC,KAAKxD,KAAL,CAAWyD,UAAZ,CAAZ;AACA,WAAKzD,KAAL,CAAWyD,UAAX,GAAwBC,UAAU,CAAC;AAAA,eAAMJ,EAAE,EAAR;AAAA,OAAD,EAAaC,EAAb,CAAlC;AACD;;;EAvLwDI,oB;;;8BAA9C5D,Q,eAGQ,U;8BAHRA,Q,kBAIyBrB,Y","sourcesContent":["// deck.gl, MIT license\n// Attributions:\n// Copyright 2022 Foursquare Labs, Inc.\n\n/* eslint-disable camelcase */ // Some WMS parameters are not in camel case\n/* global setTimeout, clearTimeout */\n\nimport {\n Layer,\n CompositeLayer,\n CompositeLayerProps,\n UpdateParameters,\n DefaultProps,\n Viewport,\n COORDINATE_SYSTEM,\n _deepEqual as deepEqual\n} from '@deck.gl/core';\nimport {BitmapLayer} from '@deck.gl/layers';\nimport type {ImageSourceMetadata, ImageType, ImageServiceType} from '@loaders.gl/wms';\nimport {ImageSource, createImageSource} from '@loaders.gl/wms';\nimport {Proj4Projection} from '@math.gl/proj4';\n\n/** All props supported by the TileLayer */\nexport type WMSLayerProps = CompositeLayerProps & _WMSLayerProps;\n\n/** Props added by the TileLayer */\ntype _WMSLayerProps = {\n data: string | ImageSource;\n serviceType?: ImageServiceType | 'auto';\n layers?: string[];\n srs?: 'EPSG:4326' | 'EPSG:3857' | 'auto';\n onMetadataLoad?: (metadata: ImageSourceMetadata) => void;\n onMetadataLoadError?: (error: Error) => void;\n onImageLoadStart?: (requestId: unknown) => void;\n onImageLoad?: (requestId: unknown) => void;\n onImageLoadError?: (requestId: unknown, error: Error) => void;\n};\n\nconst defaultProps: DefaultProps<WMSLayerProps> = {\n id: 'imagery-layer',\n data: '',\n serviceType: 'auto',\n srs: 'auto',\n layers: {type: 'array', compare: true, value: []},\n onMetadataLoad: {type: 'function', value: () => {}},\n // eslint-disable-next-line\n onMetadataLoadError: {type: 'function', value: console.error},\n onImageLoadStart: {type: 'function', value: () => {}},\n onImageLoad: {type: 'function', value: () => {}},\n onImageLoadError: {\n type: 'function',\n compare: false,\n // eslint-disable-next-line\n value: (requestId: unknown, error: Error) => console.error(error, requestId)\n }\n};\n\nconst projConverter = new Proj4Projection({from: 'EPSG:4326', to: 'EPSG:3857'});\n\n/**\n * The layer is used in Hex Tile layer in order to properly discard invisible elements during animation\n */\nexport class WMSLayer<ExtraPropsT extends {} = {}> extends CompositeLayer<\n ExtraPropsT & Required<_WMSLayerProps>\n> {\n static layerName = 'WMSLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n state!: {\n imageSource: ImageSource;\n image: ImageType;\n bounds: [number, number, number, number];\n lastRequestParameters: {\n bbox: [number, number, number, number];\n layers: string[];\n srs: 'EPSG:4326' | 'EPSG:3857';\n width: number;\n height: number;\n };\n lastRequestId: number;\n\n _nextRequestId: number;\n _timeoutId: any;\n };\n\n /** Lets deck.gl know that we want viewport change events */\n override shouldUpdateState(): boolean {\n return true;\n }\n\n override initializeState(): void {\n // intentionally empty, initialization is done in updateState\n this.state._nextRequestId = 0;\n this.state.lastRequestId = -1;\n }\n\n override updateState({changeFlags, props, oldProps}: UpdateParameters<this>): void {\n const {viewport} = this.context;\n\n // Check if data source has changed\n if (changeFlags.dataChanged || props.serviceType !== oldProps.serviceType) {\n this.state.imageSource = this._createImageSource(props);\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._loadMetadata();\n this.debounce(() => this.loadImage(viewport, 'image source changed'), 0);\n } else if (!deepEqual(props.layers, oldProps.layers, 1)) {\n this.debounce(() => this.loadImage(viewport, 'layers changed'), 0);\n } else if (changeFlags.viewportChanged) {\n this.debounce(() => this.loadImage(viewport, 'viewport changed'));\n }\n }\n\n override finalizeState(): void {\n // TODO - we could cancel outstanding requests\n }\n\n override renderLayers(): Layer {\n // TODO - which bitmap layer is rendered should depend on the current viewport\n // Currently Studio only uses one viewport\n const {bounds, image, lastRequestParameters} = this.state;\n\n return (\n image &&\n new BitmapLayer({\n ...this.getSubLayerProps({id: 'bitmap'}),\n _imageCoordinateSystem:\n lastRequestParameters.srs === 'EPSG:4326'\n ? COORDINATE_SYSTEM.LNGLAT\n : COORDINATE_SYSTEM.CARTESIAN,\n bounds,\n image\n })\n );\n }\n\n async getFeatureInfoText(x: number, y: number): Promise<string | null> {\n const {lastRequestParameters} = this.state;\n if (lastRequestParameters) {\n // @ts-expect-error Undocumented method\n const featureInfo = await this.state.imageSource.getFeatureInfoText?.({\n ...lastRequestParameters,\n query_layers: lastRequestParameters.layers,\n x,\n y,\n info_format: 'application/vnd.ogc.gml'\n });\n return featureInfo;\n }\n return '';\n }\n\n _createImageSource(props: WMSLayerProps): ImageSource {\n if (props.data instanceof ImageSource) {\n return props.data;\n }\n\n if (typeof props.data === 'string') {\n return createImageSource({\n url: props.data,\n loadOptions: props.loadOptions,\n type: props.serviceType\n });\n }\n\n throw new Error('invalid image source in props.data');\n }\n\n /** Run a getMetadata on the image service */\n async _loadMetadata(): Promise<void> {\n const {imageSource} = this.state;\n try {\n const metadata = await imageSource.getMetadata();\n\n // If a request takes a long time, it may no longer be expected\n if (this.state.imageSource === imageSource) {\n this.getCurrentLayer()?.props.onMetadataLoad(metadata);\n }\n } catch (error) {\n this.getCurrentLayer()?.props.onMetadataLoadError(error as Error);\n }\n }\n\n /** Load an image */\n async loadImage(viewport: Viewport, reason: string): Promise<void> {\n const {layers, serviceType} = this.props;\n\n // TODO - move to ImageSource?\n if (serviceType === 'wms' && layers.length === 0) {\n return;\n }\n\n const bounds = viewport.getBounds();\n const {width, height} = viewport;\n const requestId = this.getRequestId();\n let {srs} = this.props;\n if (srs === 'auto') {\n // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)\n srs = viewport.resolution ? 'EPSG:4326' : 'EPSG:3857';\n }\n const requestParams = {\n width,\n height,\n bbox: bounds,\n layers,\n srs\n };\n if (srs === 'EPSG:3857') {\n const [minX, minY] = projConverter.project([bounds[0], bounds[1]]);\n const [maxX, maxY] = projConverter.project([bounds[2], bounds[3]]);\n requestParams.bbox = [minX, minY, maxX, maxY];\n }\n\n try {\n this.props.onImageLoadStart(requestId);\n\n const image = await this.state.imageSource.getImage(requestParams);\n\n // If a request takes a long time, later requests may have already loaded.\n if (this.state.lastRequestId < requestId) {\n this.getCurrentLayer()?.props.onImageLoad(requestId);\n // Not type safe...\n this.setState({\n image,\n bounds,\n lastRequestParameters: requestParams,\n lastRequestId: requestId\n });\n }\n } catch (error) {\n this.raiseError(error as Error, 'Load image');\n this.getCurrentLayer()?.props.onImageLoadError(requestId, error as Error);\n }\n }\n\n // HELPERS\n\n /** Global counter for issuing unique request ids */\n private getRequestId(): number {\n return this.state._nextRequestId++;\n }\n\n /** Runs an action in the future, cancels it if the new action is issued before it executes */\n private debounce(fn: Function, ms = 500): void {\n clearTimeout(this.state._timeoutId);\n this.state._timeoutId = setTimeout(() => fn(), ms);\n }\n}\n"],"file":"wms-layer.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/geo-cell-layer/GeoCellLayer.ts"],"names":["CompositeLayer","PolygonLayer","defaultProps","GeoCellLayer","indexToBounds","renderLayers","elevationScale","extruded","wireframe","filled","stroked","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","lineJointRounded","lineMiterLimit","lineDashJustified","getElevation","getFillColor","getLineColor","getLineWidth","props","updateTriggers","material","transitions","CellLayer","getSubLayerClass","getSubLayerProps","id"],"mappings":";AAAA,SAAQA,cAAR,
|
|
1
|
+
{"version":3,"sources":["../../../src/geo-cell-layer/GeoCellLayer.ts"],"names":["CompositeLayer","PolygonLayer","defaultProps","GeoCellLayer","indexToBounds","renderLayers","elevationScale","extruded","wireframe","filled","stroked","lineWidthUnits","lineWidthScale","lineWidthMinPixels","lineWidthMaxPixels","lineJointRounded","lineMiterLimit","lineDashJustified","getElevation","getFillColor","getLineColor","getLineWidth","props","updateTriggers","material","transitions","CellLayer","getSubLayerClass","getSubLayerProps","id"],"mappings":";AAAA,SAAQA,cAAR,QAA8D,eAA9D;AACA,SAAQC,YAAR,QAA8C,iBAA9C;AAEA,MAAMC,YAA6C,GAAG,EACpD,GAAGD,YAAY,CAACC;AADoC,CAAtD;AAOA,eAAe,MAAMC,YAAN,SAAoEH,cAApE,CAEb;AAKAI,EAAAA,aAAa,GAA0C;AACrD,WAAO,IAAP;AACD;;AAEDC,EAAAA,YAAY,GAA8B;AAExC,UAAM;AACJC,MAAAA,cADI;AAEJC,MAAAA,QAFI;AAGJC,MAAAA,SAHI;AAIJC,MAAAA,MAJI;AAKJC,MAAAA,OALI;AAMJC,MAAAA,cANI;AAOJC,MAAAA,cAPI;AAQJC,MAAAA,kBARI;AASJC,MAAAA,kBATI;AAUJC,MAAAA,gBAVI;AAWJC,MAAAA,cAXI;AAYJC,MAAAA,iBAZI;AAaJC,MAAAA,YAbI;AAcJC,MAAAA,YAdI;AAeJC,MAAAA,YAfI;AAgBJC,MAAAA;AAhBI,QAiBF,KAAKC,KAjBT;AAoBA,UAAM;AAACC,MAAAA,cAAD;AAAiBC,MAAAA,QAAjB;AAA2BC,MAAAA;AAA3B,QAA0C,KAAKH,KAArD;AAGA,UAAMI,SAAS,GAAG,KAAKC,gBAAL,CAAsB,MAAtB,EAA8B1B,YAA9B,CAAlB;AACA,WAAO,IAAIyB,SAAJ,CACL;AACEjB,MAAAA,MADF;AAEED,MAAAA,SAFF;AAIED,MAAAA,QAJF;AAKED,MAAAA,cALF;AAOEI,MAAAA,OAPF;AAQEC,MAAAA,cARF;AASEC,MAAAA,cATF;AAUEC,MAAAA,kBAVF;AAWEC,MAAAA,kBAXF;AAYEC,MAAAA,gBAZF;AAaEC,MAAAA,cAbF;AAcEC,MAAAA,iBAdF;AAgBEO,MAAAA,QAhBF;AAiBEC,MAAAA,WAjBF;AAmBEP,MAAAA,YAnBF;AAoBEC,MAAAA,YApBF;AAqBEC,MAAAA,YArBF;AAsBEC,MAAAA;AAtBF,KADK,EAyBL,KAAKO,gBAAL,CAAsB;AACpBC,MAAAA,EAAE,EAAE,MADgB;AAEpBN,MAAAA,cAAc,EAAEA,cAAc,IAAI;AAChCL,QAAAA,YAAY,EAAEK,cAAc,CAACL,YADG;AAEhCC,QAAAA,YAAY,EAAEI,cAAc,CAACJ,YAFG;AAGhCC,QAAAA,YAAY,EAAEG,cAAc,CAACH,YAHG;AAIhCC,QAAAA,YAAY,EAAEE,cAAc,CAACF;AAJG;AAFd,KAAtB,CAzBK,EAkCL,KAAKjB,aAAL,EAlCK,CAAP;AAoCD;;AAvED;;gBAFmBD,Y,eAGA,c;;gBAHAA,Y,kBAIiBD,Y","sourcesContent":["import {CompositeLayer, Layer, LayersList, DefaultProps} from '@deck.gl/core';\nimport {PolygonLayer, PolygonLayerProps} from '@deck.gl/layers';\n\nconst defaultProps: DefaultProps<GeoCellLayerProps> = {\n ...PolygonLayer.defaultProps\n};\n\n/** All properties supported by GeoCellLayer. */\nexport type GeoCellLayerProps<DataT = any> = PolygonLayerProps<DataT>;\n\nexport default class GeoCellLayer<DataT = any, ExtraProps extends {} = {}> extends CompositeLayer<\n Required<GeoCellLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'GeoCellLayer';\n static defaultProps: DefaultProps = defaultProps;\n\n /** Implement to generate props to create geometry. */\n indexToBounds(): Partial<GeoCellLayer['props']> | null {\n return null;\n }\n\n renderLayers(): Layer | null | LayersList {\n // Rendering props underlying layer\n const {\n elevationScale,\n extruded,\n wireframe,\n filled,\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n } = this.props;\n\n // Accessor props for underlying layers\n const {updateTriggers, material, transitions} = this.props;\n\n // Filled Polygon Layer\n const CellLayer = this.getSubLayerClass('cell', PolygonLayer);\n return new CellLayer(\n {\n filled,\n wireframe,\n\n extruded,\n elevationScale,\n\n stroked,\n lineWidthUnits,\n lineWidthScale,\n lineWidthMinPixels,\n lineWidthMaxPixels,\n lineJointRounded,\n lineMiterLimit,\n lineDashJustified,\n\n material,\n transitions,\n\n getElevation,\n getFillColor,\n getLineColor,\n getLineWidth\n },\n this.getSubLayerProps({\n id: 'cell',\n updateTriggers: updateTriggers && {\n getElevation: updateTriggers.getElevation,\n getFillColor: updateTriggers.getFillColor,\n getLineColor: updateTriggers.getLineColor,\n getLineWidth: updateTriggers.getLineWidth\n }\n }),\n this.indexToBounds()\n );\n }\n}\n"],"file":"GeoCellLayer.js"}
|
|
@@ -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 CompositeLayerProps,\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 CompositeLayerProps<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<\n ExtraPropsT & Required<_H3HexagonLayerProps<DataT> & Required<PolygonLayerProps<DataT>>>\n> {\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":["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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mesh-layer/mesh-layer.ts"],"names":["GLTFMaterialParser","Model","pbr","SimpleMeshLayer","vs","fs","validateGeometryAttributes","attributes","hasColorAttribute","COLOR_0","colors","constant","value","Float32Array","defaultProps","pbrMaterial","type","featureIds","optional","MeshLayer","getShaders","shaders","modules","push","initializeState","props","attributeManager","getAttributeManager","add","featureIdsPickingColors","size","noAlloc","update","calculateFeatureIdsPickingColors","updateState","params","oldProps","updatePbrMaterialUniforms","draw","opts","state","model","setUniforms","u_Camera","getUniforms","project_uCameraPosition","pickFeatureIds","Boolean","getModel","mesh","id","materialParser","parseMaterial","setState","context","gl","geometry","defines","HAS_UV_REGIONS","uvRegions","parameters","isInstanced","uniforms","unlit","pbrMetallicRoughness","baseColorTexture","delete","NORMAL","normals","TEXCOORD_0","texCoords","material","pbrDebug","imageBasedLightingEnvironment","lights","useTangents","attribute","Uint8ClampedArray","length","pickingColor","index","encodePickingColor","finalizeState"],"mappings":"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","sourcesContent":["import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = any> = _MeshLayerProps<DataT> & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps<DataT> = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps<DataT>> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n"],"file":"mesh-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/mesh-layer/mesh-layer.ts"],"names":["GLTFMaterialParser","Model","pbr","SimpleMeshLayer","vs","fs","validateGeometryAttributes","attributes","hasColorAttribute","COLOR_0","colors","constant","value","Float32Array","defaultProps","pbrMaterial","type","featureIds","optional","MeshLayer","getShaders","shaders","modules","push","initializeState","props","attributeManager","getAttributeManager","add","featureIdsPickingColors","size","noAlloc","update","calculateFeatureIdsPickingColors","updateState","params","oldProps","updatePbrMaterialUniforms","draw","opts","state","model","setUniforms","u_Camera","getUniforms","project_uCameraPosition","pickFeatureIds","Boolean","getModel","mesh","id","materialParser","parseMaterial","setState","context","gl","geometry","defines","HAS_UV_REGIONS","uvRegions","parameters","isInstanced","uniforms","unlit","pbrMetallicRoughness","baseColorTexture","delete","NORMAL","normals","TEXCOORD_0","texCoords","material","pbrDebug","imageBasedLightingEnvironment","lights","useTangents","attribute","Uint8ClampedArray","length","pickingColor","index","encodePickingColor","finalizeState"],"mappings":"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","sourcesContent":["import type {NumericArray} from '@math.gl/core';\nimport {GLTFMaterialParser} from '@luma.gl/experimental';\nimport {Model, pbr} from '@luma.gl/core';\nimport GL from '@luma.gl/constants';\nimport type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema';\nimport type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core';\nimport {SimpleMeshLayer, SimpleMeshLayerProps} from '@deck.gl/mesh-layers';\n\nimport vs from './mesh-layer-vertex.glsl';\nimport fs from './mesh-layer-fragment.glsl';\n\nexport type Mesh = {\n attributes: MeshAttributes;\n indices?: MeshAttribute;\n};\n\nfunction validateGeometryAttributes(attributes) {\n const hasColorAttribute = attributes.COLOR_0 || attributes.colors;\n if (!hasColorAttribute) {\n attributes.colors = {constant: true, value: new Float32Array([1, 1, 1])};\n }\n}\n\nconst defaultProps: DefaultProps<MeshLayerProps> = {\n pbrMaterial: {type: 'object', value: null},\n featureIds: {type: 'array', value: null, optional: true}\n};\n\n/** All properties supported by MeshLayer. */\nexport type MeshLayerProps<DataT = any> = _MeshLayerProps & SimpleMeshLayerProps<DataT>;\n\n/** Properties added by MeshLayer. */\ntype _MeshLayerProps = {\n /**\n * PBR material object. _lighting must be pbr for this to work\n */\n pbrMaterial?: any; // TODO add type when converting Tile3DLayer\n\n /**\n * List of feature ids.\n */\n featureIds?: NumericArray | null;\n};\n\nexport default class MeshLayer<DataT = any, ExtraProps extends {} = {}> extends SimpleMeshLayer<\n DataT,\n Required<_MeshLayerProps> & ExtraProps\n> {\n static layerName = 'MeshLayer';\n static defaultProps = defaultProps;\n\n getShaders() {\n const shaders = super.getShaders();\n const modules = shaders.modules;\n modules.push(pbr);\n return {...shaders, vs, fs};\n }\n\n initializeState() {\n const {featureIds} = this.props;\n super.initializeState();\n\n const attributeManager = this.getAttributeManager();\n if (featureIds) {\n // attributeManager is always defined in a primitive layer\n attributeManager!.add({\n featureIdsPickingColors: {\n type: GL.UNSIGNED_BYTE,\n size: 3,\n noAlloc: true,\n // eslint-disable-next-line @typescript-eslint/unbound-method\n update: this.calculateFeatureIdsPickingColors\n }\n });\n }\n }\n\n updateState(params: UpdateParameters<this>) {\n super.updateState(params);\n\n const {props, oldProps} = params;\n if (props.pbrMaterial !== oldProps.pbrMaterial) {\n this.updatePbrMaterialUniforms(props.pbrMaterial);\n }\n }\n\n draw(opts) {\n const {featureIds} = this.props;\n if (!this.state.model) {\n return;\n }\n this.state.model.setUniforms({\n // Needed for PBR (TODO: find better way to get it)\n // eslint-disable-next-line camelcase\n u_Camera: this.state.model.getUniforms().project_uCameraPosition,\n pickFeatureIds: Boolean(featureIds)\n });\n\n super.draw(opts);\n }\n\n protected getModel(mesh: Mesh): Model {\n const {id, pbrMaterial} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n const shaders = this.getShaders();\n validateGeometryAttributes(mesh.attributes);\n const model = new Model(this.context.gl, {\n ...this.getShaders(),\n id,\n geometry: mesh,\n defines: {\n ...shaders.defines,\n ...materialParser?.defines,\n HAS_UV_REGIONS: mesh.attributes.uvRegions\n },\n parameters: materialParser?.parameters,\n isInstanced: true\n });\n\n return model;\n }\n\n updatePbrMaterialUniforms(pbrMaterial) {\n const {model} = this.state;\n if (model) {\n const {mesh} = this.props;\n const materialParser = this.parseMaterial(pbrMaterial, mesh);\n // Keep material parser to explicitly remove textures\n this.setState({materialParser});\n model.setUniforms(materialParser.uniforms);\n }\n }\n\n parseMaterial(pbrMaterial, mesh) {\n const unlit = Boolean(\n pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture\n );\n\n this.state.materialParser?.delete();\n\n return new GLTFMaterialParser(this.context.gl, {\n attributes: {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords},\n material: {unlit, ...pbrMaterial},\n pbrDebug: false,\n imageBasedLightingEnvironment: null,\n lights: true,\n useTangents: false\n });\n }\n\n calculateFeatureIdsPickingColors(attribute) {\n // This updater is only called if featureIds is not null\n const featureIds = this.props.featureIds!;\n const value = new Uint8ClampedArray(featureIds.length * attribute.size);\n\n const pickingColor = [];\n for (let index = 0; index < featureIds.length; index++) {\n this.encodePickingColor(featureIds[index], pickingColor);\n\n value[index * 3] = pickingColor[0];\n value[index * 3 + 1] = pickingColor[1];\n value[index * 3 + 2] = pickingColor[2];\n }\n\n attribute.value = value;\n }\n\n finalizeState(context: LayerContext) {\n super.finalizeState(context);\n this.state.materialParser?.delete();\n this.setState({materialParser: null});\n }\n}\n"],"file":"mesh-layer.js"}
|
|
@@ -8,9 +8,10 @@ import { binaryToGeojson } from '@loaders.gl/gis';
|
|
|
8
8
|
import { transform } from './coordinate-transform';
|
|
9
9
|
import findIndexBinary from './find-index-binary';
|
|
10
10
|
import TileLayer from '../tile-layer/tile-layer';
|
|
11
|
-
import { getURLFromTemplate, isGeoBoundingBox, isURLTemplate } from '../tileset-2d';
|
|
11
|
+
import { urlType, getURLFromTemplate, isGeoBoundingBox, isURLTemplate } from '../tileset-2d';
|
|
12
12
|
const WORLD_SIZE = 512;
|
|
13
13
|
const defaultProps = { ...GeoJsonLayer.defaultProps,
|
|
14
|
+
data: urlType,
|
|
14
15
|
onDataLoad: {
|
|
15
16
|
type: 'function',
|
|
16
17
|
value: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mvt-layer/mvt-layer.ts"],"names":["log","COORDINATE_SYSTEM","GeoJsonLayer","ClipExtension","Matrix4","MVTWorkerLoader","binaryToGeojson","transform","findIndexBinary","TileLayer","getURLFromTemplate","isGeoBoundingBox","isURLTemplate","WORLD_SIZE","defaultProps","onDataLoad","type","value","optional","compare","uniqueIdProperty","highlightedFeatureId","loaders","binary","MVTLayer","initializeState","context","viewport","resolution","undefined","props","setState","data","tileJSON","isLoaded","state","tileset","updateState","oldProps","changeFlags","dataChanged","_updateTileData","_setWGS84PropertyForTiles","highlightColor","Array","isArray","fetch","propName","layer","error","raiseError","tilejson","tiles","_getTilesetOptions","opts","minZoom","maxZoom","Number","isFinite","minzoom","maxzoom","renderLayers","getTileData","loadProps","index","signal","url","Promise","reject","loadOptions","getLoadOptions","mimeType","mvt","coordinates","tileIndex","gis","format","renderSubLayers","x","y","z","tile","worldScale","Math","pow","xScale","yScale","xOffset","yOffset","modelMatrix","scale","autoHighlight","coordinateOrigin","coordinateSystem","CARTESIAN","extensions","subLayers","warn","_updateAutoHighlight","info","hoveredFeatureId","hoveredFeatureLayerName","hoveredFeature","object","newHoveredFeatureId","newHoveredFeatureLayerName","getFeatureUniqueId","getFeatureLayerName","getPickingInfo","params","isWGS84","Boolean","sourceLayer","globalFeatureId","transformTileCoordsToWGS84","bbox","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isHighlighted","isFeatureIdDefined","isFeatureIdPresent","featureIdToHighlight","findIndex","feature","isMatchingId","isMatchingLayer","_pickObjects","maxObjects","deck","width","height","layerIds","id","pickObjects","getRenderedFeatures","maxFeatures","features","featureCache","Set","renderedFeatures","f","featureId","push","has","add","selectedTiles","forEach","hasOwnProperty","Object","defineProperty","get","length","_contentWGS84","map","properties","layerName","geometry","wgs84Geom"],"mappings":";AAAA,SAGEA,GAHF,EAQEC,iBARF,QAUO,eAVP;AAWA,SAAQC,YAAR,QAA8C,iBAA9C;AACA,SAAQC,aAAR,QAA4B,qBAA5B;AAEA,SAAQC,OAAR,QAAsB,eAAtB;AACA,SAAQC,eAAR,QAA8B,iBAA9B;AACA,SAAQC,eAAR,QAA8B,iBAA9B;AAMA,SAAQC,SAAR,QAAwB,wBAAxB;AACA,OAAOC,eAAP,MAA4B,qBAA5B;AAEA,OAAOC,SAAP,MAA0D,0BAA1D;AAGA,SAGEC,kBAHF,EAIEC,gBAJF,EAKEC,aALF,QAMO,eANP;AAQA,MAAMC,UAAU,GAAG,GAAnB;AAEA,MAAMC,YAAyC,GAAG,EAChD,GAAGZ,YAAY,CAACY,YADgC;AAEhDC,EAAAA,UAAU,EAAE;AAACC,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAE,IAA1B;AAAgCC,IAAAA,QAAQ,EAAE,IAA1C;AAAgDC,IAAAA,OAAO,EAAE;AAAzD,GAFoC;AAGhDC,EAAAA,gBAAgB,EAAE,EAH8B;AAIhDC,EAAAA,oBAAoB,EAAE,IAJ0B;AAKhDC,EAAAA,OAAO,EAAE,CAACjB,eAAD,CALuC;AAMhDkB,EAAAA,MAAM,EAAE;AANwC,CAAlD;AAyDA,eAAe,MAAMC,QAAN,SAGLf,SAHK,CAG2D;AAIxEgB,EAAAA,eAAe,GAAS;AACtB,UAAMA,eAAN;AAEA,UAAMF,MAAM,GAAG,KAAKG,OAAL,CAAaC,QAAb,CAAsBC,UAAtB,KAAqCC,SAArC,GAAiD,KAAjD,GAAyD,KAAKC,KAAL,CAAWP,MAAnF;AACA,SAAKQ,QAAL,CAAc;AACZR,MAAAA,MADY;AAEZS,MAAAA,IAAI,EAAE,IAFM;AAGZC,MAAAA,QAAQ,EAAE;AAHE,KAAd;AAKD;;AAEW,MAARC,QAAQ,GAAY;AACtB,WAAO,KAAKC,KAAL,IAAc,KAAKA,KAAL,CAAWH,IAAzB,IAAiC,KAAKG,KAAL,CAAWC,OAA5C,IAAuD,MAAMF,QAApE;AACD;;AAEDG,EAAAA,WAAW,CAAC;AAACP,IAAAA,KAAD;AAAQQ,IAAAA,QAAR;AAAkBZ,IAAAA,OAAlB;AAA2Ba,IAAAA;AAA3B,GAAD,EAAkE;AAAA;;AAC3E,QAAIA,WAAW,CAACC,WAAhB,EAA6B;AAE3B,WAAKC,eAAL;AACD;;AAED,uBAAI,KAAKN,KAAT,wCAAI,YAAYH,IAAhB,EAAsB;AACpB,YAAMK,WAAN,CAAkB;AAACP,QAAAA,KAAD;AAAQQ,QAAAA,QAAR;AAAkBZ,QAAAA,OAAlB;AAA2Ba,QAAAA;AAA3B,OAAlB;;AACA,WAAKG,yBAAL;AACD;;AACD,UAAM;AAACC,MAAAA;AAAD,QAAmBb,KAAzB;;AACA,QAAIa,cAAc,KAAKL,QAAQ,CAACK,cAA5B,IAA8CC,KAAK,CAACC,OAAN,CAAcF,cAAd,CAAlD,EAAiF;AAC/E,WAAKZ,QAAL,CAAc;AAACY,QAAAA;AAAD,OAAd;AACD;AACF;;AAG4B,QAAfF,eAAe,GAAkB;AAC7C,QAAIT,IAAS,GAAG,KAAKF,KAAL,CAAWE,IAA3B;AACA,QAAIC,QAAa,GAAG,IAApB;;AAEA,QAAI,OAAOD,IAAP,KAAgB,QAAhB,IAA4B,CAACpB,aAAa,CAACoB,IAAD,CAA9C,EAAsD;AACpD,YAAM;AAACjB,QAAAA,UAAD;AAAa+B,QAAAA;AAAb,UAAsB,KAAKhB,KAAjC;AACA,WAAKC,QAAL,CAAc;AAACC,QAAAA,IAAI,EAAE,IAAP;AAAaC,QAAAA,QAAQ,EAAE;AAAvB,OAAd;;AACA,UAAI;AACFA,QAAAA,QAAQ,GAAG,MAAMa,KAAK,CAACd,IAAD,EAAO;AAACe,UAAAA,QAAQ,EAAE,MAAX;AAAmBC,UAAAA,KAAK,EAAE,IAA1B;AAAgC1B,UAAAA,OAAO,EAAE;AAAzC,SAAP,CAAtB;AACD,OAFD,CAEE,OAAO2B,KAAP,EAAmB;AACnB,aAAKC,UAAL,CAAgBD,KAAhB,EAAuB,kBAAvB;AACAjB,QAAAA,IAAI,GAAG,IAAP;AACD;;AAED,UAAIjB,UAAJ,EAAgB;AACdA,QAAAA,UAAU,CAACkB,QAAD,EAAW;AAACc,UAAAA,QAAQ,EAAE,MAAX;AAAmBC,UAAAA,KAAK,EAAE;AAA1B,SAAX,CAAV;AACD;AACF,KAbD,MAaO,IAAIhB,IAAI,CAACmB,QAAT,EAAmB;AACxBlB,MAAAA,QAAQ,GAAGD,IAAX;AACD;;AAED,QAAIC,QAAJ,EAAc;AACZD,MAAAA,IAAI,GAAGC,QAAQ,CAACmB,KAAhB;AACD;;AAED,SAAKrB,QAAL,CAAc;AAACC,MAAAA,IAAD;AAAOC,MAAAA;AAAP,KAAd;AACD;;AAEDoB,EAAAA,kBAAkB,GAAmB;AACnC,UAAMC,IAAI,GAAG,MAAMD,kBAAN,EAAb;;AACA,UAAMpB,QAAqC,GAAG,KAAKE,KAAL,CAAWF,QAAzD;AACA,UAAM;AAACsB,MAAAA,OAAD;AAAUC,MAAAA;AAAV,QAAqB,KAAK1B,KAAhC;;AAEA,QAAIG,QAAJ,EAAc;AACZ,UAAIwB,MAAM,CAACC,QAAP,CAAgBzB,QAAQ,CAAC0B,OAAzB,KAAsC1B,QAAQ,CAAC0B,OAAV,GAAgCJ,OAAzE,EAA6F;AAC3FD,QAAAA,IAAI,CAACC,OAAL,GAAetB,QAAQ,CAAC0B,OAAxB;AACD;;AAED,UACEF,MAAM,CAACC,QAAP,CAAgBzB,QAAQ,CAAC2B,OAAzB,MACC,CAACH,MAAM,CAACC,QAAP,CAAgBF,OAAhB,CAAD,IAA8BvB,QAAQ,CAAC2B,OAAV,GAAgCJ,OAD9D,CADF,EAGE;AACAF,QAAAA,IAAI,CAACE,OAAL,GAAevB,QAAQ,CAAC2B,OAAxB;AACD;AACF;;AACD,WAAON,IAAP;AACD;;AAIDO,EAAAA,YAAY,GAA8B;AAAA;;AACxC,QAAI,kBAAC,KAAK1B,KAAN,yCAAC,aAAYH,IAAb,CAAJ,EAAuB,OAAO,IAAP;AACvB,WAAO,MAAM6B,YAAN,EAAP;AACD;;AAEDC,EAAAA,WAAW,CAACC,SAAD,EAAmD;AAAA;;AAC5D,UAAM;AAAC/B,MAAAA,IAAD;AAAOT,MAAAA;AAAP,QAAiB,KAAKY,KAA5B;AACA,UAAM;AAAC6B,MAAAA,KAAD;AAAQC,MAAAA;AAAR,QAAkBF,SAAxB;AAEA,UAAMG,GAAG,GAAGxD,kBAAkB,CAACsB,IAAD,EAAO+B,SAAP,CAA9B;;AACA,QAAI,CAACG,GAAL,EAAU;AACR,aAAOC,OAAO,CAACC,MAAR,CAAe,aAAf,CAAP;AACD;;AACD,QAAIC,WAAW,GAAG,KAAKC,cAAL,EAAlB;AACA,UAAM;AAACxB,MAAAA;AAAD,QAAU,KAAKhB,KAArB;AACAuC,IAAAA,WAAW,GAAG,EACZ,GAAGA,WADS;AAEZE,MAAAA,QAAQ,EAAE,wBAFE;AAGZC,MAAAA,GAAG,EAAE,EACH,oBAAGH,WAAH,iDAAG,aAAaG,GAAhB,CADG;AAEHC,QAAAA,WAAW,EAAE,KAAK/C,OAAL,CAAaC,QAAb,CAAsBC,UAAtB,GAAmC,OAAnC,GAA6C,OAFvD;AAGH8C,QAAAA,SAAS,EAAEV;AAHR,OAHO;AAYZW,MAAAA,GAAG,EAAEpD,MAAM,GAAG;AAACqD,QAAAA,MAAM,EAAE;AAAT,OAAH,GAAwB;AAZvB,KAAd;AAcA,WAAO9B,KAAK,CAACoB,GAAD,EAAM;AAACnB,MAAAA,QAAQ,EAAE,MAAX;AAAmBC,MAAAA,KAAK,EAAE,IAA1B;AAAgCqB,MAAAA,WAAhC;AAA6CJ,MAAAA;AAA7C,KAAN,CAAZ;AACD;;AAEDY,EAAAA,eAAe,CACb/C,KADa,EAOc;AAC3B,UAAM;AAACgD,MAAAA,CAAD;AAAIC,MAAAA,CAAJ;AAAOC,MAAAA;AAAP,QAAYlD,KAAK,CAACmD,IAAN,CAAWjB,KAA7B;AACA,UAAMkB,UAAU,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYJ,CAAZ,CAAnB;AAEA,UAAMK,MAAM,GAAGxE,UAAU,GAAGqE,UAA5B;AACA,UAAMI,MAAM,GAAG,CAACD,MAAhB;AAEA,UAAME,OAAO,GAAI1E,UAAU,GAAGiE,CAAd,GAAmBI,UAAnC;AACA,UAAMM,OAAO,GAAG3E,UAAU,IAAI,IAAIkE,CAAC,GAAGG,UAAZ,CAA1B;AAEA,UAAMO,WAAW,GAAG,IAAIrF,OAAJ,GAAcsF,KAAd,CAAoB,CAACL,MAAD,EAASC,MAAT,EAAiB,CAAjB,CAApB,CAApB;AAEAxD,IAAAA,KAAK,CAAC6D,aAAN,GAAsB,KAAtB;;AAEA,QAAI,CAAC,KAAKjE,OAAL,CAAaC,QAAb,CAAsBC,UAA3B,EAAuC;AACrCE,MAAAA,KAAK,CAAC2D,WAAN,GAAoBA,WAApB;AACA3D,MAAAA,KAAK,CAAC8D,gBAAN,GAAyB,CAACL,OAAD,EAAUC,OAAV,EAAmB,CAAnB,CAAzB;AACA1D,MAAAA,KAAK,CAAC+D,gBAAN,GAAyB5F,iBAAiB,CAAC6F,SAA3C;AACAhE,MAAAA,KAAK,CAACiE,UAAN,GAAmB,CAAC,IAAIjE,KAAK,CAACiE,UAAN,IAAoB,EAAxB,CAAD,EAA8B,IAAI5F,aAAJ,EAA9B,CAAnB;AACD;;AAED,UAAM6F,SAAS,GAAG,MAAMnB,eAAN,CAAsB/C,KAAtB,CAAlB;;AAEA,QAAI,KAAKK,KAAL,CAAWZ,MAAX,IAAqB,EAAEyE,SAAS,YAAY9F,YAAvB,CAAzB,EAA+D;AAC7DF,MAAAA,GAAG,CAACiG,IAAJ,CAAS,mEAAT;AACD;;AAED,WAAOD,SAAP;AACD;;AAESE,EAAAA,oBAAoB,CAACC,IAAD,EAA0B;AACtD,UAAM;AAAC/E,MAAAA;AAAD,QAAqB,KAAKU,KAAhC;AAEA,UAAM;AAACsE,MAAAA,gBAAD;AAAmBC,MAAAA;AAAnB,QAA8C,KAAKlE,KAAzD;AACA,UAAMmE,cAAc,GAAGH,IAAI,CAACI,MAA5B;AACA,QAAIC,mBAAJ;AACA,QAAIC,0BAAJ;;AAEA,QAAIH,cAAJ,EAAoB;AAClBE,MAAAA,mBAAmB,GAAGE,kBAAkB,CAACJ,cAAD,EAAiBlF,gBAAjB,CAAxC;AACAqF,MAAAA,0BAA0B,GAAGE,mBAAmB,CAACL,cAAD,CAAhD;AACD;;AACD,QAAI;AAAC3D,MAAAA;AAAD,QAAmB,KAAKb,KAA5B;;AACA,QAAI,OAAOa,cAAP,KAA0B,UAA9B,EAA0C;AACxCA,MAAAA,cAAc,GAAGA,cAAc,CAACwD,IAAD,CAA/B;AACD;;AAED,QACEC,gBAAgB,KAAKI,mBAArB,IACAH,uBAAuB,KAAKI,0BAF9B,EAGE;AACA,WAAK1E,QAAL,CAAc;AACZY,QAAAA,cADY;AAEZyD,QAAAA,gBAAgB,EAAEI,mBAFN;AAGZH,QAAAA,uBAAuB,EAAEI;AAHb,OAAd;AAKD;AACF;;AAEDG,EAAAA,cAAc,CAACC,MAAD,EAAiD;AAC7D,UAAMV,IAAI,GAAG,MAAMS,cAAN,CAAqBC,MAArB,CAAb;AAEA,UAAMC,OAAO,GAAGC,OAAO,CAAC,KAAKrF,OAAL,CAAaC,QAAb,CAAsBC,UAAvB,CAAvB;;AAEA,QAAI,KAAKO,KAAL,CAAWZ,MAAX,IAAqB4E,IAAI,CAACnC,KAAL,KAAe,CAAC,CAAzC,EAA4C;AAC1C,YAAM;AAAChC,QAAAA;AAAD,UAAS6E,MAAM,CAACG,WAAP,CAAoBlF,KAAnC;AACAqE,MAAAA,IAAI,CAACI,MAAL,GAAcjG,eAAe,CAAC0B,IAAD,EAAyB;AAACiF,QAAAA,eAAe,EAAEd,IAAI,CAACnC;AAAvB,OAAzB,CAA7B;AACD;;AACD,QAAImC,IAAI,CAACI,MAAL,IAAe,CAACO,OAApB,EAA6B;AAC3BX,MAAAA,IAAI,CAACI,MAAL,GAAcW,0BAA0B,CACtCf,IAAI,CAACI,MADiC,EAEtCJ,IAAI,CAAClB,IAAL,CAAWkC,IAF2B,EAGtC,KAAKzF,OAAL,CAAaC,QAHyB,CAAxC;AAKD;;AAED,WAAOwE,IAAP;AACD;;AAEDiB,EAAAA,sBAAsB,CAACnC,IAAD,EAAyD;AAC7E,WAAO;AACLoC,MAAAA,sBAAsB,EAAE,KAAKC,yBAAL,CAA+BrC,IAA/B,CADnB;AAELtC,MAAAA,cAAc,EAAE,KAAKR,KAAL,CAAWQ;AAFtB,KAAP;AAID;;AAEO2E,EAAAA,yBAAyB,CAACrC,IAAD,EAA4C;AAC3E,UAAM;AAACmB,MAAAA,gBAAD;AAAmBC,MAAAA,uBAAnB;AAA4C9E,MAAAA;AAA5C,QAAsD,KAAKY,KAAjE;AACA,UAAM;AAACf,MAAAA,gBAAD;AAAmBC,MAAAA;AAAnB,QAA2C,KAAKS,KAAtD;AACA,UAAME,IAAI,GAAGiD,IAAI,CAACsC,OAAlB;AAEA,UAAMC,aAAa,GAAGC,kBAAkB,CAACpG,oBAAD,CAAxC;AACA,UAAMqG,kBAAkB,GAAGD,kBAAkB,CAACrB,gBAAD,CAAlB,IAAwCoB,aAAnE;;AAEA,QAAI,CAACE,kBAAL,EAAyB;AACvB,aAAO,CAAC,CAAR;AACD;;AAED,UAAMC,oBAAoB,GAAGH,aAAa,GAAGnG,oBAAH,GAA0B+E,gBAApE;;AAGA,QAAIxD,KAAK,CAACC,OAAN,CAAcb,IAAd,CAAJ,EAAyB;AACvB,aAAOA,IAAI,CAAC4F,SAAL,CAAeC,OAAO,IAAI;AAC/B,cAAMC,YAAY,GAAGpB,kBAAkB,CAACmB,OAAD,EAAUzG,gBAAV,CAAlB,KAAkDuG,oBAAvE;AACA,cAAMI,eAAe,GACnBP,aAAa,IAAIb,mBAAmB,CAACkB,OAAD,CAAnB,KAAiCxB,uBADpD;AAEA,eAAOyB,YAAY,IAAIC,eAAvB;AACD,OALM,CAAP;AAQD,KATD,MASO,IAAI/F,IAAI,IAAIT,MAAZ,EAAoB;AAEzB,aAAOf,eAAe,CACpBwB,IADoB,EAEpBZ,gBAFoB,EAGpBuG,oBAHoB,EAIpBH,aAAa,GAAG,EAAH,GAAQnB,uBAJD,CAAtB;AAMD;;AAED,WAAO,CAAC,CAAR;AACD;;AAEO2B,EAAAA,YAAY,CAACC,UAAD,EAA2C;AAC7D,UAAM;AAACC,MAAAA,IAAD;AAAOvG,MAAAA;AAAP,QAAmB,KAAKD,OAA9B;AACA,UAAMyG,KAAK,GAAGxG,QAAQ,CAACwG,KAAvB;AACA,UAAMC,MAAM,GAAGzG,QAAQ,CAACyG,MAAxB;AACA,UAAMtD,CAAC,GAAGnD,QAAQ,CAACmD,CAAnB;AACA,UAAMC,CAAC,GAAGpD,QAAQ,CAACoD,CAAnB;AACA,UAAMsD,QAAQ,GAAG,CAAC,KAAKC,EAAN,CAAjB;AACA,WAAOJ,IAAI,CAAEK,WAAN,CAAkB;AAACzD,MAAAA,CAAD;AAAIC,MAAAA,CAAJ;AAAOoD,MAAAA,KAAP;AAAcC,MAAAA,MAAd;AAAsBC,MAAAA,QAAtB;AAAgCJ,MAAAA;AAAhC,KAAlB,CAAP;AACD;;AAGDO,EAAAA,mBAAmB,CAACC,WAA0B,GAAG,IAA9B,EAA6C;AAC9D,UAAMC,QAAQ,GAAG,KAAKV,YAAL,CAAkBS,WAAlB,CAAjB;;AACA,UAAME,YAAY,GAAG,IAAIC,GAAJ,EAArB;AACA,UAAMC,gBAAyB,GAAG,EAAlC;;AAEA,SAAK,MAAMC,CAAX,IAAgBJ,QAAhB,EAA0B;AACxB,YAAMK,SAAS,GAAGrC,kBAAkB,CAACoC,CAAC,CAACvC,MAAH,EAAW,KAAKzE,KAAL,CAAWV,gBAAtB,CAApC;;AAEA,UAAI2H,SAAS,KAAKlH,SAAlB,EAA6B;AAE3BgH,QAAAA,gBAAgB,CAACG,IAAjB,CAAsBF,CAAC,CAACvC,MAAxB;AACD,OAHD,MAGO,IAAI,CAACoC,YAAY,CAACM,GAAb,CAAiBF,SAAjB,CAAL,EAAkC;AAEvCJ,QAAAA,YAAY,CAACO,GAAb,CAAiBH,SAAjB;AACAF,QAAAA,gBAAgB,CAACG,IAAjB,CAAsBF,CAAC,CAACvC,MAAxB;AACD;AACF;;AAED,WAAOsC,gBAAP;AACD;;AAEOnG,EAAAA,yBAAyB,GAAS;AACxC,UAAMK,QAAQ,GAAG,aAAjB;AACA,UAAMX,OAAkB,GAAG,KAAKD,KAAL,CAAWC,OAAtC;AAGAA,IAAAA,OAAO,CAAC+G,aAAR,CAAsBC,OAAtB,CAA+BnE,IAAD,IAA4C;AACxE,UAAI,CAACA,IAAI,CAACoE,cAAL,CAAoBtG,QAApB,CAAL,EAAoC;AAElCuG,QAAAA,MAAM,CAACC,cAAP,CAAsBtE,IAAtB,EAA4BlC,QAA5B,EAAsC;AACpCyG,UAAAA,GAAG,EAAE,MAAM;AAET,gBAAI,CAACvE,IAAI,CAACsC,OAAV,EAAmB;AACjB,qBAAO,IAAP;AACD;;AAED,gBAAI,KAAKpF,KAAL,CAAWZ,MAAX,IAAqBqB,KAAK,CAACC,OAAN,CAAcoC,IAAI,CAACsC,OAAnB,CAArB,IAAoD,CAACtC,IAAI,CAACsC,OAAL,CAAakC,MAAtE,EAA8E;AAG5E,qBAAO,EAAP;AACD;;AAED,kBAAM;AAACtC,cAAAA;AAAD,gBAASlC,IAAf;;AACA,gBAAIA,IAAI,CAACyE,aAAL,KAAuB7H,SAAvB,IAAoClB,gBAAgB,CAACwG,IAAD,CAAxD,EAAgE;AAG9D,oBAAMI,OAAO,GAAG,KAAKpF,KAAL,CAAWZ,MAAX,GAAoBjB,eAAe,CAAC2E,IAAI,CAACsC,OAAN,CAAnC,GAAoDtC,IAAI,CAACsC,OAAzE;AACAtC,cAAAA,IAAI,CAACyE,aAAL,GAAqBnC,OAAO,CAACoC,GAAR,CAAY9B,OAAO,IACtCX,0BAA0B,CAACW,OAAD,EAAUV,IAAV,EAAgB,KAAKzF,OAAL,CAAaC,QAA7B,CADP,CAArB;AAGD;;AACD,mBAAOsD,IAAI,CAACyE,aAAZ;AACD;AAvBmC,SAAtC;AAyBD;AACF,KA7BD;AA8BD;;AA3TuE;;gBAHrDlI,Q,eAIA,U;;gBAJAA,Q,kBAKGV,Y;;AA4TxB,SAAS4F,kBAAT,CAA4BmB,OAA5B,EAA8CzG,gBAA9C,EAAoF;AAClF,MAAIyG,OAAO,CAAC+B,UAAR,IAAsBxI,gBAA1B,EAA4C;AAC1C,WAAOyG,OAAO,CAAC+B,UAAR,CAAmBxI,gBAAnB,CAAP;AACD;;AAED,MAAI,QAAQyG,OAAZ,EAAqB;AACnB,WAAOA,OAAO,CAACS,EAAf;AACD;;AAED,SAAOzG,SAAP;AACD;;AAED,SAAS8E,mBAAT,CAA6BkB,OAA7B,EAA8D;AAAA;;AAC5D,SAAO,wBAAAA,OAAO,CAAC+B,UAAR,4EAAoBC,SAApB,KAAiC,IAAxC;AACD;;AAED,SAASpC,kBAAT,CAA4BxG,KAA5B,EAAqD;AACnD,SAAOA,KAAK,KAAKY,SAAV,IAAuBZ,KAAK,KAAK,IAAjC,IAAyCA,KAAK,KAAK,EAA1D;AACD;;AAED,SAASiG,0BAAT,CACEX,MADF,EAEEY,IAFF,EAGExF,QAHF,EAIW;AACT,QAAMkG,OAAO,GAAG,EACd,GAAGtB,MADW;AAEduD,IAAAA,QAAQ,EAAE;AACR9I,MAAAA,IAAI,EAAEuF,MAAM,CAACuD,QAAP,CAAgB9I;AADd;AAFI,GAAhB;AAQAsI,EAAAA,MAAM,CAACC,cAAP,CAAsB1B,OAAO,CAACiC,QAA9B,EAAwC,aAAxC,EAAuD;AACrDN,IAAAA,GAAG,EAAE,MAAM;AACT,YAAMO,SAAS,GAAGxJ,SAAS,CAACgG,MAAM,CAACuD,QAAR,EAAkB3C,IAAlB,EAAwBxF,QAAxB,CAA3B;AACA,aAAOoI,SAAS,CAACtF,WAAjB;AACD;AAJoD,GAAvD;AAOA,SAAOoD,OAAP;AACD","sourcesContent":["import {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d';\nimport {\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatures;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps<DataT extends Feature = Feature> = _MVTLayerProps &\n GeoJsonLayerProps<DataT> &\n TileLayerProps<ParsedMvtTile>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<\n DataT extends Feature = Feature,\n ExtraProps extends {} = {}\n> extends TileLayer<ParsedMvtTile, Required<_MVTLayerProps> & ExtraProps> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null\n });\n }\n\n get isLoaded(): boolean {\n return this.state && this.state.data && this.state.tileset && super.isLoaded;\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data: any = this.props.data;\n let tileJSON: any = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data.tilejson) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null | undefined = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom as number;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom as number;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n let newHoveredFeatureLayerName;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {globalFeatureId: info.index}) as DataT;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight,\n isHighlighted ? '' : hoveredFeatureLayerName\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): DataT[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: DataT[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as DataT);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as DataT);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n"],"file":"mvt-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/mvt-layer/mvt-layer.ts"],"names":["log","COORDINATE_SYSTEM","GeoJsonLayer","ClipExtension","Matrix4","MVTWorkerLoader","binaryToGeojson","transform","findIndexBinary","TileLayer","urlType","getURLFromTemplate","isGeoBoundingBox","isURLTemplate","WORLD_SIZE","defaultProps","data","onDataLoad","type","value","optional","compare","uniqueIdProperty","highlightedFeatureId","loaders","binary","MVTLayer","initializeState","context","viewport","resolution","undefined","props","setState","tileJSON","isLoaded","state","tileset","updateState","oldProps","changeFlags","dataChanged","_updateTileData","_setWGS84PropertyForTiles","highlightColor","Array","isArray","fetch","propName","layer","error","raiseError","tilejson","tiles","_getTilesetOptions","opts","minZoom","maxZoom","Number","isFinite","minzoom","maxzoom","renderLayers","getTileData","loadProps","index","signal","url","Promise","reject","loadOptions","getLoadOptions","mimeType","mvt","coordinates","tileIndex","gis","format","renderSubLayers","x","y","z","tile","worldScale","Math","pow","xScale","yScale","xOffset","yOffset","modelMatrix","scale","autoHighlight","coordinateOrigin","coordinateSystem","CARTESIAN","extensions","subLayers","warn","_updateAutoHighlight","info","hoveredFeatureId","hoveredFeatureLayerName","hoveredFeature","object","newHoveredFeatureId","newHoveredFeatureLayerName","getFeatureUniqueId","getFeatureLayerName","getPickingInfo","params","isWGS84","Boolean","sourceLayer","globalFeatureId","transformTileCoordsToWGS84","bbox","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isHighlighted","isFeatureIdDefined","isFeatureIdPresent","featureIdToHighlight","findIndex","feature","isMatchingId","isMatchingLayer","_pickObjects","maxObjects","deck","width","height","layerIds","id","pickObjects","getRenderedFeatures","maxFeatures","features","featureCache","Set","renderedFeatures","f","featureId","push","has","add","selectedTiles","forEach","hasOwnProperty","Object","defineProperty","get","length","_contentWGS84","map","properties","layerName","geometry","wgs84Geom"],"mappings":"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","sourcesContent":["import {\n Layer,\n LayersList,\n log,\n PickingInfo,\n UpdateParameters,\n GetPickingInfoParams,\n Viewport,\n COORDINATE_SYSTEM,\n DefaultProps\n} from '@deck.gl/core';\nimport {GeoJsonLayer, GeoJsonLayerProps} from '@deck.gl/layers';\nimport {ClipExtension} from '@deck.gl/extensions';\n\nimport {Matrix4} from '@math.gl/core';\nimport {MVTWorkerLoader} from '@loaders.gl/mvt';\nimport {binaryToGeojson} from '@loaders.gl/gis';\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {BinaryFeatures} from '@loaders.gl/schema';\nimport type {Feature} from 'geojson';\n\nimport {transform} from './coordinate-transform';\nimport findIndexBinary from './find-index-binary';\n\nimport TileLayer, {TiledPickingInfo, TileLayerProps} from '../tile-layer/tile-layer';\n\nimport type {Tileset2DProps, TileLoadProps, GeoBoundingBox} from '../tileset-2d';\nimport {\n urlType,\n Tileset2D,\n Tile2DHeader,\n getURLFromTemplate,\n isGeoBoundingBox,\n isURLTemplate\n} from '../tileset-2d';\n\nconst WORLD_SIZE = 512;\n\nconst defaultProps: DefaultProps<MVTLayerProps> = {\n ...GeoJsonLayer.defaultProps,\n data: urlType,\n onDataLoad: {type: 'function', value: null, optional: true, compare: false},\n uniqueIdProperty: '',\n highlightedFeatureId: null,\n loaders: [MVTWorkerLoader],\n binary: true\n};\n\nexport type TileJson = {\n tilejson: string;\n tiles: string[];\n // eslint-disable-next-line camelcase\n vector_layers: any[];\n attribution?: string;\n scheme?: string;\n maxzoom?: number;\n minzoom?: number;\n version?: string;\n};\n\ntype ParsedMvtTile = Feature[] | BinaryFeatures;\n\n/** All props supported by the MVTLayer */\nexport type MVTLayerProps = _MVTLayerProps &\n Omit<GeoJsonLayerProps, 'data'> &\n TileLayerProps<ParsedMvtTile>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n /** Called if `data` is a TileJSON URL when it is successfully fetched. */\n onDataLoad?: ((tilejson: TileJson | null) => void) | null;\n\n /** Needed for highlighting a feature split across two or more tiles. */\n uniqueIdProperty?: string;\n\n /** A feature with ID corresponding to the supplied value will be highlighted. */\n highlightedFeatureId?: string | null;\n\n /**\n * Use tile data in binary format.\n *\n * @default true\n */\n binary?: boolean;\n\n /**\n * Loaders used to transform tiles into `data` property passed to `renderSubLayers`.\n *\n * @default [MVTWorkerLoader] from `@loaders.gl/mvt`\n */\n loaders?: Loader[];\n};\n\ntype ContentWGS84Cache = {_contentWGS84?: Feature[]};\n\n/** Render data formatted as [Mapbox Vector Tiles](https://docs.mapbox.com/vector-tiles/specification/). */\nexport default class MVTLayer<ExtraProps extends {} = {}> extends TileLayer<\n ParsedMvtTile,\n Required<_MVTLayerProps> & ExtraProps\n> {\n static layerName = 'MVTLayer';\n static defaultProps = defaultProps;\n\n initializeState(): void {\n super.initializeState();\n // GlobeView doesn't work well with binary data\n const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;\n this.setState({\n binary,\n data: null,\n tileJSON: null\n });\n }\n\n get isLoaded(): boolean {\n return this.state && this.state.data && this.state.tileset && super.isLoaded;\n }\n\n updateState({props, oldProps, context, changeFlags}: UpdateParameters<this>) {\n if (changeFlags.dataChanged) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._updateTileData();\n }\n\n if (this.state?.data) {\n super.updateState({props, oldProps, context, changeFlags});\n this._setWGS84PropertyForTiles();\n }\n const {highlightColor} = props;\n if (highlightColor !== oldProps.highlightColor && Array.isArray(highlightColor)) {\n this.setState({highlightColor});\n }\n }\n\n /* eslint-disable complexity */\n private async _updateTileData(): Promise<void> {\n let data: any = this.props.data;\n let tileJSON: any = null;\n\n if (typeof data === 'string' && !isURLTemplate(data)) {\n const {onDataLoad, fetch} = this.props;\n this.setState({data: null, tileJSON: null});\n try {\n tileJSON = await fetch(data, {propName: 'data', layer: this, loaders: []});\n } catch (error: any) {\n this.raiseError(error, 'loading TileJSON');\n data = null;\n }\n\n if (onDataLoad) {\n onDataLoad(tileJSON, {propName: 'data', layer: this});\n }\n } else if (data.tilejson) {\n tileJSON = data;\n }\n\n if (tileJSON) {\n data = tileJSON.tiles;\n }\n\n this.setState({data, tileJSON});\n }\n\n _getTilesetOptions(): Tileset2DProps {\n const opts = super._getTilesetOptions();\n const tileJSON: TileJson | null | undefined = this.state.tileJSON;\n const {minZoom, maxZoom} = this.props;\n\n if (tileJSON) {\n if (Number.isFinite(tileJSON.minzoom) && (tileJSON.minzoom as number) > (minZoom as number)) {\n opts.minZoom = tileJSON.minzoom as number;\n }\n\n if (\n Number.isFinite(tileJSON.maxzoom) &&\n (!Number.isFinite(maxZoom) || (tileJSON.maxzoom as number) < (maxZoom as number))\n ) {\n opts.maxZoom = tileJSON.maxzoom as number;\n }\n }\n return opts;\n }\n\n /* eslint-disable complexity */\n\n renderLayers(): Layer | null | LayersList {\n if (!this.state?.data) return null;\n return super.renderLayers();\n }\n\n getTileData(loadProps: TileLoadProps): Promise<ParsedMvtTile> {\n const {data, binary} = this.state;\n const {index, signal} = loadProps;\n\n const url = getURLFromTemplate(data, loadProps);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n let loadOptions = this.getLoadOptions();\n const {fetch} = this.props;\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf',\n mvt: {\n ...loadOptions?.mvt,\n coordinates: this.context.viewport.resolution ? 'wgs84' : 'local',\n tileIndex: index\n // Local worker debug\n // workerUrl: `modules/mvt/dist/mvt-loader.worker.js`\n // Set worker to null to skip web workers\n // workerUrl: null\n },\n gis: binary ? {format: 'binary'} : {}\n };\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(\n props: TileLayer['props'] & {\n id: string;\n data: ParsedMvtTile;\n _offset: number;\n tile: Tile2DHeader<ParsedMvtTile>;\n }\n ): Layer | null | LayersList {\n const {x, y, z} = props.tile.index;\n const worldScale = Math.pow(2, z);\n\n const xScale = WORLD_SIZE / worldScale;\n const yScale = -xScale;\n\n const xOffset = (WORLD_SIZE * x) / worldScale;\n const yOffset = WORLD_SIZE * (1 - y / worldScale);\n\n const modelMatrix = new Matrix4().scale([xScale, yScale, 1]);\n\n props.autoHighlight = false;\n\n if (!this.context.viewport.resolution) {\n props.modelMatrix = modelMatrix;\n props.coordinateOrigin = [xOffset, yOffset, 0];\n props.coordinateSystem = COORDINATE_SYSTEM.CARTESIAN;\n props.extensions = [...(props.extensions || []), new ClipExtension()];\n }\n\n const subLayers = super.renderSubLayers(props);\n\n if (this.state.binary && !(subLayers instanceof GeoJsonLayer)) {\n log.warn('renderSubLayers() must return GeoJsonLayer when using binary:true')();\n }\n\n return subLayers;\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {uniqueIdProperty} = this.props;\n\n const {hoveredFeatureId, hoveredFeatureLayerName} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n let newHoveredFeatureLayerName;\n\n if (hoveredFeature) {\n newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);\n newHoveredFeatureLayerName = getFeatureLayerName(hoveredFeature);\n }\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n if (\n hoveredFeatureId !== newHoveredFeatureId ||\n hoveredFeatureLayerName !== newHoveredFeatureLayerName\n ) {\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId,\n hoveredFeatureLayerName: newHoveredFeatureLayerName\n });\n }\n }\n\n getPickingInfo(params: GetPickingInfoParams): TiledPickingInfo {\n const info = super.getPickingInfo(params);\n\n const isWGS84 = Boolean(this.context.viewport.resolution);\n\n if (this.state.binary && info.index !== -1) {\n const {data} = params.sourceLayer!.props;\n info.object = binaryToGeojson(data as BinaryFeatures, {\n globalFeatureId: info.index\n }) as Feature;\n }\n if (info.object && !isWGS84) {\n info.object = transformTileCoordsToWGS84(\n info.object,\n info.tile!.bbox as GeoBoundingBox, // eslint-disable-line\n this.context.viewport\n );\n }\n\n return info;\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader<ParsedMvtTile>): Record<string, any> {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n private getHighlightedObjectIndex(tile: Tile2DHeader<ParsedMvtTile>): number {\n const {hoveredFeatureId, hoveredFeatureLayerName, binary} = this.state;\n const {uniqueIdProperty, highlightedFeatureId} = this.props;\n const data = tile.content;\n\n const isHighlighted = isFeatureIdDefined(highlightedFeatureId);\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId) || isHighlighted;\n\n if (!isFeatureIdPresent) {\n return -1;\n }\n\n const featureIdToHighlight = isHighlighted ? highlightedFeatureId : hoveredFeatureId;\n\n // Iterable data\n if (Array.isArray(data)) {\n return data.findIndex(feature => {\n const isMatchingId = getFeatureUniqueId(feature, uniqueIdProperty) === featureIdToHighlight;\n const isMatchingLayer =\n isHighlighted || getFeatureLayerName(feature) === hoveredFeatureLayerName;\n return isMatchingId && isMatchingLayer;\n });\n\n // Non-iterable data\n } else if (data && binary) {\n // Get the feature index of the selected item to highlight\n return findIndexBinary(\n data,\n uniqueIdProperty,\n featureIdToHighlight,\n isHighlighted ? '' : hoveredFeatureLayerName\n );\n }\n\n return -1;\n }\n\n private _pickObjects(maxObjects: number | null): PickingInfo[] {\n const {deck, viewport} = this.context;\n const width = viewport.width;\n const height = viewport.height;\n const x = viewport.x;\n const y = viewport.y;\n const layerIds = [this.id];\n return deck!.pickObjects({x, y, width, height, layerIds, maxObjects});\n }\n\n /** Get the rendered features in the current viewport. */\n getRenderedFeatures(maxFeatures: number | null = null): Feature[] {\n const features = this._pickObjects(maxFeatures);\n const featureCache = new Set();\n const renderedFeatures: Feature[] = [];\n\n for (const f of features) {\n const featureId = getFeatureUniqueId(f.object, this.props.uniqueIdProperty);\n\n if (featureId === undefined) {\n // we have no id for the feature, we just add to the list\n renderedFeatures.push(f.object as Feature);\n } else if (!featureCache.has(featureId)) {\n // Add removing duplicates\n featureCache.add(featureId);\n renderedFeatures.push(f.object as Feature);\n }\n }\n\n return renderedFeatures;\n }\n\n private _setWGS84PropertyForTiles(): void {\n const propName = 'dataInWGS84';\n const tileset: Tileset2D = this.state.tileset;\n\n // @ts-expect-error selectedTiles are always initialized when tile is being processed\n tileset.selectedTiles.forEach((tile: Tile2DHeader & ContentWGS84Cache) => {\n if (!tile.hasOwnProperty(propName)) {\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(tile, propName, {\n get: () => {\n // Still loading or encountered an error\n if (!tile.content) {\n return null;\n }\n\n if (this.state.binary && Array.isArray(tile.content) && !tile.content.length) {\n // TODO: @loaders.gl/mvt returns [] when no content. It should return a valid empty binary.\n // https://github.com/visgl/loaders.gl/pull/1137\n return [];\n }\n\n const {bbox} = tile;\n if (tile._contentWGS84 === undefined && isGeoBoundingBox(bbox)) {\n // Create a cache to transform only once\n\n const content = this.state.binary ? binaryToGeojson(tile.content) : tile.content;\n tile._contentWGS84 = content.map(feature =>\n transformTileCoordsToWGS84(feature, bbox, this.context.viewport)\n );\n }\n return tile._contentWGS84;\n }\n });\n }\n });\n }\n}\n\nfunction getFeatureUniqueId(feature: Feature, uniqueIdProperty: string | undefined) {\n if (feature.properties && uniqueIdProperty) {\n return feature.properties[uniqueIdProperty];\n }\n\n if ('id' in feature) {\n return feature.id;\n }\n\n return undefined;\n}\n\nfunction getFeatureLayerName(feature: Feature): string | null {\n return feature.properties?.layerName || null;\n}\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nfunction transformTileCoordsToWGS84(\n object: Feature,\n bbox: GeoBoundingBox,\n viewport: Viewport\n): Feature {\n const feature = {\n ...object,\n geometry: {\n type: object.geometry.type\n }\n };\n\n // eslint-disable-next-line accessor-pairs\n Object.defineProperty(feature.geometry, 'coordinates', {\n get: () => {\n const wgs84Geom = transform(object.geometry, bbox, viewport);\n return wgs84Geom.coordinates;\n }\n });\n\n return feature as Feature;\n}\n"],"file":"mvt-layer.js"}
|
|
@@ -14,32 +14,27 @@ const defaultProps = {
|
|
|
14
14
|
value: [0, 0, 0, 255]
|
|
15
15
|
},
|
|
16
16
|
pointSize: 1.0,
|
|
17
|
-
data:
|
|
17
|
+
data: '',
|
|
18
18
|
loader: Tiles3DLoader,
|
|
19
19
|
onTilesetLoad: {
|
|
20
20
|
type: 'function',
|
|
21
|
-
value: tileset3d => {}
|
|
22
|
-
compare: false
|
|
21
|
+
value: tileset3d => {}
|
|
23
22
|
},
|
|
24
23
|
onTileLoad: {
|
|
25
24
|
type: 'function',
|
|
26
|
-
value: tileHeader => {}
|
|
27
|
-
compare: false
|
|
25
|
+
value: tileHeader => {}
|
|
28
26
|
},
|
|
29
27
|
onTileUnload: {
|
|
30
28
|
type: 'function',
|
|
31
|
-
value: tileHeader => {}
|
|
32
|
-
compare: false
|
|
29
|
+
value: tileHeader => {}
|
|
33
30
|
},
|
|
34
31
|
onTileError: {
|
|
35
32
|
type: 'function',
|
|
36
|
-
value: (tile, message, url) => {}
|
|
37
|
-
compare: false
|
|
33
|
+
value: (tile, message, url) => {}
|
|
38
34
|
},
|
|
39
35
|
_getMeshColor: {
|
|
40
36
|
type: 'function',
|
|
41
|
-
value: tileHeader => [255, 255, 255]
|
|
42
|
-
compare: false
|
|
37
|
+
value: tileHeader => [255, 255, 255]
|
|
43
38
|
}
|
|
44
39
|
};
|
|
45
40
|
export default class Tile3DLayer extends CompositeLayer {
|