@deck.gl/geo-layers 8.9.34 → 8.9.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/dist.dev.js +17 -13
  2. package/dist/es5/mvt-layer/find-index-binary.js.map +1 -1
  3. package/dist/es5/mvt-layer/mvt-layer.js +41 -24
  4. package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
  5. package/dist/es5/tile-layer/tile-layer.js +19 -8
  6. package/dist/es5/tile-layer/tile-layer.js.map +1 -1
  7. package/dist/es5/tileset-2d/tile-2d-header.js.map +1 -1
  8. package/dist/es5/tileset-2d/tile-2d-traversal.js.map +1 -1
  9. package/dist/es5/tileset-2d/tileset-2d.js +6 -2
  10. package/dist/es5/tileset-2d/tileset-2d.js.map +1 -1
  11. package/dist/es5/tileset-2d/utils.js +1 -1
  12. package/dist/es5/tileset-2d/utils.js.map +1 -1
  13. package/dist/es5/trips-layer/trips-layer.js.map +1 -1
  14. package/dist/esm/mvt-layer/find-index-binary.js.map +1 -1
  15. package/dist/esm/mvt-layer/mvt-layer.js +19 -9
  16. package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
  17. package/dist/esm/tile-layer/tile-layer.js +9 -5
  18. package/dist/esm/tile-layer/tile-layer.js.map +1 -1
  19. package/dist/esm/tileset-2d/tile-2d-header.js.map +1 -1
  20. package/dist/esm/tileset-2d/tile-2d-traversal.js.map +1 -1
  21. package/dist/esm/tileset-2d/tileset-2d.js +6 -2
  22. package/dist/esm/tileset-2d/tileset-2d.js.map +1 -1
  23. package/dist/esm/tileset-2d/utils.js +1 -1
  24. package/dist/esm/tileset-2d/utils.js.map +1 -1
  25. package/dist/esm/trips-layer/trips-layer.js.map +1 -1
  26. package/dist.min.js +37 -37
  27. package/package.json +2 -2
  28. package/src/mvt-layer/find-index-binary.ts +6 -9
  29. package/src/mvt-layer/mvt-layer.ts +25 -12
  30. package/src/tile-layer/tile-layer.ts +15 -7
  31. package/src/tileset-2d/tile-2d-header.ts +2 -1
  32. package/src/tileset-2d/tile-2d-traversal.ts +1 -1
  33. package/src/tileset-2d/tileset-2d.ts +9 -5
  34. package/src/tileset-2d/utils.ts +3 -3
  35. package/src/trips-layer/trips-layer.ts +1 -1
  36. package/typed/mvt-layer/find-index-binary.d.ts +4 -5
  37. package/typed/mvt-layer/find-index-binary.d.ts.map +1 -1
  38. package/typed/mvt-layer/mvt-layer.d.ts +11 -2
  39. package/typed/mvt-layer/mvt-layer.d.ts.map +1 -1
  40. package/typed/tile-layer/tile-layer.d.ts +6 -1
  41. package/typed/tile-layer/tile-layer.d.ts.map +1 -1
  42. package/typed/tileset-2d/tile-2d-header.d.ts +2 -1
  43. package/typed/tileset-2d/tile-2d-header.d.ts.map +1 -1
  44. package/typed/tileset-2d/tile-2d-traversal.d.ts +1 -1
  45. package/typed/tileset-2d/tile-2d-traversal.d.ts.map +1 -1
  46. package/typed/tileset-2d/tileset-2d.d.ts +5 -5
  47. package/typed/tileset-2d/tileset-2d.d.ts.map +1 -1
  48. package/typed/tileset-2d/utils.d.ts +2 -2
  49. package/typed/tileset-2d/utils.d.ts.map +1 -1
  50. package/typed/trips-layer/trips-layer.d.ts +1 -1
  51. package/typed/trips-layer/trips-layer.d.ts.map +1 -1
@@ -24,18 +24,28 @@ const defaultProps = { ...GeoJsonLayer.defaultProps,
24
24
  binary: true
25
25
  };
