@deck.gl/geo-layers 8.7.8 → 8.8.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.dev.js +62999 -30700
- package/dist/es5/geo-cell-layer/GeoCellLayer.js +3 -3
- package/dist/es5/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/es5/index.js +8 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/mvt-layer/mvt-layer.js +19 -19
- package/dist/es5/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-layer.js +4 -2
- package/dist/es5/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/es5/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/es5/tile-3d-layer/tile-3d-layer.js +13 -10
- package/dist/es5/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-header.js +36 -17
- package/dist/es5/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/es5/tile-layer/tile-2d-traversal.js +13 -3
- package/dist/es5/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/es5/tile-layer/tile-layer.js +38 -32
- package/dist/es5/tile-layer/tile-layer.js.map +1 -1
- package/dist/es5/tile-layer/tileset-2d.js +122 -96
- package/dist/es5/tile-layer/tileset-2d.js.map +1 -1
- package/dist/es5/tile-layer/types.js +2 -0
- package/dist/es5/tile-layer/types.js.map +1 -0
- package/dist/es5/tile-layer/utils.js +27 -9
- package/dist/es5/tile-layer/utils.js.map +1 -1
- package/dist/esm/geo-cell-layer/GeoCellLayer.js +6 -3
- package/dist/esm/geo-cell-layer/GeoCellLayer.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mvt-layer/mvt-layer.js +17 -17
- package/dist/esm/mvt-layer/mvt-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-layer.js +5 -2
- package/dist/esm/quadkey-layer/quadkey-layer.js.map +1 -1
- package/dist/esm/quadkey-layer/quadkey-utils.js.map +1 -1
- package/dist/esm/tile-3d-layer/tile-3d-layer.js +8 -7
- package/dist/esm/tile-3d-layer/tile-3d-layer.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-header.js +54 -18
- package/dist/esm/tile-layer/tile-2d-header.js.map +1 -1
- package/dist/esm/tile-layer/tile-2d-traversal.js +17 -3
- package/dist/esm/tile-layer/tile-2d-traversal.js.map +1 -1
- package/dist/esm/tile-layer/tile-layer.js +23 -17
- package/dist/esm/tile-layer/tile-layer.js.map +1 -1
- package/dist/esm/tile-layer/tileset-2d.js +88 -54
- package/dist/esm/tile-layer/tileset-2d.js.map +1 -1
- package/dist/esm/tile-layer/types.js +2 -0
- package/dist/esm/tile-layer/types.js.map +1 -0
- package/dist/esm/tile-layer/utils.js +26 -11
- package/dist/esm/tile-layer/utils.js.map +1 -1
- package/dist.min.js +2 -2
- package/package.json +11 -11
- package/src/geo-cell-layer/{GeoCellLayer.js → GeoCellLayer.ts} +14 -10
- package/src/index.ts +6 -0
- package/src/mvt-layer/mvt-layer.js +11 -10
- package/src/quadkey-layer/quadkey-layer.ts +39 -0
- package/src/quadkey-layer/{quadkey-utils.js → quadkey-utils.ts} +2 -2
- package/src/tile-3d-layer/tile-3d-layer.js +6 -5
- package/src/tile-layer/{tile-2d-header.js → tile-2d-header.ts} +50 -16
- package/src/tile-layer/{tile-2d-traversal.js → tile-2d-traversal.ts} +49 -12
- package/src/tile-layer/{tile-layer.js → tile-layer.ts} +153 -31
- package/src/tile-layer/{tileset-2d.js → tileset-2d.ts} +143 -66
- package/src/tile-layer/types.ts +17 -0
- package/src/tile-layer/{utils.js → utils.ts} +67 -25
- package/src/quadkey-layer/quadkey-layer.js +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tile-2d-header.
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/tile-2d-header.ts"],"names":["Tile2DHeader","index","isVisible","isSelected","parent","children","content","_loader","undefined","_abortController","_loaderId","_isLoaded","_isCancelled","_needsReload","isLoading","then","data","Boolean","result","byteLength","Number","isFinite","log","error","getData","requestScheduler","onLoad","onError","id","bbox","userData","zoom","loaderId","AbortController","signal","scheduleRequest","tile","requestToken","done","tileData","opts","_loadData","abort","isLoaded"],"mappings":";;;;;;;;;;;;;;;;;;;AACA;;IAUqBA,Y;AAsBnB,wBAAYC,KAAZ,EAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAC5B,SAAKA,KAAL,GAAaA,KAAb;AACA,SAAKC,SAAL,GAAiB,KAAjB;AACA,SAAKC,UAAL,GAAkB,KAAlB;AACA,SAAKC,MAAL,GAAc,IAAd;AACA,SAAKC,QAAL,GAAgB,EAAhB;AAEA,SAAKC,OAAL,GAAe,IAAf;AAEA,SAAKC,OAAL,GAAeC,SAAf;AACA,SAAKC,gBAAL,GAAwB,IAAxB;AACA,SAAKC,SAAL,GAAiB,CAAjB;AACA,SAAKC,SAAL,GAAiB,KAAjB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACA,SAAKC,YAAL,GAAoB,KAApB;AACD;;;;SAED,eAAW;AAAA;;AACT,aAAO,KAAKC,SAAL,IAAkB,KAAKP,OAAvB,GAAiC,KAAKA,OAAL,CAAaQ,IAAb,CAAkB;AAAA,eAAM,KAAI,CAACC,IAAX;AAAA,OAAlB,CAAjC,GAAsE,KAAKV,OAAlF;AACD;;;SAED,eAAe;AACb,aAAO,KAAKK,SAAL,IAAkB,CAAC,KAAKE,YAA/B;AACD;;;SAED,eAAgB;AACd,aAAOI,OAAO,CAAC,KAAKV,OAAN,CAAP,IAAyB,CAAC,KAAKK,YAAtC;AACD;;;SAED,eAAkB;AAChB,aAAO,KAAKC,YAAL,IAAqB,KAAKD,YAAjC;AACD;;;SAED,eAAiB;AACf,UAAMM,MAAM,GAAG,KAAKZ,OAAL,GAAe,KAAKA,OAAL,CAAaa,UAA5B,GAAyC,CAAxD;;AACA,UAAI,CAACC,MAAM,CAACC,QAAP,CAAgBH,MAAhB,CAAL,EAA8B;AAC5BI,kBAAIC,KAAJ,CAAU,qCAAV;AACD;;AACD,aAAOL,MAAP;AACD;;;;iFAGD;AAAA;AAAA;AAAA;AAAA;AAAA;AACEM,gBAAAA,OADF,QACEA,OADF,EAEEC,gBAFF,QAEEA,gBAFF,EAGEC,MAHF,QAGEA,MAHF,EAIEC,OAJF,QAIEA,OAJF;AAMS1B,gBAAAA,KANT,GAM4C,IAN5C,CAMSA,KANT,EAMgB2B,EANhB,GAM4C,IAN5C,CAMgBA,EANhB,EAMoBC,IANpB,GAM4C,IAN5C,CAMoBA,IANpB,EAM0BC,QAN1B,GAM4C,IAN5C,CAM0BA,QAN1B,EAMoCC,IANpC,GAM4C,IAN5C,CAMoCA,IANpC;AAOQC,gBAAAA,QAPR,GAOmB,KAAKtB,SAPxB;AASE,qBAAKD,gBAAL,GAAwB,IAAIwB,eAAJ,EAAxB;AACOC,gBAAAA,MAVT,GAUmB,KAAKzB,gBAVxB,CAUSyB,MAVT;AAAA;AAAA,uBAa6BT,gBAAgB,CAACU,eAAjB,CAAiC,IAAjC,EAAuC,UAAAC,IAAI,EAAI;AACxE,yBAAOA,IAAI,CAACjC,UAAL,GAAkB,CAAlB,GAAsB,CAAC,CAA9B;AACD,iBAF0B,CAb7B;;AAAA;AAaQkC,gBAAAA,YAbR;;AAAA,oBAiBOA,YAjBP;AAAA;AAAA;AAAA;;AAkBI,qBAAKzB,YAAL,GAAoB,IAApB;AAlBJ;;AAAA;AAAA,qBAsBM,KAAKA,YAtBX;AAAA;AAAA;AAAA;;AAuBIyB,gBAAAA,YAAY,CAACC,IAAb;AAvBJ;;AAAA;AA2BMC,gBAAAA,QA3BN,GA2BiB,IA3BjB;AAAA;AAAA;AAAA,uBA8BqBf,OAAO,CAAC;AAACvB,kBAAAA,KAAK,EAALA,KAAD;AAAQ2B,kBAAAA,EAAE,EAAFA,EAAR;AAAYC,kBAAAA,IAAI,EAAJA,IAAZ;AAAkBC,kBAAAA,QAAQ,EAARA,QAAlB;AAA4BC,kBAAAA,IAAI,EAAJA,IAA5B;AAAkCG,kBAAAA,MAAM,EAANA;AAAlC,iBAAD,CA9B5B;;AAAA;AA8BIK,gBAAAA,QA9BJ;AAAA;AAAA;;AAAA;AAAA;AAAA;AAgCIhB,gBAAAA,KAAK,GAAG,eAAO,IAAf;;AAhCJ;AAAA;AAkCIc,gBAAAA,YAAY,CAACC,IAAb;AAlCJ;;AAAA;AAAA,sBAsCMN,QAAQ,KAAK,KAAKtB,SAtCxB;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA0CE,qBAAKH,OAAL,GAAeC,SAAf;AAGA,qBAAKF,OAAL,GAAeiC,QAAf;;AA7CF,sBAgDM,KAAK3B,YAAL,IAAqB,CAAC2B,QAhD5B;AAAA;AAAA;AAAA;;AAiDI,qBAAK5B,SAAL,GAAiB,KAAjB;AAjDJ;;AAAA;AAoDE,qBAAKA,SAAL,GAAiB,IAAjB;AACA,qBAAKC,YAAL,GAAoB,KAApB;;AAEA,oBAAIW,KAAJ,EAAW;AACTI,kBAAAA,OAAO,CAACJ,KAAD,EAAQ,IAAR,CAAP;AACD,iBAFD,MAEO;AACLG,kBAAAA,MAAM,CAAC,IAAD,CAAN;AACD;;AA3DH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WA8DA,kBAASc,IAAT,EAAiD;AAC/C,WAAK7B,SAAL,GAAiB,KAAjB;AACA,WAAKC,YAAL,GAAoB,KAApB;AACA,WAAKC,YAAL,GAAoB,KAApB;AACA,WAAKH,SAAL;AACA,WAAKH,OAAL,GAAe,KAAKkC,SAAL,CAAeD,IAAf,CAAf;AACA,aAAO,KAAKjC,OAAZ;AACD;;;WAED,0BAAuB;AACrB,UAAI,KAAKO,SAAT,EAAoB;AAClB,aAAK4B,KAAL;AACA,aAAKnC,OAAL,GAAeC,SAAf;AACD;;AACD,WAAKK,YAAL,GAAoB,IAApB;AACD;;;WAED,iBAAc;AAAA;;AACZ,UAAI,KAAK8B,QAAT,EAAmB;AACjB;AACD;;AAED,WAAK/B,YAAL,GAAoB,IAApB;AACA,oCAAKH,gBAAL,gFAAuBiC,KAAvB;AACD","sourcesContent":["/* eslint-env browser */\nimport {Layer, log} from '@deck.gl/core';\nimport {RequestScheduler} from '@loaders.gl/loader-utils';\nimport {TileBoundingBox, TileIndex, TileLoadProps} from './types';\n\nexport type TileLoadDataProps = {\n requestScheduler: RequestScheduler;\n getData: (props: TileLoadProps) => Promise<any>;\n onLoad: (tile: Tile2DHeader) => void;\n onError: (error: any, tile: Tile2DHeader) => void;\n};\nexport default class Tile2DHeader {\n index: TileIndex;\n isVisible: boolean;\n isSelected: boolean;\n parent: Tile2DHeader | null;\n children: Tile2DHeader[] | null;\n content: any;\n state?: number;\n layers?: Layer[] | null;\n\n id!: string; // assigned _always_ with result of `getTileId`\n bbox!: TileBoundingBox; // assigned _always_ with result of `getTileMetadata`\n zoom!: number; // assigned _always_ with result of `getTileZoom`\n userData?: Record<string, any>; // _may be_ assigned with result of `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\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 get data() {\n return this.isLoading && this._loader ? this._loader.then(() => this.data) : this.content;\n }\n\n get isLoaded() {\n return this._isLoaded && !this._needsReload;\n }\n\n get isLoading() {\n return Boolean(this._loader) && !this._isCancelled;\n }\n\n get needsReload() {\n return this._needsReload || this._isCancelled;\n }\n\n get byteLength() {\n const result = this.content ? this.content.byteLength : 0;\n if (!Number.isFinite(result)) {\n log.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): 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 = 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"}
|
|
@@ -13,6 +13,10 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
|
|
|
13
13
|
|
|
14
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
15
|
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
|
|
18
|
+
var _core = require("@deck.gl/core");
|
|
19
|
+
|
|
16
20
|
var _culling = require("@math.gl/culling");
|
|
17
21
|
|
|
18
22
|
var _webMercator = require("@math.gl/web-mercator");
|
|
@@ -34,6 +38,12 @@ var REF_POINTS_11 = REF_POINTS_9.concat([[0.25, 0.5], [0.75, 0.5]]);
|
|
|
34
38
|
var OSMNode = function () {
|
|
35
39
|
function OSMNode(x, y, z) {
|
|
36
40
|
(0, _classCallCheck2.default)(this, OSMNode);
|
|
41
|
+
(0, _defineProperty2.default)(this, "x", void 0);
|
|
42
|
+
(0, _defineProperty2.default)(this, "y", void 0);
|
|
43
|
+
(0, _defineProperty2.default)(this, "z", void 0);
|
|
44
|
+
(0, _defineProperty2.default)(this, "childVisible", void 0);
|
|
45
|
+
(0, _defineProperty2.default)(this, "selected", void 0);
|
|
46
|
+
(0, _defineProperty2.default)(this, "_children", void 0);
|
|
37
47
|
this.x = x;
|
|
38
48
|
this.y = y;
|
|
39
49
|
this.z = z;
|
|
@@ -189,7 +199,7 @@ var OSMNode = function () {
|
|
|
189
199
|
}();
|
|
190
200
|
|
|
191
201
|
function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
|
|
192
|
-
var project = viewport.resolution ? viewport.projectPosition : null;
|
|
202
|
+
var project = viewport instanceof _core._GlobeViewport && viewport.resolution ? viewport.projectPosition : null;
|
|
193
203
|
var planes = Object.values(viewport.getFrustumPlanes()).map(function (_ref3) {
|
|
194
204
|
var normal = _ref3.normal,
|
|
195
205
|
distance = _ref3.distance;
|
|
@@ -199,7 +209,7 @@ function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
|
|
|
199
209
|
var unitsPerMeter = viewport.distanceScales.unitsPerMeter[2];
|
|
200
210
|
var elevationMin = zRange && zRange[0] * unitsPerMeter || 0;
|
|
201
211
|
var elevationMax = zRange && zRange[1] * unitsPerMeter || 0;
|
|
202
|
-
var minZ = viewport.pitch <= 60 ? maxZ : 0;
|
|
212
|
+
var minZ = viewport instanceof _core.WebMercatorViewport && viewport.pitch <= 60 ? maxZ : 0;
|
|
203
213
|
|
|
204
214
|
if (bounds) {
|
|
205
215
|
var _bounds = bounds,
|
|
@@ -227,7 +237,7 @@ function getOSMTileIndices(viewport, maxZ, zRange, bounds) {
|
|
|
227
237
|
};
|
|
228
238
|
root.update(traversalParams);
|
|
229
239
|
|
|
230
|
-
if (viewport.subViewports && viewport.subViewports.length > 1) {
|
|
240
|
+
if (viewport instanceof _core.WebMercatorViewport && viewport.subViewports && viewport.subViewports.length > 1) {
|
|
231
241
|
traversalParams.offset = -1;
|
|
232
242
|
|
|
233
243
|
while (root.update(traversalParams)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tile-2d-traversal.js"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","_children","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","node","getSelected","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {\n CullingVolume,\n Plane,\n AxisAlignedBoundingBox,\n makeOrientedBoundingBoxFromPoints\n} from '@math.gl/culling';\nimport {lngLatToWorld} from '@math.gl/web-mercator';\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 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 update(params) {\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 = []) {\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]) {\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(zRange, worldOffset, project) {\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 = [];\n for (const p of refPoints) {\n const lngLat = 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\nexport function getOSMTileIndices(viewport, maxZ, zRange, bounds) {\n const project = viewport.resolution ? viewport.projectPosition : null;\n\n // Get the culling volume of the current camera\n const planes = 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.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],\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 (viewport.subViewports && viewport.subViewports.length > 1) {\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/tile-layer/tile-2d-traversal.ts"],"names":["TILE_SIZE","MAX_MAPS","REF_POINTS_5","REF_POINTS_9","concat","REF_POINTS_11","OSMNode","x","y","z","_children","params","viewport","cullingVolume","elevationBounds","minZ","maxZ","bounds","offset","project","boundingVolume","getBoundingVolume","insideBounds","isInside","computeVisibility","childVisible","distance","distanceTo","cameraPosition","scale","height","Math","floor","log2","selected","children","child","update","result","push","node","getSelected","minX","minY","maxX","maxY","pow","extent","zRange","worldOffset","refPoints","refPointPositions","p","lngLat","originX","originY","AxisAlignedBoundingBox","getOSMTileIndices","_GlobeViewport","resolution","projectPosition","planes","Object","values","getFrustumPlanes","map","normal","Plane","clone","negate","CullingVolume","unitsPerMeter","distanceScales","elevationMin","elevationMax","WebMercatorViewport","pitch","minLng","minLat","maxLng","maxLat","topLeft","bottomRight","root","traversalParams","subViewports","length"],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport {Viewport, WebMercatorViewport, _GlobeViewport} from '@deck.gl/core';\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 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\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"}
|
|
@@ -9,8 +9,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.default = void 0;
|
|
11
11
|
|
|
12
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
|
|
14
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
13
|
|
|
16
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
@@ -21,6 +19,8 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
|
|
|
21
19
|
|
|
22
20
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
21
|
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
|
|
24
24
|
var _core = require("@deck.gl/core");
|
|
25
25
|
|
|
26
26
|
var _layers = require("@deck.gl/layers");
|
|
@@ -42,6 +42,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
42
42
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
43
43
|
|
|
44
44
|
var defaultProps = {
|
|
45
|
+
TilesetClass: _tileset2d.default,
|
|
45
46
|
data: [],
|
|
46
47
|
dataComparator: _utils.urlType.equals,
|
|
47
48
|
renderSubLayers: {
|
|
@@ -118,15 +119,16 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
118
119
|
}, {
|
|
119
120
|
key: "finalizeState",
|
|
120
121
|
value: function finalizeState() {
|
|
121
|
-
var _this$state$tileset;
|
|
122
|
+
var _this$state, _this$state$tileset;
|
|
122
123
|
|
|
123
|
-
(_this$state
|
|
124
|
+
(_this$state = this.state) === null || _this$state === void 0 ? void 0 : (_this$state$tileset = _this$state.tileset) === null || _this$state$tileset === void 0 ? void 0 : _this$state$tileset.finalize();
|
|
124
125
|
}
|
|
125
126
|
}, {
|
|
126
127
|
key: "isLoaded",
|
|
127
128
|
get: function get() {
|
|
128
|
-
var
|
|
129
|
-
|
|
129
|
+
var _this$state2, _this$state2$tileset;
|
|
130
|
+
|
|
131
|
+
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.selectedTiles.every(function (tile) {
|
|
130
132
|
return tile.isLoaded && tile.layers && tile.layers.every(function (layer) {
|
|
131
133
|
return layer.isLoaded;
|
|
132
134
|
});
|
|
@@ -141,19 +143,19 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
141
143
|
}, {
|
|
142
144
|
key: "updateState",
|
|
143
145
|
value: function updateState(_ref2) {
|
|
144
|
-
var
|
|
145
|
-
|
|
146
|
+
var changeFlags = _ref2.changeFlags;
|
|
147
|
+
(0, _core.assert)(this.state);
|
|
146
148
|
var tileset = this.state.tileset;
|
|
147
149
|
var propsChanged = changeFlags.propsOrDataChanged || changeFlags.updateTriggersChanged;
|
|
148
150
|
var dataChanged = changeFlags.dataChanged || changeFlags.updateTriggersChanged && (changeFlags.updateTriggersChanged.all || changeFlags.updateTriggersChanged.getTileData);
|
|
149
151
|
|
|
150
152
|
if (!tileset) {
|
|
151
|
-
tileset = new
|
|
153
|
+
tileset = new this.props.TilesetClass(this._getTilesetOptions());
|
|
152
154
|
this.setState({
|
|
153
155
|
tileset: tileset
|
|
154
156
|
});
|
|
155
157
|
} else if (propsChanged) {
|
|
156
|
-
tileset.setOptions(this._getTilesetOptions(
|
|
158
|
+
tileset.setOptions(this._getTilesetOptions());
|
|
157
159
|
|
|
158
160
|
if (dataChanged) {
|
|
159
161
|
tileset.reloadAll();
|
|
@@ -168,16 +170,17 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
168
170
|
}
|
|
169
171
|
}, {
|
|
170
172
|
key: "_getTilesetOptions",
|
|
171
|
-
value: function _getTilesetOptions(
|
|
172
|
-
var
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
173
|
+
value: function _getTilesetOptions() {
|
|
174
|
+
var _this$props = this.props,
|
|
175
|
+
tileSize = _this$props.tileSize,
|
|
176
|
+
maxCacheSize = _this$props.maxCacheSize,
|
|
177
|
+
maxCacheByteSize = _this$props.maxCacheByteSize,
|
|
178
|
+
refinementStrategy = _this$props.refinementStrategy,
|
|
179
|
+
extent = _this$props.extent,
|
|
180
|
+
maxZoom = _this$props.maxZoom,
|
|
181
|
+
minZoom = _this$props.minZoom,
|
|
182
|
+
maxRequests = _this$props.maxRequests,
|
|
183
|
+
zoomOffset = _this$props.zoomOffset;
|
|
181
184
|
return {
|
|
182
185
|
maxCacheSize: maxCacheSize,
|
|
183
186
|
maxCacheByteSize: maxCacheByteSize,
|
|
@@ -197,10 +200,11 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
197
200
|
}, {
|
|
198
201
|
key: "_updateTileset",
|
|
199
202
|
value: function _updateTileset() {
|
|
203
|
+
(0, _core.assert)(this.state && this.context);
|
|
200
204
|
var tileset = this.state.tileset;
|
|
201
|
-
var _this$
|
|
202
|
-
zRange = _this$
|
|
203
|
-
modelMatrix = _this$
|
|
205
|
+
var _this$props2 = this.props,
|
|
206
|
+
zRange = _this$props2.zRange,
|
|
207
|
+
modelMatrix = _this$props2.modelMatrix;
|
|
204
208
|
var frameNumber = tileset.update(this.context.viewport, {
|
|
205
209
|
zRange: zRange,
|
|
206
210
|
modelMatrix: modelMatrix
|
|
@@ -224,6 +228,7 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
224
228
|
}, {
|
|
225
229
|
key: "_onViewportLoad",
|
|
226
230
|
value: function _onViewportLoad() {
|
|
231
|
+
(0, _core.assert)(this.state);
|
|
227
232
|
var tileset = this.state.tileset;
|
|
228
233
|
var onViewportLoad = this.props.onViewportLoad;
|
|
229
234
|
|
|
@@ -253,18 +258,18 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
253
258
|
}, {
|
|
254
259
|
key: "getTileData",
|
|
255
260
|
value: function getTileData(tile) {
|
|
256
|
-
var _this$
|
|
257
|
-
data = _this$
|
|
258
|
-
getTileData = _this$
|
|
259
|
-
fetch = _this$
|
|
261
|
+
var _this$props3 = this.props,
|
|
262
|
+
data = _this$props3.data,
|
|
263
|
+
getTileData = _this$props3.getTileData,
|
|
264
|
+
fetch = _this$props3.fetch;
|
|
260
265
|
var signal = tile.signal;
|
|
261
|
-
tile.url = (0, _utils.getURLFromTemplate)(data, tile);
|
|
266
|
+
tile.url = typeof data === 'string' || Array.isArray(data) ? (0, _utils.getURLFromTemplate)(data, tile) : null;
|
|
262
267
|
|
|
263
268
|
if (getTileData) {
|
|
264
269
|
return getTileData(tile);
|
|
265
270
|
}
|
|
266
271
|
|
|
267
|
-
if (tile.url) {
|
|
272
|
+
if (fetch && tile.url) {
|
|
268
273
|
return fetch(tile.url, {
|
|
269
274
|
propName: 'data',
|
|
270
275
|
layer: this,
|
|
@@ -304,12 +309,13 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
304
309
|
value: function renderLayers() {
|
|
305
310
|
var _this = this;
|
|
306
311
|
|
|
312
|
+
(0, _core.assert)(this.state);
|
|
307
313
|
return this.state.tileset.tiles.map(function (tile) {
|
|
308
314
|
var subLayerProps = _this.getSubLayerPropsByTile(tile);
|
|
309
315
|
|
|
310
316
|
if (!tile.isLoaded && !tile.content) {} else if (!tile.layers) {
|
|
311
317
|
var layers = _this.renderSubLayers(_objectSpread(_objectSpread({}, _this.props), {}, {
|
|
312
|
-
id: "".concat(_this.id, "-").concat(tile.
|
|
318
|
+
id: "".concat(_this.id, "-").concat(tile.id),
|
|
313
319
|
data: tile.content,
|
|
314
320
|
_offset: 0,
|
|
315
321
|
tile: tile
|
|
@@ -342,6 +348,6 @@ var TileLayer = function (_CompositeLayer) {
|
|
|
342
348
|
}(_core.CompositeLayer);
|
|
343
349
|
|
|
344
350
|
exports.default = TileLayer;
|
|
345
|
-
TileLayer
|
|
346
|
-
TileLayer
|
|
351
|
+
(0, _defineProperty2.default)(TileLayer, "defaultProps", defaultProps);
|
|
352
|
+
(0, _defineProperty2.default)(TileLayer, "layerName", 'TileLayer');
|
|
347
353
|
//# sourceMappingURL=tile-layer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/tile-layer/tile-layer.js"],"names":["defaultProps","data","dataComparator","urlType","equals","renderSubLayers","type","value","props","GeoJsonLayer","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","Tileset2D","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","modelMatrix","frameNumber","update","context","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","propName","info","sourceLayer","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","id","x","y","z","_offset","Boolean","clone","Object","keys","some","isVisible","CompositeLayer","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, _flatten as flatten} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\nimport Tileset2D, {STRATEGY_DEFAULT} from './tileset-2d';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\nexport default class TileLayer extends CompositeLayer {\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() {\n const {tileset} = this.state;\n return tileset.selectedTiles.every(\n tile => tile.isLoaded && tile.layers && tile.layers.every(layer => layer.isLoaded)\n );\n }\n\n shouldUpdateState({changeFlags}) {\n return changeFlags.somethingChanged;\n }\n\n updateState({props, changeFlags}) {\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 Tileset2D(this._getTilesetOptions(props));\n this.setState({tileset});\n } else if (propsChanged) {\n tileset.setOptions(this._getTilesetOptions(props));\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(props) {\n const {\n tileSize,\n maxCacheSize,\n maxCacheByteSize,\n refinementStrategy,\n extent,\n maxZoom,\n minZoom,\n maxRequests,\n zoomOffset\n } = 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 _updateTileset() {\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() {\n const {tileset} = this.state;\n const {onViewportLoad} = this.props;\n\n if (onViewportLoad) {\n onViewportLoad(tileset.selectedTiles);\n }\n }\n\n _onTileLoad(tile) {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error, tile) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url = getURLFromTemplate(data, tile);\n\n if (getTileData) {\n return getTileData(tile);\n }\n if (tile.url) {\n return fetch(tile.url, {propName: 'data', layer: this, signal});\n }\n return null;\n }\n\n renderSubLayers(props) {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile) {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers() {\n return this.state.tileset.tiles.map(tile => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.x}-${tile.y}-${tile.z}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = flatten(layers, Boolean).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}) {\n return layer.props.tile.isVisible;\n }\n}\n\nTileLayer.layerName = 'TileLayer';\nTileLayer.defaultProps = defaultProps;\n"],"file":"tile-layer.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/tile-layer/tile-layer.ts"],"names":["defaultProps","TilesetClass","Tileset2D","data","dataComparator","urlType","equals","renderSubLayers","type","value","props","GeoJsonLayer","compare","getTileData","optional","onViewportLoad","onTileLoad","tile","onTileUnload","onTileError","err","console","error","extent","tileSize","maxZoom","minZoom","maxCacheSize","maxCacheByteSize","refinementStrategy","STRATEGY_DEFAULT","zRange","maxRequests","zoomOffset","TileLayer","state","tileset","isLoaded","finalize","selectedTiles","every","layers","layer","changeFlags","somethingChanged","propsChanged","propsOrDataChanged","updateTriggersChanged","dataChanged","all","_getTilesetOptions","setState","setOptions","reloadAll","tiles","forEach","_updateTileset","bind","_onTileLoad","_onTileError","_onTileUnload","context","modelMatrix","frameNumber","update","viewport","loadingStateChanged","tilesetChanged","_onViewportLoad","setNeedsUpdate","fetch","signal","url","Array","isArray","propName","info","sourceLayer","updateAutoHighlight","map","subLayerProps","getSubLayerPropsByTile","content","id","_offset","Boolean","clone","Object","keys","some","isVisible","CompositeLayer"],"mappings":"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","sourcesContent":["import {\n assert,\n CompositeLayer,\n CompositeLayerProps,\n Layer,\n LayerProps,\n UpdateParameters,\n _flatten as flatten\n} from '@deck.gl/core';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {LayersList} from 'modules/core/src/lib/layer-manager';\nimport Tile2DHeader from './tile-2d-header';\n\nimport Tileset2D, {RefinementStrategy, STRATEGY_DEFAULT, Tileset2DProps} from './tileset-2d';\nimport {TileLoadProps, ZRange} from './types';\nimport {urlType, getURLFromTemplate} from './utils';\n\nconst defaultProps = {\n TilesetClass: Tileset2D,\n data: [],\n dataComparator: urlType.equals,\n renderSubLayers: {type: 'function', value: props => new GeoJsonLayer(props), compare: false},\n getTileData: {type: 'function', optional: true, value: null, compare: false},\n // TODO - change to onViewportLoad to align with Tile3DLayer\n onViewportLoad: {type: 'function', optional: true, value: null, compare: false},\n onTileLoad: {type: 'function', value: tile => {}, compare: false},\n onTileUnload: {type: 'function', value: tile => {}, compare: false},\n // eslint-disable-next-line\n onTileError: {type: 'function', value: err => console.error(err), compare: false},\n extent: {type: 'array', optional: true, value: null, compare: true},\n tileSize: 512,\n maxZoom: null,\n minZoom: 0,\n maxCacheSize: null,\n maxCacheByteSize: null,\n refinementStrategy: STRATEGY_DEFAULT,\n zRange: null,\n maxRequests: 6,\n zoomOffset: 0\n};\n\n/** All props supported by the TileLayer */\nexport type TileLayerProps<DataT> = _TileLayerProps<DataT> & CompositeLayerProps<DataT>;\n\n/** Props added by the TileLayer */\ntype _TileLayerProps<DataT> = {\n /**\n * Optionally implement a custom indexing scheme.\n */\n TilesetClass: typeof Tileset2D;\n /**\n * Renders one or an array of Layer instances.\n */\n renderSubLayers?: (\n props: TileLayerProps<DataT> & {\n id: string;\n data: any;\n _offset: number;\n tile: Tile2DHeader;\n }\n ) => LayersList;\n /**\n * If supplied, `getTileData` is called to retrieve the data of each tile.\n */\n getTileData?: (props: TileLoadProps) => Promise<DataT> | DataT;\n\n /** Called when all tiles in the current viewport are loaded. */\n onViewportLoad?: (tiles: Tile2DHeader[]) => void;\n\n /** Called when a tile successfully loads. */\n onTileLoad?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile is cleared from cache. */\n onTileUnload?: (tile: Tile2DHeader) => void;\n\n /** Called when a tile failed to load. */\n onTileError?: (err: any) => 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\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 CompositeLayer<\n ExtraPropsT & Required<_TileLayerProps<DataT>>\n> {\n static defaultProps = defaultProps as any;\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<TileLayer>) {\n assert(this.state);\n\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 _updateTileset(): void {\n assert(this.state && this.context);\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 assert(this.state);\n\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): void {\n this.props.onTileLoad(tile);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileError(error: any, tile: Tile2DHeader) {\n this.props.onTileError(error);\n tile.layers = null;\n\n this.setNeedsUpdate();\n }\n\n _onTileUnload(tile: Tile2DHeader) {\n this.props.onTileUnload(tile);\n }\n\n // Methods for subclass to override\n\n getTileData(tile: TileLoadProps) {\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: _TileLayerProps<DataT> & {\n id: string;\n data: any;\n _offset: number;\n tile: Tile2DHeader;\n }\n ): LayersList {\n return this.props.renderSubLayers(props);\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader): LayerProps | null {\n return null;\n }\n\n getPickingInfo({info, sourceLayer}) {\n info.tile = sourceLayer.props.tile;\n return info;\n }\n\n _updateAutoHighlight(info) {\n if (info.sourceLayer) {\n info.sourceLayer.updateAutoHighlight(info);\n }\n }\n\n renderLayers(): Layer[] {\n assert(this.state);\n return this.state.tileset.tiles.map((tile: Tile2DHeader) => {\n const subLayerProps = this.getSubLayerPropsByTile(tile);\n // cache the rendered layer in the tile\n if (!tile.isLoaded && !tile.content) {\n // nothing to show\n } else if (!tile.layers) {\n const layers = this.renderSubLayers({\n ...this.props,\n id: `${this.id}-${tile.id}`,\n data: tile.content,\n _offset: 0,\n tile\n });\n tile.layers = (flatten(layers, Boolean) as Layer[]).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}) {\n return layer.props.tile.isVisible;\n }\n}\n"],"file":"tile-layer.js"}
|