26
26
  export default class MVTLayer extends TileLayer {
27
+ constructor(...args) {
28
+ super(...args);
29
+
30
+ _defineProperty(this, "state", void 0);
31
+ }
32
+
27
33
  initializeState() {
28
34
  super.initializeState();
29
35
  const binary = this.context.viewport.resolution !== undefined ? false : this.props.binary;
30
36
  this.setState({
31
37
  binary,
32
38
  data: null,
33
- tileJSON: null
39
+ tileJSON: null,
40
+ hoveredFeatureId: null,
41
+ hoveredFeatureLayerName: null
34
42
  });
35
43
  }
36
44
 
37
45
  get isLoaded() {
38
- return this.state && this.state.data && this.state.tileset && super.isLoaded;
46
+ var _this$state;
47
+
48
+ return Boolean(((_this$state = this.state) === null || _this$state === void 0 ? void 0 : _this$state.data) && super.isLoaded);
39
49
  }
40
50
 
41
51
  updateState({
@@ -44,13 +54,13 @@ export default class MVTLayer extends TileLayer {
44
54
  context,
45
55
  changeFlags
46
56
  }) {
47
- var _this$state;
57
+ var _this$state2;
48
58
 
49
59
  if (changeFlags.dataChanged) {
50
60
  this._updateTileData();
51
61
  }
52
62
 
53
- if ((_this$state = this.state) !== null && _this$state !== void 0 && _this$state.data) {
63
+ if ((_this$state2 = this.state) !== null && _this$state2 !== void 0 && _this$state2.data) {
54
64
  super.updateState({
55
65
  props,
56
66
  oldProps,
@@ -103,7 +113,7 @@ export default class MVTLayer extends TileLayer {
103
113
  layer: this
104
114
  });
105
115
  }
106
- } else if (data.tilejson) {
116
+ } else if (data && typeof data === 'object' && 'tilejson' in data) {
107
117
  tileJSON = data;
108
118
  }
109
119
 
@@ -140,9 +150,9 @@ export default class MVTLayer extends TileLayer {
140
150
  }
141
151
 
142
152
  renderLayers() {
143
- var _this$state2;
153
+ var _this$state3;
144
154
 
145
- if (!((_this$state2 = this.state) !== null && _this$state2 !== void 0 && _this$state2.data)) return null;
155
+ if (!((_this$state3 = this.state) !== null && _this$state3 !== void 0 && _this$state3.data)) return null;
146
156
  return super.renderLayers();
147
157
  }
148
158
 
@@ -224,8 +234,8 @@ export default class MVTLayer extends TileLayer {
224
234
  hoveredFeatureLayerName
225
235
  } = this.state;
226
236
  const hoveredFeature = info.object;
227
- let newHoveredFeatureId;
228
- let newHoveredFeatureLayerName;
237
+ let newHoveredFeatureId = null;
238
+ let newHoveredFeatureLayerName = null;
229
239
 
230
240
  if (hoveredFeature) {
231
241
  newHoveredFeatureId = getFeatureUniqueId(hoveredFeature, uniqueIdProperty);
@@ -1 +1 @@
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 | number | 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"}
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","hoveredFeatureId","hoveredFeatureLayerName","isLoaded","Boolean","state","updateState","oldProps","changeFlags","dataChanged","_updateTileData","_setWGS84PropertyForTiles","highlightColor","Array","isArray","fetch","propName","layer","error","raiseError","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","hoveredFeature","object","newHoveredFeatureId","newHoveredFeatureLayerName","getFeatureUniqueId","getFeatureLayerName","getPickingInfo","params","isWGS84","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","tileset","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, URLTemplate} 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 Omit<TileLayerProps<ParsedMvtTile>, 'data'>;\n\n/** Props added by the MVTLayer */\nexport type _MVTLayerProps = {\n data: TileJson | URLTemplate;\n\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 | number | 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 state!: TileLayer<ParsedMvtTile>['state'] & {\n binary: boolean;\n data: URLTemplate;\n tileJSON: TileJson | null;\n highlightColor?: number[];\n hoveredFeatureId: number | string | null;\n hoveredFeatureLayerName: string | null;\n };\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 hoveredFeatureId: null,\n hoveredFeatureLayerName: null\n });\n }\n\n get isLoaded(): boolean {\n return Boolean(this.state?.data && 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 = this.props.data;\n let tileJSON: TileJson | null = 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 && typeof data === 'object' && 'tilejson' in data) {\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 = 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: string | number | null = null;\n let newHoveredFeatureLayerName: string | null = null;\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"}
@@ -53,6 +53,12 @@ const defaultProps = {
53
53
  zoomOffset: 0
54
54
  };
55
55
  export default class TileLayer extends CompositeLayer {
56
+ constructor(...args) {
57
+ super(...args);
58
+
59
+ _defineProperty(this, "state", void 0);
60
+ }
61
+
56
62
  initializeState() {
57
63
  this.state = {
58
64
  tileset: null,
@@ -69,7 +75,7 @@ export default class TileLayer extends CompositeLayer {
69
75
  get isLoaded() {
70
76
  var _this$state2, _this$state2$tileset, _this$state2$tileset$;
71
77
 
72
- return (_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : (_this$state2$tileset$ = _this$state2$tileset.selectedTiles) === null || _this$state2$tileset$ === void 0 ? void 0 : _this$state2$tileset$.every(tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded));
78
+ return Boolean((_this$state2 = this.state) === null || _this$state2 === void 0 ? void 0 : (_this$state2$tileset = _this$state2.tileset) === null || _this$state2$tileset === void 0 ? void 0 : (_this$state2$tileset$ = _this$state2$tileset.selectedTiles) === null || _this$state2$tileset$ === void 0 ? void 0 : _this$state2$tileset$.every(tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)));
73
79
  }
74
80
 
75
81
  shouldUpdateState({
@@ -98,7 +104,7 @@ export default class TileLayer extends CompositeLayer {
98
104
  if (dataChanged) {
99
105
  tileset.reloadAll();
100
106
  } else {
101
- this.state.tileset.tiles.forEach(tile => {
107
+ tileset.tiles.forEach(tile => {
102
108
  tile.layers = null;
103
109
  });
104
110
  }
@@ -137,9 +143,7 @@ export default class TileLayer extends CompositeLayer {
137
143
  }
138
144
 
139
145
  _updateTileset() {
140
- const {
141
- tileset
142
- } = this.state;
146
+ const tileset = this.state.tileset;
143
147
  const {
144
148
  zRange,
145
149
  modelMatrix
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","TilesetClass","data","type","value","dataComparator","equal","renderSubLayers","props","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","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","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","sourceTile","picked","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","getSubLayerProps","id","updateTriggers","_offset","Boolean","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible"],"mappings":";AAAA,SACEA,cADF,EAUEC,QAAQ,IAAIC,OAVd,QAWO,eAXP;AAYA,SAAQC,YAAR,QAA2B,iBAA3B;AAIA,SACEC,SADF,EAIEC,gBAJF,QAMO,eANP;AAOA,SAAQC,OAAR,EAA8BC,kBAA9B,QAAuD,eAAvD;AAEA,MAAMC,YAA0C,GAAG;AACjDC,EAAAA,YAAY,EAAEL,SADmC;AAEjDM,EAAAA,IAAI,EAAE;AAACC,IAAAA,IAAI,EAAE,MAAP;AAAeC,IAAAA,KAAK,EAAE;AAAtB,GAF2C;AAGjDC,EAAAA,cAAc,EAAEP,OAAO,CAACQ,KAHyB;AAIjDC,EAAAA,eAAe,EAAE;AAACJ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEI,KAAK,IAAI,IAAIb,YAAJ,CAAiBa,KAAjB;AAAnC,GAJgC;AAKjDC,EAAAA,WAAW,EAAE;AAACN,IAAAA,IAAI,EAAE,UAAP;AAAmBO,IAAAA,QAAQ,EAAE,IAA7B;AAAmCN,IAAAA,KAAK,EAAE;AAA1C,GALoC;AAOjDO,EAAAA,cAAc,EAAE;AAACR,IAAAA,IAAI,EAAE,UAAP;AAAmBO,IAAAA,QAAQ,EAAE,IAA7B;AAAmCN,IAAAA,KAAK,EAAE;AAA1C,GAPiC;AAQjDQ,EAAAA,UAAU,EAAE;AAACT,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAES,IAAI,IAAI,CAAE;AAApC,GARqC;AASjDC,EAAAA,YAAY,EAAE;AAACX,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAES,IAAI,IAAI,CAAE;AAApC,GATmC;AAWjDE,EAAAA,WAAW,EAAE;AAACZ,IAAAA,IAAI,EAAE,UAAP;AAAmBC,IAAAA,KAAK,EAAEY,GAAG,IAAIC,OAAO,CAACC,KAAR,CAAcF,GAAd;AAAjC,GAXoC;AAYjDG,EAAAA,MAAM,EAAE;AAAChB,IAAAA,IAAI,EAAE,OAAP;AAAgBO,IAAAA,QAAQ,EAAE,IAA1B;AAAgCN,IAAAA,KAAK,EAAE,IAAvC;AAA6CgB,IAAAA,OAAO,EAAE;AAAtD,GAZyC;AAajDC,EAAAA,QAAQ,EAAE,GAbuC;AAcjDC,EAAAA,OAAO,EAAE,IAdwC;AAejDC,EAAAA,OAAO,EAAE,CAfwC;AAgBjDC,EAAAA,YAAY,EAAE,IAhBmC;AAiBjDC,EAAAA,gBAAgB,EAAE,IAjB+B;AAkBjDC,EAAAA,kBAAkB,EAAE7B,gBAlB6B;AAmBjD8B,EAAAA,MAAM,EAAE,IAnByC;AAoBjDC,EAAAA,WAAW,EAAE,CApBoC;AAqBjDC,EAAAA,UAAU,EAAE;AArBqC,CAAnD;AA4HA,eAAe,MAAMC,SAAN,SAAkEtC,cAAlE,CAEb;AAIAuC,EAAAA,eAAe,GAAG;AAChB,SAAKC,KAAL,GAAa;AACXC,MAAAA,OAAO,EAAE,IADE;AAEXC,MAAAA,QAAQ,EAAE;AAFC,KAAb;AAID;;AAEDC,EAAAA,aAAa,GAAG;AAAA;;AACd,wBAAKH,KAAL,mFAAYC,OAAZ,4EAAqBG,QAArB;AACD;;AAEW,MAARF,QAAQ,GAAY;AAAA;;AACtB,2BAAO,KAAKF,KAAZ,yEAAO,aAAYC,OAAnB,kFAAO,qBAAqBI,aAA5B,0DAAO,sBAAoCC,KAApC,CACLzB,IAAI,IAAIA,IAAI,CAACqB,QAAL,IAAiBrB,IAAI,CAAC0B,MAAtB,IAAgC1B,IAAI,CAAC0B,MAAL,CAAYD,KAAZ,CAAkBE,KAAK,IAAIA,KAAK,CAACN,QAAjC,CADnC,CAAP;AAGD;;AAEDO,EAAAA,iBAAiB,CAAC;AAACC,IAAAA;AAAD,GAAD,EAAyB;AACxC,WAAOA,WAAW,CAACC,gBAAnB;AACD;;AAEDC,EAAAA,WAAW,CAAC;AAACF,IAAAA;AAAD,GAAD,EAAwC;AACjD,QAAI;AAACT,MAAAA;AAAD,QAAY,KAAKD,KAArB;AACA,UAAMa,YAAY,GAAGH,WAAW,CAACI,kBAAZ,IAAkCJ,WAAW,CAACK,qBAAnE;AACA,UAAMC,WAAW,GACfN,WAAW,CAACM,WAAZ,IACCN,WAAW,CAACK,qBAAZ,KACEL,WAAW,CAACK,qBAAZ,CAAkCE,GAAlC,IAAyCP,WAAW,CAACK,qBAAZ,CAAkCtC,WAD7E,CAFH;;AAKA,QAAI,CAACwB,OAAL,EAAc;AACZA,MAAAA,OAAO,GAAG,IAAI,KAAKzB,KAAL,CAAWP,YAAf,CAA4B,KAAKiD,kBAAL,EAA5B,CAAV;AACA,WAAKC,QAAL,CAAc;AAAClB,QAAAA;AAAD,OAAd;AACD,KAHD,MAGO,IAAIY,YAAJ,EAAkB;AACvBZ,MAAAA,OAAO,CAACmB,UAAR,CAAmB,KAAKF,kBAAL,EAAnB;;AAEA,UAAIF,WAAJ,EAAiB;AAGff,QAAAA,OAAO,CAACoB,SAAR;AACD,OAJD,MAIO;AAEL,aAAKrB,KAAL,CAAWC,OAAX,CAAmBqB,KAAnB,CAAyBC,OAAzB,CAAiC1C,IAAI,IAAI;AACvCA,UAAAA,IAAI,CAAC0B,MAAL,GAAc,IAAd;AACD,SAFD;AAGD;AACF;;AAED,SAAKiB,cAAL;AACD;;AAEDN,EAAAA,kBAAkB,GAAmB;AACnC,UAAM;AACJ7B,MAAAA,QADI;AAEJG,MAAAA,YAFI;AAGJC,MAAAA,gBAHI;AAIJC,MAAAA,kBAJI;AAKJP,MAAAA,MALI;AAMJG,MAAAA,OANI;AAOJC,MAAAA,OAPI;AAQJK,MAAAA,WARI;AASJC,MAAAA;AATI,QAUF,KAAKrB,KAVT;AAYA,WAAO;AACLgB,MAAAA,YADK;AAELC,MAAAA,gBAFK;AAGLH,MAAAA,OAHK;AAILC,MAAAA,OAJK;AAKLF,MAAAA,QALK;AAMLK,MAAAA,kBANK;AAOLP,MAAAA,MAPK;AAQLS,MAAAA,WARK;AASLC,MAAAA,UATK;AAWLpB,MAAAA,WAAW,EAAE,KAAKA,WAAL,CAAiBgD,IAAjB,CAAsB,IAAtB,CAXR;AAYL7C,MAAAA,UAAU,EAAE,KAAK8C,WAAL,CAAiBD,IAAjB,CAAsB,IAAtB,CAZP;AAaL1C,MAAAA,WAAW,EAAE,KAAK4C,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,CAbR;AAcL3C,MAAAA,YAAY,EAAE,KAAK8C,aAAL,CAAmBH,IAAnB,CAAwB,IAAxB;AAdT,KAAP;AAgBD;;AAEOD,EAAAA,cAAc,GAAS;AAC7B,UAAM;AAACvB,MAAAA;AAAD,QAAY,KAAKD,KAAvB;AACA,UAAM;AAACL,MAAAA,MAAD;AAASkC,MAAAA;AAAT,QAAwB,KAAKrD,KAAnC;AACA,UAAMsD,WAAW,GAAG7B,OAAO,CAAC8B,MAAR,CAAe,KAAKC,OAAL,CAAaC,QAA5B,EAAsC;AAACtC,MAAAA,MAAD;AAASkC,MAAAA;AAAT,KAAtC,CAApB;AACA,UAAM;AAAC3B,MAAAA;AAAD,QAAaD,OAAnB;AAEA,UAAMiC,mBAAmB,GAAG,KAAKlC,KAAL,CAAWE,QAAX,KAAwBA,QAApD;AACA,UAAMiC,cAAc,GAAG,KAAKnC,KAAL,CAAW8B,WAAX,KAA2BA,WAAlD;;AAEA,QAAI5B,QAAQ,KAAKgC,mBAAmB,IAAIC,cAA5B,CAAZ,EAAyD;AACvD,WAAKC,eAAL;AACD;;AAED,QAAID,cAAJ,EAAoB;AAElB,WAAKhB,QAAL,CAAc;AAACW,QAAAA;AAAD,OAAd;AACD;;AAED,SAAK9B,KAAL,CAAWE,QAAX,GAAsBA,QAAtB;AACD;;AAEDkC,EAAAA,eAAe,GAAS;AACtB,UAAM;AAACnC,MAAAA;AAAD,QAAY,KAAKD,KAAvB;AACA,UAAM;AAACrB,MAAAA;AAAD,QAAmB,KAAKH,KAA9B;;AAEA,QAAIG,cAAJ,EAAoB;AAClBA,MAAAA,cAAc,CAACsB,OAAO,CAACI,aAAT,CAAd;AACD;AACF;;AAEDqB,EAAAA,WAAW,CAAC7C,IAAD,EAAkC;AAC3C,SAAKL,KAAL,CAAWI,UAAX,CAAsBC,IAAtB;AACAA,IAAAA,IAAI,CAAC0B,MAAL,GAAc,IAAd;AAEA,SAAK8B,cAAL;AACD;;AAEDV,EAAAA,YAAY,CAACzC,KAAD,EAAaL,IAAb,EAAwC;AAClD,SAAKL,KAAL,CAAWO,WAAX,CAAuBG,KAAvB;AACAL,IAAAA,IAAI,CAAC0B,MAAL,GAAc,IAAd;AAEA,SAAK8B,cAAL;AACD;;AAEDT,EAAAA,aAAa,CAAC/C,IAAD,EAA4B;AACvC,SAAKL,KAAL,CAAWM,YAAX,CAAwBD,IAAxB;AACD;;AAIDJ,EAAAA,WAAW,CAACI,IAAD,EAAqD;AAC9D,UAAM;AAACX,MAAAA,IAAD;AAAOO,MAAAA,WAAP;AAAoB6D,MAAAA;AAApB,QAA6B,KAAK9D,KAAxC;AACA,UAAM;AAAC+D,MAAAA;AAAD,QAAW1D,IAAjB;AAEAA,IAAAA,IAAI,CAAC2D,GAAL,GACE,OAAOtE,IAAP,KAAgB,QAAhB,IAA4BuE,KAAK,CAACC,OAAN,CAAcxE,IAAd,CAA5B,GAAkDH,kBAAkB,CAACG,IAAD,EAAOW,IAAP,CAApE,GAAmF,IADrF;;AAGA,QAAIJ,WAAJ,EAAiB;AACf,aAAOA,WAAW,CAACI,IAAD,CAAlB;AACD;;AACD,QAAIyD,KAAK,IAAIzD,IAAI,CAAC2D,GAAlB,EAAuB;AACrB,aAAOF,KAAK,CAACzD,IAAI,CAAC2D,GAAN,EAAW;AAACG,QAAAA,QAAQ,EAAE,MAAX;AAAmBnC,QAAAA,KAAK,EAAE,IAA1B;AAAgC+B,QAAAA;AAAhC,OAAX,CAAZ;AACD;;AACD,WAAO,IAAP;AACD;;AAEDhE,EAAAA,eAAe,CACbC,KADa,EAOc;AAC3B,WAAO,KAAKA,KAAL,CAAWD,eAAX,CAA2BC,KAA3B,CAAP;AACD;;AAEDoE,EAAAA,sBAAsB,CAAC/D,IAAD,EAAiD;AACrE,WAAO,IAAP;AACD;;AAEDgE,EAAAA,cAAc,CAAC;AAACC,IAAAA,IAAD;AAAOC,IAAAA;AAAP,GAAD,EAAqE;AACjF,UAAMC,UAAU,GAAID,WAAD,CAAqBvE,KAArB,CAA2BK,IAA9C;;AACA,QAAIiE,IAAI,CAACG,MAAT,EAAiB;AACdH,MAAAA,IAAD,CAAcjE,IAAd,GAAqBmE,UAArB;AACD;;AACAF,IAAAA,IAAD,CAAcE,UAAd,GAA2BA,UAA3B;AACA,WAAOF,IAAP;AACD;;AAESI,EAAAA,oBAAoB,CAACJ,IAAD,EAA0B;AACtD,UAAME,UAAU,GAAIF,IAAD,CAAcE,UAAjC;;AACA,QAAIA,UAAU,IAAIA,UAAU,CAACzC,MAA7B,EAAqC;AACnC,WAAK,MAAMC,KAAX,IAAoBwC,UAAU,CAACzC,MAA/B,EAAuC;AACrCC,QAAAA,KAAK,CAAC2C,mBAAN,CAA0BL,IAA1B;AACD;AACF;AACF;;AAEDM,EAAAA,YAAY,GAA8B;AACxC,WAAO,KAAKpD,KAAL,CAAWC,OAAX,CAAmBqB,KAAnB,CAAyB+B,GAAzB,CAA8BxE,IAAD,IAAwB;AAC1D,YAAMyE,aAAa,GAAG,KAAKV,sBAAL,CAA4B/D,IAA5B,CAAtB;;AAEA,UAAI,CAACA,IAAI,CAACqB,QAAN,IAAkB,CAACrB,IAAI,CAAC0E,OAA5B,EAAqC,CAEpC,CAFD,MAEO,IAAI,CAAC1E,IAAI,CAAC0B,MAAV,EAAkB;AACvB,cAAMA,MAAM,GAAG,KAAKhC,eAAL,CAAqB,EAClC,GAAG,KAAKC,KAD0B;AAElC,aAAG,KAAKgF,gBAAL,CAAsB;AACvBC,YAAAA,EAAE,EAAE5E,IAAI,CAAC4E,EADc;AAEvBC,YAAAA,cAAc,EAAE,KAAKlF,KAAL,CAAWkF;AAFJ,WAAtB,CAF+B;AAMlCxF,UAAAA,IAAI,EAAEW,IAAI,CAAC0E,OANuB;AAOlCI,UAAAA,OAAO,EAAE,CAPyB;AAQlC9E,UAAAA;AARkC,SAArB,CAAf;AAUAA,QAAAA,IAAI,CAAC0B,MAAL,GAAe7C,OAAO,CAAC6C,MAAD,EAASqD,OAAT,CAAR,CAA6DP,GAA7D,CAAiE7C,KAAK,IAClFA,KAAK,CAACqD,KAAN,CAAY;AACVhF,UAAAA,IADU;AAEV,aAAGyE;AAFO,SAAZ,CADY,CAAd;AAMD,OAjBM,MAiBA,IACLA,aAAa,IACbzE,IAAI,CAAC0B,MAAL,CAAY,CAAZ,CADA,IAEAuD,MAAM,CAACC,IAAP,CAAYT,aAAZ,EAA2BU,IAA3B,CACErB,QAAQ,IAAI9D,IAAI,CAAC0B,MAAL,CAAa,CAAb,EAAgB/B,KAAhB,CAAsBmE,QAAtB,MAAoCW,aAAa,CAACX,QAAD,CAD/D,CAHK,EAML;AACA9D,QAAAA,IAAI,CAAC0B,MAAL,GAAc1B,IAAI,CAAC0B,MAAL,CAAY8C,GAAZ,CAAgB7C,KAAK,IAAIA,KAAK,CAACqD,KAAN,CAAYP,aAAZ,CAAzB,CAAd;AACD;;AACD,aAAOzE,IAAI,CAAC0B,MAAZ;AACD,KAhCM,CAAP;AAiCD;;AAED0D,EAAAA,cAAc,CAAC;AAACzD,IAAAA,KAAD;AAAQ0D,IAAAA;AAAR,GAAD,EAAmC;AAC/C,UAAM;AAACrF,MAAAA;AAAD,QAAU2B,KAAD,CAAuChC,KAAtD;AACA,WAAO,KAAKwB,KAAL,CAAWC,OAAX,CAAmBkE,aAAnB,CAAiCtF,IAAjC,EAAuCqF,QAAvC,CAAP;AACD;;AA/ND;;gBAFmBpE,S,kBAGiB9B,Y;;gBAHjB8B,S,eAIA,W","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 ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\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":["CompositeLayer","_flatten","flatten","GeoJsonLayer","Tileset2D","STRATEGY_DEFAULT","urlType","getURLFromTemplate","defaultProps","TilesetClass","data","type","value","dataComparator","equal","renderSubLayers","props","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","compare","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","zRange","maxRequests","zoomOffset","TileLayer","initializeState","state","tileset","isLoaded","finalizeState","finalize","Boolean","selectedTiles","every","layers","layer","shouldUpdateState","changeFlags","somethingChanged","updateState","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","getSubLayerPropsByTile","getPickingInfo","info","sourceLayer","sourceTile","picked","_updateAutoHighlight","updateAutoHighlight","renderLayers","map","subLayerProps","content","getSubLayerProps","id","updateTriggers","_offset","clone","Object","keys","some","filterSubLayer","cullRect","isTileVisible"],"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 state!: {\n tileset: Tileset2D | null;\n isLoaded: boolean;\n frameNumber?: number;\n };\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 Boolean(\n this.state?.tileset?.selectedTiles?.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n )\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 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.tileset!;\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 ...this.getSubLayerProps({\n id: tile.id,\n updateTriggers: this.props.updateTriggers\n }),\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 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-header.ts"],"names":["Tile2DHeader","constructor","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","bbox","_bbox","value","boundingBox","west","south","east","north","left","top","right","bottom","data","isLoading","then","isLoaded","Boolean","needsReload","byteLength","result","Number","isFinite","console","error","_loadData","getData","requestScheduler","onLoad","onError","id","userData","zoom","loaderId","AbortController","signal","requestToken","scheduleRequest","tile","done","tileData","err","loadData","opts","setNeedsReload","abort"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: any[] | null; // Layer[] | null\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-header.ts"],"names":["Tile2DHeader","constructor","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","bbox","_bbox","value","boundingBox","west","south","east","north","left","top","right","bottom","data","isLoading","then","isLoaded","Boolean","needsReload","byteLength","result","Number","isFinite","console","error","_loadData","getData","requestScheduler","onLoad","onError","id","userData","zoom","loaderId","AbortController","signal","requestToken","scheduleRequest","tile","done","tileData","err","loadData","opts","setNeedsReload","abort"],"mappings":"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","sourcesContent":["/* eslint-env browser */\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\nimport type {Layer} from '@deck.gl/core';\n\nexport type TileLoadDataProps<DataT = any> = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<DataT>;\n onLoad: (tile: Tile2DHeader<DataT>) => void;\n onError: (error: any, tile: Tile2DHeader<DataT>) => void;\n};\n\nexport class Tile2DHeader<DataT = any> {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: DataT | null;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `getTileMetadata`\n boundingBox!: [min: number[], max: number[]]; // assigned _always_ with bbox from `getTileMetadata`\n\n private _abortController: AbortController | null;\n private _loader: Promise<void> | undefined;\n private _loaderId: number;\n private _isLoaded: boolean;\n private _isCancelled: boolean;\n private _needsReload: boolean;\n private _bbox!: TileBoundingBox;\n\n constructor(index: TileIndex) {\n this.index = index;\n this.isVisible = false;\n this.isSelected = false;\n this.parent = null;\n this.children = [];\n\n this.content = null;\n\n this._loader = undefined;\n this._abortController = null;\n this._loaderId = 0;\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n }\n\n /** @deprecated use `boundingBox` instead */\n get bbox(): TileBoundingBox {\n return this._bbox;\n }\n\n // TODO - remove in v9\n set bbox(value: TileBoundingBox) {\n // Only set once from `Tileset2D.getTileMetadata`\n if (this._bbox) return;\n\n this._bbox = value;\n if ('west' in value) {\n this.boundingBox = [\n [value.west, value.south],\n [value.east, value.north]\n ];\n } else {\n this.boundingBox = [\n [value.left, value.top],\n [value.right, value.bottom]\n ];\n }\n }\n\n get data(): Promise<DataT | null> | DataT | null {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded(): boolean {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading(): boolean {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload(): boolean {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength(): number {\n const result = this.content ? (this.content as any).byteLength : 0;\n if (!Number.isFinite(result)) {\n // eslint-disable-next-line no-console\n console.error('byteLength not defined in tile data');\n }\n return result;\n }\n\n /* eslint-disable max-statements */\n private async _loadData({\n getData,\n requestScheduler,\n onLoad,\n onError\n }: TileLoadDataProps<DataT>): Promise<void> {\n const {index, id, bbox, userData, zoom} = this;\n const loaderId = this._loaderId;\n\n this._abortController = new AbortController();\n const {signal} = this._abortController;\n\n // @ts-expect-error (2345) Argument of type '(tile: any) => 1 | -1' is not assignable ...\n const requestToken = await requestScheduler.scheduleRequest(this, tile => {\n return tile.isSelected ? 1 : -1;\n });\n\n if (!requestToken) {\n this._isCancelled = true;\n return;\n }\n // A tile can be cancelled while being scheduled\n if (this._isCancelled) {\n requestToken.done();\n return;\n }\n\n let tileData: DataT | null = null;\n let error;\n try {\n tileData = await getData({index, id, bbox, userData, zoom, signal});\n } catch (err) {\n error = err || true;\n } finally {\n requestToken.done();\n }\n\n // If loadData has been called with a newer version, discard the result from this operation\n if (loaderId !== this._loaderId) {\n return;\n }\n // Clear the `isLoading` flag\n this._loader = undefined;\n // Rewrite tile content with the result of getTileData if successful, or `null` in case of\n // error or cancellation\n this.content = tileData;\n // If cancelled, do not invoke the callbacks\n // Consider it loaded if we tried to cancel but `getTileData` still returned data\n if (this._isCancelled && !tileData) {\n this._isLoaded = false;\n return;\n }\n this._isLoaded = true;\n this._isCancelled = false;\n\n if (error) {\n onError(error, this);\n } else {\n onLoad(this);\n }\n }\n\n loadData(opts: TileLoadDataProps): Promise<void> {\n this._isLoaded = false;\n this._isCancelled = false;\n this._needsReload = false;\n this._loaderId++;\n this._loader = this._loadData(opts);\n return this._loader;\n }\n\n setNeedsReload(): void {\n if (this.isLoading) {\n this.abort();\n this._loader = undefined;\n }\n this._needsReload = true;\n }\n\n abort(): void {\n if (this.isLoaded) {\n return;\n }\n\n this._isCancelled = true;\n this._abortController?.abort();\n }\n}\n"],"file":"tile-2d-header.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["WebMercatorViewport","_GlobeViewport","CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","children","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | undefined,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
1
+ {"version":3,"sources":["../../../src/tileset-2d/tile-2d-traversal.ts"],"names":["WebMercatorViewport","_GlobeViewport","CullingVolume","Plane","AxisAlignedBoundingBox","makeOrientedBoundingBoxFromPoints","lngLatToWorld","osmTile2lngLat","TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","constructor","x","y","z","children","_children","update","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","child","getSelected","result","push","node","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","clone","negate","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["import {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\n\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\nimport {Bounds, TileIndex, ZRange} from './types';\nimport {osmTile2lngLat} from './utils';\n\nconst TILE_SIZE = 512;\n// number of world copies to check\nconst MAX_MAPS = 3;\n// for calculating bounding volume of a tile in a non-web-mercator viewport\nconst REF_POINTS_5 = [\n [0.5, 0.5],\n [0, 0],\n [0, 1],\n [1, 0],\n [1, 1]\n]; // 4 corners and center\nconst REF_POINTS_9 = REF_POINTS_5.concat([\n [0, 0.5],\n [0.5, 0],\n [1, 0.5],\n [0.5, 1]\n]); // 4 corners, center and 4 mid points\nconst REF_POINTS_11 = REF_POINTS_9.concat([\n [0.25, 0.5],\n [0.75, 0.5]\n]); // 2 additional points on equator for top tile\n\nclass OSMNode {\n x: number;\n y: number;\n z: number;\n\n private childVisible?: boolean;\n private selected?: boolean;\n\n private _children?: OSMNode[];\n\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get children() {\n if (!this._children) {\n const x = this.x * 2;\n const y = this.y * 2;\n const z = this.z + 1;\n this._children = [\n new OSMNode(x, y, z),\n new OSMNode(x, y + 1, z),\n new OSMNode(x + 1, y, z),\n new OSMNode(x + 1, y + 1, z)\n ];\n }\n return this._children;\n }\n\n // eslint-disable-next-line complexity\n update(params: {\n viewport: Viewport;\n project: ((xyz: number[]) => number[]) | null;\n cullingVolume: CullingVolume;\n elevationBounds: ZRange;\n minZ: number;\n maxZ: number;\n bounds?: Bounds;\n offset: number;\n }) {\n const {viewport, cullingVolume, elevationBounds, minZ, maxZ, bounds, offset, project} = params;\n const boundingVolume = this.getBoundingVolume(elevationBounds, offset, project);\n\n // First, check if this tile is visible\n if (bounds && !this.insideBounds(bounds)) {\n return false;\n }\n\n const isInside = cullingVolume.computeVisibility(boundingVolume);\n if (isInside < 0) {\n return false;\n }\n\n // Avoid loading overlapping tiles - if a descendant is requested, do not request the ancester\n if (!this.childVisible) {\n let {z} = this;\n if (z < maxZ && z >= minZ) {\n // Adjust LOD\n // If the tile is far enough from the camera, accept a lower zoom level\n const distance =\n (boundingVolume.distanceTo(viewport.cameraPosition) * viewport.scale) / viewport.height;\n z += Math.floor(Math.log2(distance));\n }\n if (z >= maxZ) {\n // LOD is acceptable\n this.selected = true;\n return true;\n }\n }\n\n // LOD is not enough, recursively test child tiles\n this.selected = false;\n this.childVisible = true;\n for (const child of this.children) {\n child.update(params);\n }\n return true;\n }\n\n getSelected(result: OSMNode[] = []): OSMNode[] {\n if (this.selected) {\n result.push(this);\n }\n if (this._children) {\n for (const node of this._children) {\n node.getSelected(result);\n }\n }\n return result;\n }\n\n insideBounds([minX, minY, maxX, maxY]: Bounds): boolean {\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n\n return (\n this.x * extent < maxX &&\n this.y * extent < maxY &&\n (this.x + 1) * extent > minX &&\n (this.y + 1) * extent > minY\n );\n }\n\n getBoundingVolume(\n zRange: ZRange,\n worldOffset: number,\n project: ((xyz: number[]) => number[]) | null\n ) {\n if (project) {\n // Custom projection\n // Estimate bounding box from sample points\n // At low zoom level we need more samples to calculate the bounding volume correctly\n const refPoints = this.z < 1 ? REF_POINTS_11 : this.z < 2 ? REF_POINTS_9 : REF_POINTS_5;\n\n // Convert from tile-relative coordinates to common space\n const refPointPositions: number[][] = [];\n for (const p of refPoints) {\n const lngLat: number[] = osmTile2lngLat(this.x + p[0], this.y + p[1], this.z);\n lngLat[2] = zRange[0];\n refPointPositions.push(project(lngLat));\n\n if (zRange[0] !== zRange[1]) {\n // Account for the elevation volume\n lngLat[2] = zRange[1];\n refPointPositions.push(project(lngLat));\n }\n }\n\n return makeOrientedBoundingBoxFromPoints(refPointPositions);\n }\n\n // Use WebMercator projection\n const scale = Math.pow(2, this.z);\n const extent = TILE_SIZE / scale;\n const originX = this.x * extent + worldOffset * TILE_SIZE;\n // deck's common space is y-flipped\n const originY = TILE_SIZE - (this.y + 1) * extent;\n\n return new AxisAlignedBoundingBox(\n [originX, originY, zRange[0]],\n [originX + extent, originY + extent, zRange[1]]\n );\n }\n}\n\n// eslint-disable-next-line complexity\nexport function getOSMTileIndices(\n viewport: Viewport,\n maxZ: number,\n zRange: ZRange | null,\n bounds?: Bounds\n): TileIndex[] {\n const project: ((xyz: number[]) => number[]) | null =\n viewport instanceof _GlobeViewport && viewport.resolution\n ? // eslint-disable-next-line @typescript-eslint/unbound-method\n viewport.projectPosition\n : null;\n\n // Get the culling volume of the current camera\n const planes: Plane[] = Object.values(viewport.getFrustumPlanes()).map(\n ({normal, distance}) => new Plane(normal.clone().negate(), distance)\n );\n const cullingVolume = new CullingVolume(planes);\n\n // Project zRange from meters to common space\n const unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];\n const elevationMin = (zRange && zRange[0] * unitsPerMeter) || 0;\n const elevationMax = (zRange && zRange[1] * unitsPerMeter) || 0;\n\n // Always load at the current zoom level if pitch is small\n const minZ = viewport instanceof WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;\n\n // Map extent to OSM position\n if (bounds) {\n const [minLng, minLat, maxLng, maxLat] = bounds;\n const topLeft = lngLatToWorld([minLng, maxLat]);\n const bottomRight = lngLatToWorld([maxLng, minLat]);\n bounds = [topLeft[0], TILE_SIZE - topLeft[1], bottomRight[0], TILE_SIZE - bottomRight[1]];\n }\n\n const root = new OSMNode(0, 0, 0);\n const traversalParams = {\n viewport,\n project,\n cullingVolume,\n elevationBounds: [elevationMin, elevationMax] as ZRange,\n minZ,\n maxZ,\n bounds,\n // num. of worlds from the center. For repeated maps\n offset: 0\n };\n\n root.update(traversalParams);\n\n if (\n viewport instanceof WebMercatorViewport &&\n viewport.subViewports &&\n viewport.subViewports.length > 1\n ) {\n // Check worlds in repeated maps\n traversalParams.offset = -1;\n while (root.update(traversalParams)) {\n if (--traversalParams.offset < -MAX_MAPS) {\n break;\n }\n }\n traversalParams.offset = 1;\n while (root.update(traversalParams)) {\n if (++traversalParams.offset > MAX_MAPS) {\n break;\n }\n }\n }\n\n return root.getSelected();\n}\n"],"file":"tile-2d-traversal.js"}
@@ -89,6 +89,7 @@ export class Tileset2D {
89
89
  this._dirty = false;
90
90
  this._cacheByteSize = 0;
91
91
  this._viewport = null;
92
+ this._zRange = null;
92
93
  this._selectedTiles = null;
93
94
  this._frameNumber = 0;
94
95
  this._modelMatrix = new Matrix4();
@@ -152,8 +153,11 @@ export class Tileset2D {
152
153
  update(viewport, {
153
154
  zRange,
154
155
  modelMatrix
155
- } = {}) {
156
- const modelMatrixAsMatrix4 = new Matrix4(modelMatrix);
156
+ } = {
157
+ zRange: null,
158
+ modelMatrix: null
159
+ }) {
160
+ const modelMatrixAsMatrix4 = modelMatrix ? new Matrix4(modelMatrix) : new Matrix4();
157
161
  const isModelMatrixNew = !modelMatrixAsMatrix4.equals(this._modelMatrix);
158
162
 
159
163
  if (!this._viewport || !viewport.equals(this._viewport) || !equals(this._zRange, zRange) || isModelMatrixNew) {