@antv/l7-layers 2.5.37 → 2.5.41

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 (69) hide show
  1. package/es/core/BaseLayer.d.ts +3 -1
  2. package/es/core/BaseLayer.js +6 -1
  3. package/es/core/BaseLayer.js.map +1 -1
  4. package/es/imagetile/index.d.ts +22 -0
  5. package/es/imagetile/index.js +82 -0
  6. package/es/imagetile/index.js.map +1 -0
  7. package/es/imagetile/models/imagetile.d.ts +11 -0
  8. package/es/imagetile/models/imagetile.js +160 -0
  9. package/es/imagetile/models/imagetile.js.map +1 -0
  10. package/es/imagetile/models/index.d.ts +5 -0
  11. package/es/imagetile/models/index.js +6 -0
  12. package/es/imagetile/models/index.js.map +1 -0
  13. package/es/imagetile/utils/ImageTile.d.ts +20 -0
  14. package/es/imagetile/utils/ImageTile.js +90 -0
  15. package/es/imagetile/utils/ImageTile.js.map +1 -0
  16. package/es/imagetile/utils/Tile.d.ts +27 -0
  17. package/es/imagetile/utils/Tile.js +321 -0
  18. package/es/imagetile/utils/Tile.js.map +1 -0
  19. package/es/imagetile/utils/lruCache.d.ts +20 -0
  20. package/es/imagetile/utils/lruCache.js +105 -0
  21. package/es/imagetile/utils/lruCache.js.map +1 -0
  22. package/es/imagetile/utils/tileCache.d.ts +8 -0
  23. package/es/imagetile/utils/tileCache.js +50 -0
  24. package/es/imagetile/utils/tileCache.js.map +1 -0
  25. package/es/index.d.ts +2 -1
  26. package/es/index.js +2 -1
  27. package/es/index.js.map +1 -1
  28. package/es/line/index.d.ts +2 -0
  29. package/es/line/index.js +3 -0
  30. package/es/line/index.js.map +1 -1
  31. package/es/line/models/arc.js +2 -2
  32. package/es/line/models/arc_3d.js +2 -2
  33. package/es/line/models/arcmini.d.ts +9 -0
  34. package/es/line/models/arcmini.js +144 -0
  35. package/es/line/models/arcmini.js.map +1 -0
  36. package/es/line/models/great_circle.js +2 -2
  37. package/es/line/models/index.d.ts +1 -1
  38. package/es/line/models/index.js +2 -0
  39. package/es/line/models/index.js.map +1 -1
  40. package/es/line/models/line.js +2 -2
  41. package/lib/core/BaseLayer.js +4 -1
  42. package/lib/core/BaseLayer.js.map +1 -1
  43. package/lib/imagetile/index.js +95 -0
  44. package/lib/imagetile/index.js.map +1 -0
  45. package/lib/imagetile/models/imagetile.js +177 -0
  46. package/lib/imagetile/models/imagetile.js.map +1 -0
  47. package/lib/imagetile/models/index.js +17 -0
  48. package/lib/imagetile/models/index.js.map +1 -0
  49. package/lib/imagetile/utils/ImageTile.js +99 -0
  50. package/lib/imagetile/utils/ImageTile.js.map +1 -0
  51. package/lib/imagetile/utils/Tile.js +324 -0
  52. package/lib/imagetile/utils/Tile.js.map +1 -0
  53. package/lib/imagetile/utils/lruCache.js +109 -0
  54. package/lib/imagetile/utils/lruCache.js.map +1 -0
  55. package/lib/imagetile/utils/tileCache.js +58 -0
  56. package/lib/imagetile/utils/tileCache.js.map +1 -0
  57. package/lib/index.js +8 -0
  58. package/lib/index.js.map +1 -1
  59. package/lib/line/index.js +3 -0
  60. package/lib/line/index.js.map +1 -1
  61. package/lib/line/models/arc.js +2 -2
  62. package/lib/line/models/arc_3d.js +2 -2
  63. package/lib/line/models/arcmini.js +160 -0
  64. package/lib/line/models/arcmini.js.map +1 -0
  65. package/lib/line/models/great_circle.js +2 -2
  66. package/lib/line/models/index.js +3 -0
  67. package/lib/line/models/index.js.map +1 -1
  68. package/lib/line/models/line.js +2 -2
  69. package/package.json +6 -5
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _imagetile = _interopRequireDefault(require("./imagetile"));
11
+
12
+ var ImageTileModels = {
13
+ imageTile: _imagetile.default
14
+ };
15
+ var _default = ImageTileModels;
16
+ exports.default = _default;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/imagetile/models/index.ts"],"names":["ImageTileModels","imageTile","ImageTileModel"],"mappings":";;;;;;;;;AAAA;;AAGA,IAAMA,eAAqD,GAAG;AAC5DC,EAAAA,SAAS,EAAEC;AADiD,CAA9D;eAIeF,e","sourcesContent":["import ImageTileModel from './imagetile';\nexport type ImageTileModelType = 'imageTile';\n\nconst ImageTileModels: { [key in ImageTileModelType]: any } = {\n imageTile: ImageTileModel,\n};\n\nexport default ImageTileModels;\n"],"file":"index.js"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _geoCoord = require("@antv/geo-coord");
17
+
18
+ var _image = _interopRequireDefault(require("../../image"));
19
+
20
+ var r2d = 180 / Math.PI;
21
+ var tileURLRegex = /\{([zxy])\}/g;
22
+
23
+ var ImageTile = function () {
24
+ function ImageTile(key, url, container, sceneContainer) {
25
+ (0, _classCallCheck2.default)(this, ImageTile);
26
+ (0, _defineProperty2.default)(this, "tile", void 0);
27
+ (0, _defineProperty2.default)(this, "name", void 0);
28
+ (0, _defineProperty2.default)(this, "imageLayer", void 0);
29
+ this.name = key;
30
+ this.tile = key.split('_').map(function (v) {
31
+ return Number(v);
32
+ });
33
+ var urlParams = {
34
+ x: this.tile[0],
35
+ y: this.tile[1],
36
+ z: this.tile[2]
37
+ };
38
+ var imageSrc = this.getTileURL(urlParams, url);
39
+ var lnglatBounds = this.tileLnglatBounds(this.tile);
40
+ var west = lnglatBounds.getWest();
41
+ var south = lnglatBounds.getSouth();
42
+ var east = lnglatBounds.getEast();
43
+ var north = lnglatBounds.getNorth();
44
+ var imageLayer = new _image.default({});
45
+ imageLayer.source(imageSrc, {
46
+ parser: {
47
+ type: 'image',
48
+ extent: [west, south, east, north]
49
+ }
50
+ });
51
+ imageLayer.setContainer(container, sceneContainer);
52
+ imageLayer.init();
53
+ this.imageLayer = imageLayer;
54
+ }
55
+
56
+ (0, _createClass2.default)(ImageTile, [{
57
+ key: "destroy",
58
+ value: function destroy() {
59
+ this.imageLayer.clearModels();
60
+ this.imageLayer.destroy();
61
+ }
62
+ }, {
63
+ key: "getTileURL",
64
+ value: function getTileURL(urlParams, path) {
65
+ if (!urlParams.s) {
66
+ urlParams.s = String.fromCharCode(97 + Math.floor(Math.random() * 3));
67
+ }
68
+
69
+ tileURLRegex.lastIndex = 0;
70
+ return path.replace(tileURLRegex, function (value, key) {
71
+ return urlParams[key];
72
+ });
73
+ }
74
+ }, {
75
+ key: "tileLnglatBounds",
76
+ value: function tileLnglatBounds(tile) {
77
+ var e = this.tile2lng(tile[0] + 1, tile[2]);
78
+ var w = this.tile2lng(tile[0], tile[2]);
79
+ var s = this.tile2lat(tile[1] + 1, tile[2]);
80
+ var n = this.tile2lat(tile[1], tile[2]);
81
+ return (0, _geoCoord.toLngLatBounds)([w, n], [e, s]);
82
+ }
83
+ }, {
84
+ key: "tile2lng",
85
+ value: function tile2lng(x, z) {
86
+ return x / Math.pow(2, z) * 360 - 180;
87
+ }
88
+ }, {
89
+ key: "tile2lat",
90
+ value: function tile2lat(y, z) {
91
+ var n = Math.PI - 2 * Math.PI * y / Math.pow(2, z);
92
+ return r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));
93
+ }
94
+ }]);
95
+ return ImageTile;
96
+ }();
97
+
98
+ exports.default = ImageTile;
99
+ //# sourceMappingURL=ImageTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/imagetile/utils/ImageTile.ts"],"names":["r2d","Math","PI","tileURLRegex","ImageTile","key","url","container","sceneContainer","name","tile","split","map","v","Number","urlParams","x","y","z","imageSrc","getTileURL","lnglatBounds","tileLnglatBounds","west","getWest","south","getSouth","east","getEast","north","getNorth","imageLayer","ImageLayer","source","parser","type","extent","setContainer","init","clearModels","destroy","path","s","String","fromCharCode","floor","random","lastIndex","replace","value","e","tile2lng","w","tile2lat","n","pow","atan","exp"],"mappings":"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","sourcesContent":["import { LngLatBounds, toBounds, toLngLatBounds } from '@antv/geo-coord';\nimport { Container } from 'inversify';\nimport ImageLayer from '../../image';\n\ninterface IUrlParams {\n x: number;\n y: number;\n z: number;\n s?: string;\n}\n\nconst r2d = 180 / Math.PI;\nconst tileURLRegex = /\\{([zxy])\\}/g;\n\nexport default class ImageTile {\n public tile: number[]; // 当前图片瓦片的索引\n public name: string;\n public imageLayer: any;\n constructor(\n key: string,\n url: string,\n container: Container,\n sceneContainer: Container,\n ) {\n this.name = key;\n this.tile = key.split('_').map((v) => Number(v));\n\n const urlParams = {\n x: this.tile[0],\n y: this.tile[1],\n z: this.tile[2],\n };\n const imageSrc = this.getTileURL(urlParams, url);\n\n const lnglatBounds = this.tileLnglatBounds(this.tile);\n const west = lnglatBounds.getWest();\n const south = lnglatBounds.getSouth();\n const east = lnglatBounds.getEast();\n const north = lnglatBounds.getNorth();\n\n const imageLayer = new ImageLayer({});\n imageLayer.source(\n // 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',\n imageSrc,\n {\n parser: {\n type: 'image',\n // extent: [121.168, 30.2828, 121.384, 30.4219],\n extent: [west, south, east, north],\n },\n },\n );\n\n imageLayer.setContainer(container, sceneContainer);\n imageLayer.init();\n\n this.imageLayer = imageLayer;\n }\n\n public destroy() {\n this.imageLayer.clearModels();\n this.imageLayer.destroy();\n }\n\n public getTileURL(urlParams: IUrlParams, path: string) {\n if (!urlParams.s) {\n // Default to a random choice of a, b or c\n urlParams.s = String.fromCharCode(97 + Math.floor(Math.random() * 3));\n }\n\n tileURLRegex.lastIndex = 0;\n return path.replace(tileURLRegex, (value, key: any) => {\n // @ts-ignore\n return urlParams[key];\n });\n }\n\n // Get tile bounds in WGS84 coordinates\n public tileLnglatBounds(tile: number[]) {\n const e = this.tile2lng(tile[0] + 1, tile[2]);\n const w = this.tile2lng(tile[0], tile[2]);\n const s = this.tile2lat(tile[1] + 1, tile[2]);\n const n = this.tile2lat(tile[1], tile[2]);\n return toLngLatBounds([w, n], [e, s]);\n }\n\n public tile2lng(x: number, z: number) {\n return (x / Math.pow(2, z)) * 360 - 180;\n }\n\n public tile2lat(y: number, z: number) {\n const n = Math.PI - (2 * Math.PI * y) / Math.pow(2, z);\n return r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n)));\n }\n}\n"],"file":"ImageTile.js"}
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _geoCoord = require("@antv/geo-coord");
19
+
20
+ var _l7Core = require("@antv/l7-core");
21
+
22
+ var _ImageTile = _interopRequireDefault(require("./ImageTile"));
23
+
24
+ var _tileCache = _interopRequireDefault(require("./tileCache"));
25
+
26
+ var CacheLimit = 30;
27
+
28
+ var Tile = function () {
29
+ function Tile(props) {
30
+ (0, _classCallCheck2.default)(this, Tile);
31
+ (0, _defineProperty2.default)(this, "tileList", {});
32
+ (0, _defineProperty2.default)(this, "tileCache", void 0);
33
+ (0, _defineProperty2.default)(this, "updateTileList", void 0);
34
+ (0, _defineProperty2.default)(this, "tileZoom", void 0);
35
+ (0, _defineProperty2.default)(this, "noPruneRange", void 0);
36
+ (0, _defineProperty2.default)(this, "url", void 0);
37
+ (0, _defineProperty2.default)(this, "resolution", void 0);
38
+ (0, _defineProperty2.default)(this, "maxSourceZoom", void 0);
39
+ (0, _defineProperty2.default)(this, "crstype", void 0);
40
+ (0, _defineProperty2.default)(this, "currentCrs", void 0);
41
+ (0, _defineProperty2.default)(this, "layerService", void 0);
42
+ (0, _defineProperty2.default)(this, "layer", void 0);
43
+ this.layerService = props.layerService;
44
+ this.layer = props.layer;
45
+ this.url = props.url;
46
+ this.resolution = props.resolution === 'low' ? -1 : 0;
47
+ this.maxSourceZoom = props.maxSourceZoom;
48
+ this.crstype = props.crstype;
49
+ this.currentCrs = new _geoCoord.GeoCoordinates.default({
50
+ start: {
51
+ x: 0,
52
+ y: 0
53
+ },
54
+ end: {
55
+ x: 0,
56
+ y: 0
57
+ },
58
+ projection: this.crstype
59
+ }).crs;
60
+ this.destroyTile = this.destroyTile.bind(this);
61
+ this.tileCache = new _tileCache.default(CacheLimit, this.destroyTile);
62
+ this.updateTileList = [];
63
+ this.removeTiles = this.removeTiles.bind(this);
64
+ }
65
+
66
+ (0, _createClass2.default)(Tile, [{
67
+ key: "calCurrentTiles",
68
+ value: function calCurrentTiles(oprions) {
69
+ var _this = this;
70
+
71
+ var NE = oprions.NE,
72
+ SW = oprions.SW,
73
+ tileCenter = oprions.tileCenter,
74
+ currentZoom = oprions.currentZoom,
75
+ minSourceZoom = oprions.minSourceZoom,
76
+ minZoom = oprions.minZoom,
77
+ maxZoom = oprions.maxZoom;
78
+
79
+ if (currentZoom >= this.maxSourceZoom) {
80
+ return;
81
+ }
82
+
83
+ var zoom = Math.floor(currentZoom) + this.resolution;
84
+ this.tileZoom = zoom > this.maxSourceZoom ? this.maxSourceZoom : zoom;
85
+
86
+ if (currentZoom < minZoom || currentZoom >= maxZoom || currentZoom < minSourceZoom) {
87
+ this.removeTiles();
88
+ return;
89
+ }
90
+
91
+ this.updateTileList = [];
92
+ var centerPoint = this.currentCrs.lngLatToPoint((0, _geoCoord.toLngLat)(tileCenter.lng, tileCenter.lat), this.tileZoom);
93
+ var centerXY = centerPoint.divideBy(256).floor();
94
+ var pixelBounds = this.getPixelBounds(NE, SW, tileCenter, this.tileZoom, this.currentCrs);
95
+ var tileRange = this.pxBoundsToTileRange(pixelBounds);
96
+ var margin = 4;
97
+ this.noPruneRange = new _geoCoord.Bounds(tileRange.getBottomLeft().subtract([margin, -margin]), tileRange.getTopRight().add([margin, -margin]));
98
+
99
+ if (!(isFinite(tileRange.min.x) && isFinite(tileRange.min.y) && isFinite(tileRange.max.x) && isFinite(tileRange.max.y))) {
100
+ throw new Error('Attempted to load an infinite number of tiles');
101
+ }
102
+
103
+ for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {
104
+ for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {
105
+ var coords = [i, j, this.tileZoom];
106
+ var tile = this.tileList[coords.join('_')];
107
+
108
+ if (tile) {
109
+ tile.current = true;
110
+ } else {
111
+ this.tileList[coords.join('_')] = {
112
+ current: true,
113
+ coords: coords
114
+ };
115
+ this.updateTileList.push(coords);
116
+ }
117
+ }
118
+ }
119
+
120
+ this.updateTileList.sort(function (a, b) {
121
+ var tile1 = a;
122
+ var tile2 = b;
123
+ var d1 = Math.pow(tile1[0] * 1 - centerXY.x, 2) + Math.pow(tile1[1] * 1 - centerXY.y, 2);
124
+ var d2 = Math.pow(tile2[0] * 1 - centerXY.x, 2) + Math.pow(tile2[1] * 1 - centerXY.y, 2);
125
+ return d1 - d2;
126
+ });
127
+ this.pruneTiles();
128
+ this.updateTileList.forEach(function (coords) {
129
+ var key = coords.join('_');
130
+
131
+ if (_this.tileList[key].current) {
132
+ _this.requestTile(key);
133
+ }
134
+ });
135
+ }
136
+ }, {
137
+ key: "pxBoundsToTileRange",
138
+ value: function pxBoundsToTileRange(pixelBounds) {
139
+ return new _geoCoord.Bounds(pixelBounds.min.divideBy(256).floor(), pixelBounds.max.divideBy(256).ceil().subtract([1, 1]));
140
+ }
141
+ }, {
142
+ key: "getPixelBounds",
143
+ value: function getPixelBounds(NE, SW, tileCenter, tileZoom, crs) {
144
+ var zoom = tileZoom;
145
+ var NEPoint = crs.lngLatToPoint((0, _geoCoord.toLngLat)(NE.lng, NE.lat), zoom);
146
+ var SWPoint = crs.lngLatToPoint((0, _geoCoord.toLngLat)(SW.lng, SW.lat), zoom);
147
+ var centerPoint = crs.lngLatToPoint((0, _geoCoord.toLngLat)(tileCenter.lng, tileCenter.lat), zoom);
148
+ var topHeight = centerPoint.y - NEPoint.y;
149
+ var bottomHeight = SWPoint.y - centerPoint.y;
150
+ var leftWidth;
151
+ var rightWidth;
152
+
153
+ if (tileCenter.lng - NE.lng > 0 || tileCenter.lng - SW.lng < 0) {
154
+ var width = Math.pow(2, zoom) * 256 / 360 * (180 - NE.lng) + Math.pow(2, zoom) * 256 / 360 * (SW.lng + 180);
155
+
156
+ if (tileCenter.lng - NE.lng > 0) {
157
+ leftWidth = Math.pow(2, zoom) * 256 / 360 * (tileCenter.lng - NE.lng);
158
+ rightWidth = width - leftWidth;
159
+ } else {
160
+ rightWidth = Math.pow(2, zoom) * 256 / 360 * (SW.lng - tileCenter.lng);
161
+ leftWidth = width - rightWidth;
162
+ }
163
+ } else {
164
+ leftWidth = Math.pow(2, zoom) * 256 / 360 * (tileCenter.lng - SW.lng);
165
+ rightWidth = Math.pow(2, zoom) * 256 / 360 * (NE.lng - tileCenter.lng);
166
+ }
167
+
168
+ var pixelBounds = new _geoCoord.Bounds(centerPoint.subtract(leftWidth, topHeight), centerPoint.add(rightWidth, bottomHeight));
169
+ return pixelBounds;
170
+ }
171
+ }, {
172
+ key: "pruneTiles",
173
+ value: function pruneTiles() {
174
+ var _this2 = this;
175
+
176
+ Object.keys(this.tileList).map(function (key) {
177
+ var c = _this2.tileList[key].coords;
178
+
179
+ if (c[2] !== _this2.tileZoom || !_this2.noPruneRange.contains(new _geoCoord.Point(c[0], c[1]))) {
180
+ _this2.tileList[key].current = false;
181
+ }
182
+ });
183
+ Object.keys(this.tileList).map(function (key) {
184
+ var tile = _this2.tileList[key];
185
+ tile.retain = tile.current;
186
+ });
187
+ Object.keys(this.tileList).map(function (key) {
188
+ var tile = _this2.tileList[key];
189
+
190
+ if (tile.current && !tile.active) {
191
+ var _key$split$map = key.split('_').map(function (v) {
192
+ return Number(v);
193
+ }),
194
+ _key$split$map2 = (0, _slicedToArray2.default)(_key$split$map, 3),
195
+ x = _key$split$map2[0],
196
+ y = _key$split$map2[1],
197
+ z = _key$split$map2[2];
198
+
199
+ if (!_this2.retainParent(x, y, z, z - 5)) {
200
+ _this2.retainChildren(x, y, z, z + 2);
201
+ }
202
+ }
203
+ });
204
+ this.removeOutTiles();
205
+ }
206
+ }, {
207
+ key: "requestTile",
208
+ value: function requestTile(key) {
209
+ var t = this.tileList[key];
210
+
211
+ if (!t) {
212
+ return;
213
+ }
214
+
215
+ var tile = this.tileCache.getTile(key);
216
+
217
+ if (!tile) {
218
+ var container = (0, _l7Core.createLayerContainer)(this.layer.sceneContainer);
219
+ tile = new _ImageTile.default(key, this.url, container, this.layer.sceneContainer);
220
+ tile.name = key;
221
+ t.current = true;
222
+ t.retain = true;
223
+ t.active = true;
224
+ this.layer.layerChildren.push(tile.imageLayer);
225
+ this.tileCache.setTile(tile, key);
226
+ this.pruneTiles();
227
+ this.layerService.renderLayers();
228
+ } else {
229
+ tile.imageLayer.show();
230
+ t.current = true;
231
+ t.retain = true;
232
+ t.active = true;
233
+ this.pruneTiles();
234
+ }
235
+ }
236
+ }, {
237
+ key: "retainParent",
238
+ value: function retainParent(x, y, z, minZoom) {
239
+ var x2 = Math.floor(x / 2);
240
+ var y2 = Math.floor(y / 2);
241
+ var z2 = z - 1;
242
+ var tile = this.tileList[[x2, y2, z2].join('_')];
243
+
244
+ if (tile && tile.active) {
245
+ tile.retain = true;
246
+ return true;
247
+ } else if (tile && tile.loaded) {
248
+ tile.retain = true;
249
+ }
250
+
251
+ if (z2 > minZoom) {
252
+ return this.retainParent(x2, y2, z2, minZoom);
253
+ }
254
+
255
+ return false;
256
+ }
257
+ }, {
258
+ key: "retainChildren",
259
+ value: function retainChildren(x, y, z, maxZoom) {
260
+ for (var i = 2 * x; i < 2 * x + 2; i++) {
261
+ for (var j = 2 * y; j < 2 * y + 2; j++) {
262
+ var key = [i, j, z + 1].join('_');
263
+ var tile = this.tileList[key];
264
+
265
+ if (tile && tile.active) {
266
+ tile.retain = true;
267
+ continue;
268
+ } else if (tile && tile.loaded) {
269
+ tile.retain = true;
270
+ }
271
+
272
+ if (z + 1 < maxZoom) {
273
+ this.retainChildren(i, j, z + 1, maxZoom);
274
+ }
275
+ }
276
+ }
277
+ }
278
+ }, {
279
+ key: "destroyTile",
280
+ value: function destroyTile(tile) {
281
+ var layerIndex = this.layer.layerChildren.indexOf(tile.imageLayer);
282
+
283
+ if (layerIndex > -1) {
284
+ this.layer.layerChildren.splice(layerIndex, 1);
285
+ }
286
+
287
+ tile.imageLayer.emit('remove', null);
288
+ tile.imageLayer.destroy();
289
+ this.layerService.renderLayers();
290
+ tile = null;
291
+ }
292
+ }, {
293
+ key: "removeOutTiles",
294
+ value: function removeOutTiles() {
295
+ for (var key in this.tileList) {
296
+ if (!this.tileList[key].retain) {
297
+ var tile = this.tileCache.getTile(key);
298
+
299
+ if (tile) {
300
+ tile.imageLayer.hide();
301
+ }
302
+
303
+ delete this.tileList[key];
304
+ }
305
+ }
306
+ }
307
+ }, {
308
+ key: "removeTiles",
309
+ value: function removeTiles() {
310
+ this.layer.layerChildren.forEach(function (layer) {
311
+ layer.emit('remove', null);
312
+ layer.destroy();
313
+ });
314
+ this.layer.layerChildren = [];
315
+ this.layerService.renderLayers();
316
+ this.tileList = {};
317
+ this.tileCache.destory();
318
+ }
319
+ }]);
320
+ return Tile;
321
+ }();
322
+
323
+ exports.default = Tile;
324
+ //# sourceMappingURL=Tile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/imagetile/utils/Tile.ts"],"names":["CacheLimit","Tile","props","layerService","layer","url","resolution","maxSourceZoom","crstype","currentCrs","GeoCoordinates","default","start","x","y","end","projection","crs","destroyTile","bind","tileCache","TileCache","updateTileList","removeTiles","oprions","NE","SW","tileCenter","currentZoom","minSourceZoom","minZoom","maxZoom","zoom","Math","floor","tileZoom","centerPoint","lngLatToPoint","lng","lat","centerXY","divideBy","pixelBounds","getPixelBounds","tileRange","pxBoundsToTileRange","margin","noPruneRange","Bounds","getBottomLeft","subtract","getTopRight","add","isFinite","min","max","Error","j","i","coords","tile","tileList","join","current","push","sort","a","b","tile1","tile2","d1","pow","d2","pruneTiles","forEach","key","requestTile","ceil","NEPoint","SWPoint","topHeight","bottomHeight","leftWidth","rightWidth","width","Object","keys","map","c","contains","Point","retain","active","split","v","Number","z","retainParent","retainChildren","removeOutTiles","t","getTile","container","sceneContainer","ImageTile","name","layerChildren","imageLayer","setTile","renderLayers","show","x2","y2","z2","loaded","layerIndex","indexOf","splice","emit","destroy","hide","destory"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AAQA;;AACA;;AAGA,IAAMA,UAAU,GAAG,EAAnB;;IAEqBC,I;AAenB,gBAAYC,KAAZ,EAAwB;AAAA;AAAA,oDAdD,EAcC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACtB,SAAKC,YAAL,GAAoBD,KAAK,CAACC,YAA1B;AACA,SAAKC,KAAL,GAAaF,KAAK,CAACE,KAAnB;AACA,SAAKC,GAAL,GAAWH,KAAK,CAACG,GAAjB;AACA,SAAKC,UAAL,GAAkBJ,KAAK,CAACI,UAAN,KAAqB,KAArB,GAA6B,CAAC,CAA9B,GAAkC,CAApD;AACA,SAAKC,aAAL,GAAqBL,KAAK,CAACK,aAA3B;AACA,SAAKC,OAAL,GAAeN,KAAK,CAACM,OAArB;AAEA,SAAKC,UAAL,GAAkB,IAAIC,yBAAeC,OAAnB,CAA2B;AAC3CC,MAAAA,KAAK,EAAE;AAAEC,QAAAA,CAAC,EAAE,CAAL;AAAQC,QAAAA,CAAC,EAAE;AAAX,OADoC;AAE3CC,MAAAA,GAAG,EAAE;AAAEF,QAAAA,CAAC,EAAE,CAAL;AAAQC,QAAAA,CAAC,EAAE;AAAX,OAFsC;AAG3CE,MAAAA,UAAU,EAAE,KAAKR;AAH0B,KAA3B,EAIfS,GAJH;AAMA,SAAKC,WAAL,GAAmB,KAAKA,WAAL,CAAiBC,IAAjB,CAAsB,IAAtB,CAAnB;AACA,SAAKC,SAAL,GAAiB,IAAIC,kBAAJ,CAAcrB,UAAd,EAA0B,KAAKkB,WAA/B,CAAjB;AAEA,SAAKI,cAAL,GAAsB,EAAtB;AAEA,SAAKC,WAAL,GAAmB,KAAKA,WAAL,CAAiBJ,IAAjB,CAAsB,IAAtB,CAAnB;AACD;;;;WAED,yBAAuBK,OAAvB,EAAqC;AAAA;;AACnC,UACEC,EADF,GAQID,OARJ,CACEC,EADF;AAAA,UAEEC,EAFF,GAQIF,OARJ,CAEEE,EAFF;AAAA,UAGEC,UAHF,GAQIH,OARJ,CAGEG,UAHF;AAAA,UAIEC,WAJF,GAQIJ,OARJ,CAIEI,WAJF;AAAA,UAKEC,aALF,GAQIL,OARJ,CAKEK,aALF;AAAA,UAMEC,OANF,GAQIN,OARJ,CAMEM,OANF;AAAA,UAOEC,OAPF,GAQIP,OARJ,CAOEO,OAPF;;AAUA,UAAIH,WAAW,IAAI,KAAKrB,aAAxB,EAAuC;AACrC;AACD;;AACD,UAAMyB,IAAI,GAAGC,IAAI,CAACC,KAAL,CAAWN,WAAX,IAA0B,KAAKtB,UAA5C;AAEA,WAAK6B,QAAL,GAAgBH,IAAI,GAAG,KAAKzB,aAAZ,GAA4B,KAAKA,aAAjC,GAAiDyB,IAAjE;;AAEA,UACEJ,WAAW,GAAGE,OAAd,IACAF,WAAW,IAAIG,OADf,IAEAH,WAAW,GAAGC,aAHhB,EAIE;AACA,aAAKN,WAAL;AACA;AACD;;AAED,WAAKD,cAAL,GAAsB,EAAtB;AAGA,UAAMc,WAAW,GAAG,KAAK3B,UAAL,CAAgB4B,aAAhB,CAClB,wBAASV,UAAU,CAACW,GAApB,EAAyBX,UAAU,CAACY,GAApC,CADkB,EAElB,KAAKJ,QAFa,CAApB;AAIA,UAAMK,QAAQ,GAAGJ,WAAW,CAACK,QAAZ,CAAqB,GAArB,EAA0BP,KAA1B,EAAjB;AAEA,UAAMQ,WAAW,GAAG,KAAKC,cAAL,CAClBlB,EADkB,EAElBC,EAFkB,EAGlBC,UAHkB,EAIlB,KAAKQ,QAJa,EAKlB,KAAK1B,UALa,CAApB;AAOA,UAAMmC,SAAS,GAAG,KAAKC,mBAAL,CAAyBH,WAAzB,CAAlB;AAEA,UAAMI,MAAM,GAAG,CAAf;AAEA,WAAKC,YAAL,GAAoB,IAAIC,gBAAJ,CAClBJ,SAAS,CAACK,aAAV,GAA0BC,QAA1B,CAAmC,CAACJ,MAAD,EAAS,CAACA,MAAV,CAAnC,CADkB,EAElBF,SAAS,CAACO,WAAV,GAAwBC,GAAxB,CAA4B,CAACN,MAAD,EAAS,CAACA,MAAV,CAA5B,CAFkB,CAApB;;AAMA,UACE,EACEO,QAAQ,CAACT,SAAS,CAACU,GAAV,CAAczC,CAAf,CAAR,IACAwC,QAAQ,CAACT,SAAS,CAACU,GAAV,CAAcxC,CAAf,CADR,IAEAuC,QAAQ,CAACT,SAAS,CAACW,GAAV,CAAc1C,CAAf,CAFR,IAGAwC,QAAQ,CAACT,SAAS,CAACW,GAAV,CAAczC,CAAf,CAJV,CADF,EAOE;AACA,cAAM,IAAI0C,KAAJ,CAAU,+CAAV,CAAN;AACD;;AAGD,WAAK,IAAIC,CAAC,GAAGb,SAAS,CAACU,GAAV,CAAcxC,CAA3B,EAA8B2C,CAAC,IAAIb,SAAS,CAACW,GAAV,CAAczC,CAAjD,EAAoD2C,CAAC,EAArD,EAAyD;AACvD,aAAK,IAAIC,CAAC,GAAGd,SAAS,CAACU,GAAV,CAAczC,CAA3B,EAA8B6C,CAAC,IAAId,SAAS,CAACW,GAAV,CAAc1C,CAAjD,EAAoD6C,CAAC,EAArD,EAAyD;AACvD,cAAMC,MAAM,GAAG,CAACD,CAAD,EAAID,CAAJ,EAAO,KAAKtB,QAAZ,CAAf;AACA,cAAMyB,IAAI,GAAG,KAAKC,QAAL,CAAcF,MAAM,CAACG,IAAP,CAAY,GAAZ,CAAd,CAAb;;AACA,cAAIF,IAAJ,EAAU;AACRA,YAAAA,IAAI,CAACG,OAAL,GAAe,IAAf;AACD,WAFD,MAEO;AACL,iBAAKF,QAAL,CAAcF,MAAM,CAACG,IAAP,CAAY,GAAZ,CAAd,IAAkC;AAChCC,cAAAA,OAAO,EAAE,IADuB;AAEhCJ,cAAAA,MAAM,EAANA;AAFgC,aAAlC;AAIA,iBAAKrC,cAAL,CAAoB0C,IAApB,CAAyBL,MAAzB;AACD;AACF;AACF;;AAGD,WAAKrC,cAAL,CAAoB2C,IAApB,CAAyB,UAACC,CAAD,EAASC,CAAT,EAAoB;AAC3C,YAAMC,KAAK,GAAGF,CAAd;AACA,YAAMG,KAAK,GAAGF,CAAd;AACA,YAAMG,EAAE,GACNrC,IAAI,CAACsC,GAAL,CAASH,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAe5B,QAAQ,CAAC3B,CAAjC,EAAoC,CAApC,IACAoB,IAAI,CAACsC,GAAL,CAASH,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAe5B,QAAQ,CAAC1B,CAAjC,EAAoC,CAApC,CAFF;AAGA,YAAM0D,EAAE,GACNvC,IAAI,CAACsC,GAAL,CAASF,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAe7B,QAAQ,CAAC3B,CAAjC,EAAoC,CAApC,IACAoB,IAAI,CAACsC,GAAL,CAASF,KAAK,CAAC,CAAD,CAAL,GAAW,CAAX,GAAe7B,QAAQ,CAAC1B,CAAjC,EAAoC,CAApC,CAFF;AAGA,eAAOwD,EAAE,GAAGE,EAAZ;AACD,OAVD;AAYA,WAAKC,UAAL;AACA,WAAKnD,cAAL,CAAoBoD,OAApB,CAA4B,UAACf,MAAD,EAAiB;AAC3C,YAAMgB,GAAG,GAAGhB,MAAM,CAACG,IAAP,CAAY,GAAZ,CAAZ;;AACA,YAAI,KAAI,CAACD,QAAL,CAAcc,GAAd,EAAmBZ,OAAvB,EAAgC;AAC9B,UAAA,KAAI,CAACa,WAAL,CAAiBD,GAAjB;AACD;AACF,OALD;AAMD;;;WAED,6BAA2BjC,WAA3B,EAA6C;AAC3C,aAAO,IAAIM,gBAAJ,CACLN,WAAW,CAACY,GAAZ,CAAgBb,QAAhB,CAAyB,GAAzB,EAA8BP,KAA9B,EADK,EAELQ,WAAW,CAACa,GAAZ,CACGd,QADH,CACY,GADZ,EAEGoC,IAFH,GAGG3B,QAHH,CAGY,CAAC,CAAD,EAAI,CAAJ,CAHZ,CAFK,CAAP;AAOD;;;WAED,wBACEzB,EADF,EAEEC,EAFF,EAGEC,UAHF,EAIEQ,QAJF,EAKElB,GALF,EAME;AACA,UAAMe,IAAI,GAAGG,QAAb;AACA,UAAM2C,OAAO,GAAG7D,GAAG,CAACoB,aAAJ,CAAkB,wBAASZ,EAAE,CAACa,GAAZ,EAAiBb,EAAE,CAACc,GAApB,CAAlB,EAA4CP,IAA5C,CAAhB;AACA,UAAM+C,OAAO,GAAG9D,GAAG,CAACoB,aAAJ,CAAkB,wBAASX,EAAE,CAACY,GAAZ,EAAiBZ,EAAE,CAACa,GAApB,CAAlB,EAA4CP,IAA5C,CAAhB;AACA,UAAMI,WAAW,GAAGnB,GAAG,CAACoB,aAAJ,CAClB,wBAASV,UAAU,CAACW,GAApB,EAAyBX,UAAU,CAACY,GAApC,CADkB,EAElBP,IAFkB,CAApB;AAIA,UAAMgD,SAAS,GAAG5C,WAAW,CAACtB,CAAZ,GAAgBgE,OAAO,CAAChE,CAA1C;AACA,UAAMmE,YAAY,GAAGF,OAAO,CAACjE,CAAR,GAAYsB,WAAW,CAACtB,CAA7C;AAEA,UAAIoE,SAAJ;AACA,UAAIC,UAAJ;;AACA,UAAIxD,UAAU,CAACW,GAAX,GAAiBb,EAAE,CAACa,GAApB,GAA0B,CAA1B,IAA+BX,UAAU,CAACW,GAAX,GAAiBZ,EAAE,CAACY,GAApB,GAA0B,CAA7D,EAAgE;AAC9D,YAAM8C,KAAK,GACPnD,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqC,MAAMP,EAAE,CAACa,GAA9C,IACEL,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqCN,EAAE,CAACY,GAAH,GAAS,GAA9C,CAFF;;AAGA,YAAIX,UAAU,CAACW,GAAX,GAAiBb,EAAE,CAACa,GAApB,GAA0B,CAA9B,EAAiC;AAE/B4C,UAAAA,SAAS,GACLjD,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqCL,UAAU,CAACW,GAAX,GAAiBb,EAAE,CAACa,GAAzD,CADF;AAEA6C,UAAAA,UAAU,GAAGC,KAAK,GAAGF,SAArB;AACD,SALD,MAKO;AACLC,UAAAA,UAAU,GACNlD,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqCN,EAAE,CAACY,GAAH,GAASX,UAAU,CAACW,GAAzD,CADF;AAEA4C,UAAAA,SAAS,GAAGE,KAAK,GAAGD,UAApB;AACD;AACF,OAdD,MAcO;AAELD,QAAAA,SAAS,GAAKjD,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqCL,UAAU,CAACW,GAAX,GAAiBZ,EAAE,CAACY,GAAzD,CAAZ;AACA6C,QAAAA,UAAU,GACNlD,IAAI,CAACsC,GAAL,CAAS,CAAT,EAAYvC,IAAZ,IAAoB,GAArB,GAA4B,GAA7B,IAAqCP,EAAE,CAACa,GAAH,GAASX,UAAU,CAACW,GAAzD,CADF;AAED;;AACD,UAAMI,WAAW,GAAG,IAAIM,gBAAJ,CAClBZ,WAAW,CAACc,QAAZ,CAAqBgC,SAArB,EAAgCF,SAAhC,CADkB,EAElB5C,WAAW,CAACgB,GAAZ,CAAgB+B,UAAhB,EAA4BF,YAA5B,CAFkB,CAApB;AAIA,aAAOvC,WAAP;AACD;;;WAED,sBAAoB;AAAA;;AAClB2C,MAAAA,MAAM,CAACC,IAAP,CAAY,KAAKzB,QAAjB,EAA2B0B,GAA3B,CAA+B,UAACZ,GAAD,EAAS;AACtC,YAAMa,CAAC,GAAG,MAAI,CAAC3B,QAAL,CAAcc,GAAd,EAAmBhB,MAA7B;;AAEA,YACE6B,CAAC,CAAC,CAAD,CAAD,KAAS,MAAI,CAACrD,QAAd,IACA,CAAC,MAAI,CAACY,YAAL,CAAkB0C,QAAlB,CAA2B,IAAIC,eAAJ,CAAUF,CAAC,CAAC,CAAD,CAAX,EAAgBA,CAAC,CAAC,CAAD,CAAjB,CAA3B,CAFH,EAGE;AACA,UAAA,MAAI,CAAC3B,QAAL,CAAcc,GAAd,EAAmBZ,OAAnB,GAA6B,KAA7B;AACD;AACF,OATD;AAWAsB,MAAAA,MAAM,CAACC,IAAP,CAAY,KAAKzB,QAAjB,EAA2B0B,GAA3B,CAA+B,UAACZ,GAAD,EAAS;AACtC,YAAMf,IAAI,GAAG,MAAI,CAACC,QAAL,CAAcc,GAAd,CAAb;AACAf,QAAAA,IAAI,CAAC+B,MAAL,GAAc/B,IAAI,CAACG,OAAnB;AACD,OAHD;AAKAsB,MAAAA,MAAM,CAACC,IAAP,CAAY,KAAKzB,QAAjB,EAA2B0B,GAA3B,CAA+B,UAACZ,GAAD,EAAS;AACtC,YAAMf,IAAI,GAAG,MAAI,CAACC,QAAL,CAAcc,GAAd,CAAb;;AACA,YAAIf,IAAI,CAACG,OAAL,IAAgB,CAACH,IAAI,CAACgC,MAA1B,EAAkC;AAChC,+BAAkBjB,GAAG,CAACkB,KAAJ,CAAU,GAAV,EAAeN,GAAf,CAAmB,UAACO,CAAD;AAAA,mBAAOC,MAAM,CAACD,CAAD,CAAb;AAAA,WAAnB,CAAlB;AAAA;AAAA,cAAOjF,CAAP;AAAA,cAAUC,CAAV;AAAA,cAAakF,CAAb;;AAEA,cAAI,CAAC,MAAI,CAACC,YAAL,CAAkBpF,CAAlB,EAAqBC,CAArB,EAAwBkF,CAAxB,EAA2BA,CAAC,GAAG,CAA/B,CAAL,EAAwC;AACtC,YAAA,MAAI,CAACE,cAAL,CAAoBrF,CAApB,EAAuBC,CAAvB,EAA0BkF,CAA1B,EAA6BA,CAAC,GAAG,CAAjC;AACD;AACF;AACF,OATD;AAWA,WAAKG,cAAL;AACD;;;WAED,qBAAmBxB,GAAnB,EAAgC;AAC9B,UAAMyB,CAAC,GAAG,KAAKvC,QAAL,CAAcc,GAAd,CAAV;;AACA,UAAI,CAACyB,CAAL,EAAQ;AACN;AACD;;AACD,UAAIxC,IAAI,GAAG,KAAKxC,SAAL,CAAeiF,OAAf,CAAuB1B,GAAvB,CAAX;;AACA,UAAI,CAACf,IAAL,EAAW;AACT,YAAM0C,SAAS,GAAG,kCAChB,KAAKlG,KAAL,CAAWmG,cADK,CAAlB;AAGA3C,QAAAA,IAAI,GAAG,IAAI4C,kBAAJ,CACL7B,GADK,EAEL,KAAKtE,GAFA,EAGLiG,SAHK,EAIL,KAAKlG,KAAL,CAAWmG,cAJN,CAAP;AAMA3C,QAAAA,IAAI,CAAC6C,IAAL,GAAY9B,GAAZ;AAEAyB,QAAAA,CAAC,CAACrC,OAAF,GAAY,IAAZ;AACAqC,QAAAA,CAAC,CAACT,MAAF,GAAW,IAAX;AACAS,QAAAA,CAAC,CAACR,MAAF,GAAW,IAAX;AAGA,aAAKxF,KAAL,CAAWsG,aAAX,CAAyB1C,IAAzB,CAA8BJ,IAAI,CAAC+C,UAAnC;AAEA,aAAKvF,SAAL,CAAewF,OAAf,CAAuBhD,IAAvB,EAA6Be,GAA7B;AAEA,aAAKF,UAAL;AACA,aAAKtE,YAAL,CAAkB0G,YAAlB;AACD,OAvBD,MAuBO;AAELjD,QAAAA,IAAI,CAAC+C,UAAL,CAAgBG,IAAhB;AACAV,QAAAA,CAAC,CAACrC,OAAF,GAAY,IAAZ;AACAqC,QAAAA,CAAC,CAACT,MAAF,GAAW,IAAX;AACAS,QAAAA,CAAC,CAACR,MAAF,GAAW,IAAX;AAEA,aAAKnB,UAAL;AACD;AACF;;;WAED,sBAAoB5D,CAApB,EAA+BC,CAA/B,EAA0CkF,CAA1C,EAAqDlE,OAArD,EAA2E;AACzE,UAAMiF,EAAE,GAAG9E,IAAI,CAACC,KAAL,CAAWrB,CAAC,GAAG,CAAf,CAAX;AACA,UAAMmG,EAAE,GAAG/E,IAAI,CAACC,KAAL,CAAWpB,CAAC,GAAG,CAAf,CAAX;AACA,UAAMmG,EAAE,GAAGjB,CAAC,GAAG,CAAf;AACA,UAAMpC,IAAI,GAAG,KAAKC,QAAL,CAAc,CAACkD,EAAD,EAAKC,EAAL,EAASC,EAAT,EAAanD,IAAb,CAAkB,GAAlB,CAAd,CAAb;;AACA,UAAIF,IAAI,IAAIA,IAAI,CAACgC,MAAjB,EAAyB;AACvBhC,QAAAA,IAAI,CAAC+B,MAAL,GAAc,IAAd;AACA,eAAO,IAAP;AACD,OAHD,MAGO,IAAI/B,IAAI,IAAIA,IAAI,CAACsD,MAAjB,EAAyB;AAC9BtD,QAAAA,IAAI,CAAC+B,MAAL,GAAc,IAAd;AACD;;AACD,UAAIsB,EAAE,GAAGnF,OAAT,EAAkB;AAChB,eAAO,KAAKmE,YAAL,CAAkBc,EAAlB,EAAsBC,EAAtB,EAA0BC,EAA1B,EAA8BnF,OAA9B,CAAP;AACD;;AACD,aAAO,KAAP;AACD;;;WAED,wBAAsBjB,CAAtB,EAAiCC,CAAjC,EAA4CkF,CAA5C,EAAuDjE,OAAvD,EAAwE;AACtE,WAAK,IAAI2B,CAAC,GAAG,IAAI7C,CAAjB,EAAoB6C,CAAC,GAAG,IAAI7C,CAAJ,GAAQ,CAAhC,EAAmC6C,CAAC,EAApC,EAAwC;AACtC,aAAK,IAAID,CAAC,GAAG,IAAI3C,CAAjB,EAAoB2C,CAAC,GAAG,IAAI3C,CAAJ,GAAQ,CAAhC,EAAmC2C,CAAC,EAApC,EAAwC;AACtC,cAAMkB,GAAG,GAAG,CAACjB,CAAD,EAAID,CAAJ,EAAOuC,CAAC,GAAG,CAAX,EAAclC,IAAd,CAAmB,GAAnB,CAAZ;AACA,cAAMF,IAAI,GAAG,KAAKC,QAAL,CAAcc,GAAd,CAAb;;AACA,cAAIf,IAAI,IAAIA,IAAI,CAACgC,MAAjB,EAAyB;AACvBhC,YAAAA,IAAI,CAAC+B,MAAL,GAAc,IAAd;AACA;AACD,WAHD,MAGO,IAAI/B,IAAI,IAAIA,IAAI,CAACsD,MAAjB,EAAyB;AAC9BtD,YAAAA,IAAI,CAAC+B,MAAL,GAAc,IAAd;AACD;;AAED,cAAIK,CAAC,GAAG,CAAJ,GAAQjE,OAAZ,EAAqB;AACnB,iBAAKmE,cAAL,CAAoBxC,CAApB,EAAuBD,CAAvB,EAA0BuC,CAAC,GAAG,CAA9B,EAAiCjE,OAAjC;AACD;AACF;AACF;AACF;;;WAED,qBAAmB6B,IAAnB,EAA8B;AAC5B,UAAMuD,UAAU,GAAG,KAAK/G,KAAL,CAAWsG,aAAX,CAAyBU,OAAzB,CAAiCxD,IAAI,CAAC+C,UAAtC,CAAnB;;AACA,UAAIQ,UAAU,GAAG,CAAC,CAAlB,EAAqB;AACnB,aAAK/G,KAAL,CAAWsG,aAAX,CAAyBW,MAAzB,CAAgCF,UAAhC,EAA4C,CAA5C;AACD;;AAEDvD,MAAAA,IAAI,CAAC+C,UAAL,CAAgBW,IAAhB,CAAqB,QAArB,EAA+B,IAA/B;AACA1D,MAAAA,IAAI,CAAC+C,UAAL,CAAgBY,OAAhB;AACA,WAAKpH,YAAL,CAAkB0G,YAAlB;AAGAjD,MAAAA,IAAI,GAAG,IAAP;AACD;;;WAED,0BAAwB;AACtB,WAAK,IAAMe,GAAX,IAAkB,KAAKd,QAAvB,EAAiC;AAC/B,YAAI,CAAC,KAAKA,QAAL,CAAcc,GAAd,EAAmBgB,MAAxB,EAAgC;AAE9B,cAAM/B,IAAI,GAAG,KAAKxC,SAAL,CAAeiF,OAAf,CAAuB1B,GAAvB,CAAb;;AAEA,cAAIf,IAAJ,EAAU;AAERA,YAAAA,IAAI,CAAC+C,UAAL,CAAgBa,IAAhB;AACD;;AACD,iBAAO,KAAK3D,QAAL,CAAcc,GAAd,CAAP;AACD;AACF;AACF;;;WAED,uBAAqB;AACnB,WAAKvE,KAAL,CAAWsG,aAAX,CAAyBhC,OAAzB,CAAiC,UAACtE,KAAD,EAAgB;AAC/CA,QAAAA,KAAK,CAACkH,IAAN,CAAW,QAAX,EAAqB,IAArB;AACAlH,QAAAA,KAAK,CAACmH,OAAN;AACD,OAHD;AAKA,WAAKnH,KAAL,CAAWsG,aAAX,GAA2B,EAA3B;AACA,WAAKvG,YAAL,CAAkB0G,YAAlB;AACA,WAAKhD,QAAL,GAAgB,EAAhB;AACA,WAAKzC,SAAL,CAAeqG,OAAf;AACD","sourcesContent":["import { Bounds, GeoCoordinates, Point, toLngLat } from '@antv/geo-coord';\nimport {\n createLayerContainer,\n ILayer,\n ILayerService,\n ILngLat,\n} from '@antv/l7-core';\nimport { Container } from 'inversify';\n\nimport ImageTile from './ImageTile';\nimport TileCache from './tileCache';\n\n// Tip: 瓦片地图的存储上限\nconst CacheLimit = 30;\n\nexport default class Tile {\n public tileList: any = {};\n public tileCache: any;\n\n public updateTileList: any[];\n public tileZoom: number;\n public noPruneRange: any;\n public url: string;\n public resolution: number;\n public maxSourceZoom: number;\n public crstype: string;\n public currentCrs: any;\n\n public layerService: ILayerService;\n public layer: ILayer;\n constructor(props: any) {\n this.layerService = props.layerService;\n this.layer = props.layer;\n this.url = props.url;\n this.resolution = props.resolution === 'low' ? -1 : 0;\n this.maxSourceZoom = props.maxSourceZoom;\n this.crstype = props.crstype;\n\n this.currentCrs = new GeoCoordinates.default({\n start: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n projection: this.crstype,\n }).crs as any;\n\n this.destroyTile = this.destroyTile.bind(this);\n this.tileCache = new TileCache(CacheLimit, this.destroyTile);\n\n this.updateTileList = [];\n\n this.removeTiles = this.removeTiles.bind(this);\n }\n\n public calCurrentTiles(oprions: any) {\n const {\n NE,\n SW,\n tileCenter,\n currentZoom,\n minSourceZoom,\n minZoom,\n maxZoom,\n } = oprions;\n // TODO: 当前瓦片的层级要比地图底图的层级低\n if (currentZoom >= this.maxSourceZoom) {\n return;\n }\n const zoom = Math.floor(currentZoom) + this.resolution;\n\n this.tileZoom = zoom > this.maxSourceZoom ? this.maxSourceZoom : zoom;\n\n if (\n currentZoom < minZoom ||\n currentZoom >= maxZoom ||\n currentZoom < minSourceZoom\n ) {\n this.removeTiles();\n return;\n }\n\n this.updateTileList = [];\n\n // 计算瓦片中心\n const centerPoint = this.currentCrs.lngLatToPoint(\n toLngLat(tileCenter.lng, tileCenter.lat),\n this.tileZoom,\n );\n const centerXY = centerPoint.divideBy(256).floor();\n\n const pixelBounds = this.getPixelBounds(\n NE,\n SW,\n tileCenter,\n this.tileZoom,\n this.currentCrs,\n ); // 计算像素范围\n const tileRange = this.pxBoundsToTileRange(pixelBounds); // 计算瓦片范围\n\n const margin = 4;\n\n this.noPruneRange = new Bounds(\n tileRange.getBottomLeft().subtract([margin, -margin]),\n tileRange.getTopRight().add([margin, -margin]),\n );\n\n // T: isFinite(n: number) 用于检测 n 是否无穷大\n if (\n !(\n isFinite(tileRange.min.x) &&\n isFinite(tileRange.min.y) &&\n isFinite(tileRange.max.x) &&\n isFinite(tileRange.max.y)\n )\n ) {\n throw new Error('Attempted to load an infinite number of tiles');\n }\n\n // 根据视野判断新增的瓦片索引\n for (let j = tileRange.min.y; j <= tileRange.max.y; j++) {\n for (let i = tileRange.min.x; i <= tileRange.max.x; i++) {\n const coords = [i, j, this.tileZoom];\n const tile = this.tileList[coords.join('_')];\n if (tile) {\n tile.current = true;\n } else {\n this.tileList[coords.join('_')] = {\n current: true,\n coords,\n };\n this.updateTileList.push(coords);\n }\n }\n }\n\n // 瓦片列表排序\n this.updateTileList.sort((a: any, b: any) => {\n const tile1 = a;\n const tile2 = b;\n const d1 =\n Math.pow(tile1[0] * 1 - centerXY.x, 2) +\n Math.pow(tile1[1] * 1 - centerXY.y, 2);\n const d2 =\n Math.pow(tile2[0] * 1 - centerXY.x, 2) +\n Math.pow(tile2[1] * 1 - centerXY.y, 2);\n return d1 - d2;\n });\n\n this.pruneTiles();\n this.updateTileList.forEach((coords: any) => {\n const key = coords.join('_');\n if (this.tileList[key].current) {\n this.requestTile(key);\n }\n });\n }\n\n public pxBoundsToTileRange(pixelBounds: any) {\n return new Bounds(\n pixelBounds.min.divideBy(256).floor(),\n pixelBounds.max\n .divideBy(256)\n .ceil()\n .subtract([1, 1]),\n );\n }\n\n public getPixelBounds(\n NE: ILngLat,\n SW: ILngLat,\n tileCenter: ILngLat,\n tileZoom: number,\n crs: any,\n ) {\n const zoom = tileZoom;\n const NEPoint = crs.lngLatToPoint(toLngLat(NE.lng, NE.lat), zoom);\n const SWPoint = crs.lngLatToPoint(toLngLat(SW.lng, SW.lat), zoom);\n const centerPoint = crs.lngLatToPoint(\n toLngLat(tileCenter.lng, tileCenter.lat),\n zoom,\n );\n const topHeight = centerPoint.y - NEPoint.y;\n const bottomHeight = SWPoint.y - centerPoint.y;\n // 跨日界线的情况\n let leftWidth;\n let rightWidth;\n if (tileCenter.lng - NE.lng > 0 || tileCenter.lng - SW.lng < 0) {\n const width =\n ((Math.pow(2, zoom) * 256) / 360) * (180 - NE.lng) +\n ((Math.pow(2, zoom) * 256) / 360) * (SW.lng + 180);\n if (tileCenter.lng - NE.lng > 0) {\n // 日界线在右侧\n leftWidth =\n ((Math.pow(2, zoom) * 256) / 360) * (tileCenter.lng - NE.lng);\n rightWidth = width - leftWidth;\n } else {\n rightWidth =\n ((Math.pow(2, zoom) * 256) / 360) * (SW.lng - tileCenter.lng);\n leftWidth = width - rightWidth;\n }\n } else {\n // 不跨日界线\n leftWidth = ((Math.pow(2, zoom) * 256) / 360) * (tileCenter.lng - SW.lng);\n rightWidth =\n ((Math.pow(2, zoom) * 256) / 360) * (NE.lng - tileCenter.lng);\n }\n const pixelBounds = new Bounds(\n centerPoint.subtract(leftWidth, topHeight),\n centerPoint.add(rightWidth, bottomHeight),\n );\n return pixelBounds;\n }\n\n public pruneTiles() {\n Object.keys(this.tileList).map((key) => {\n const c = this.tileList[key].coords;\n // 如果不是同一个缩放层级,则将瓦片设为不显示\n if (\n c[2] !== this.tileZoom ||\n !this.noPruneRange.contains(new Point(c[0], c[1]))\n ) {\n this.tileList[key].current = false;\n }\n });\n\n Object.keys(this.tileList).map((key) => {\n const tile = this.tileList[key];\n tile.retain = tile.current;\n });\n\n Object.keys(this.tileList).map((key) => {\n const tile = this.tileList[key];\n if (tile.current && !tile.active) {\n const [x, y, z] = key.split('_').map((v) => Number(v));\n\n if (!this.retainParent(x, y, z, z - 5)) {\n this.retainChildren(x, y, z, z + 2);\n }\n }\n });\n\n this.removeOutTiles();\n }\n\n public requestTile(key: string) {\n const t = this.tileList[key];\n if (!t) {\n return;\n }\n let tile = this.tileCache.getTile(key);\n if (!tile) {\n const container = createLayerContainer(\n this.layer.sceneContainer as Container,\n );\n tile = new ImageTile(\n key,\n this.url,\n container,\n this.layer.sceneContainer as Container,\n );\n tile.name = key;\n\n t.current = true;\n t.retain = true;\n t.active = true;\n\n // 往 imageTileLayer 中添加子图层\n this.layer.layerChildren.push(tile.imageLayer);\n\n this.tileCache.setTile(tile, key);\n\n this.pruneTiles();\n this.layerService.renderLayers();\n } else {\n // Tip: show 方法就是将相应的瓦片图片添加到渲染队列\n tile.imageLayer.show();\n t.current = true;\n t.retain = true;\n t.active = true;\n\n this.pruneTiles();\n }\n }\n\n public retainParent(x: number, y: number, z: number, minZoom: number): any {\n const x2 = Math.floor(x / 2);\n const y2 = Math.floor(y / 2);\n const z2 = z - 1;\n const tile = this.tileList[[x2, y2, z2].join('_')];\n if (tile && tile.active) {\n tile.retain = true;\n return true;\n } else if (tile && tile.loaded) {\n tile.retain = true;\n }\n if (z2 > minZoom) {\n return this.retainParent(x2, y2, z2, minZoom);\n }\n return false;\n }\n\n public retainChildren(x: number, y: number, z: number, maxZoom: number) {\n for (let i = 2 * x; i < 2 * x + 2; i++) {\n for (let j = 2 * y; j < 2 * y + 2; j++) {\n const key = [i, j, z + 1].join('_');\n const tile = this.tileList[key];\n if (tile && tile.active) {\n tile.retain = true;\n continue;\n } else if (tile && tile.loaded) {\n tile.retain = true;\n }\n\n if (z + 1 < maxZoom) {\n this.retainChildren(i, j, z + 1, maxZoom);\n }\n }\n }\n }\n\n public destroyTile(tile: any) {\n const layerIndex = this.layer.layerChildren.indexOf(tile.imageLayer);\n if (layerIndex > -1) {\n this.layer.layerChildren.splice(layerIndex, 1);\n }\n\n tile.imageLayer.emit('remove', null);\n tile.imageLayer.destroy();\n this.layerService.renderLayers();\n\n // 清除 tileCache 中的存储 相当于 tileCache.setTile(tile, null)\n tile = null;\n }\n\n public removeOutTiles() {\n for (const key in this.tileList) {\n if (!this.tileList[key].retain) {\n // Tip: 不需要显示的瓦片对象\n const tile = this.tileCache.getTile(key);\n // Tip: 若是网格对象存在\n if (tile) {\n // Tip: hide 方法就是将相应的瓦片图片从渲染队列中剔除\n tile.imageLayer.hide();\n }\n delete this.tileList[key];\n }\n }\n }\n\n public removeTiles() {\n this.layer.layerChildren.forEach((layer: any) => {\n layer.emit('remove', null);\n layer.destroy();\n });\n\n this.layer.layerChildren = [];\n this.layerService.renderLayers();\n this.tileList = {};\n this.tileCache.destory();\n }\n}\n"],"file":"Tile.js"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var LRUCache = function () {
17
+ function LRUCache() {
18
+ var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 50;
19
+ var destroy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
20
+ return '';
21
+ };
22
+ (0, _classCallCheck2.default)(this, LRUCache);
23
+ (0, _defineProperty2.default)(this, "limit", void 0);
24
+ (0, _defineProperty2.default)(this, "order", void 0);
25
+ (0, _defineProperty2.default)(this, "cache", void 0);
26
+ (0, _defineProperty2.default)(this, "destroy", void 0);
27
+ this.limit = limit;
28
+ this.destroy = destroy;
29
+ this.order = [];
30
+ this.clear();
31
+ }
32
+
33
+ (0, _createClass2.default)(LRUCache, [{
34
+ key: "clear",
35
+ value: function clear() {
36
+ var _this = this;
37
+
38
+ this.order.forEach(function (key) {
39
+ _this.delete(key);
40
+ });
41
+ this.cache = {};
42
+ this.order = [];
43
+ }
44
+ }, {
45
+ key: "get",
46
+ value: function get(key) {
47
+ var value = this.cache[key];
48
+
49
+ if (value) {
50
+ this.deleteOrder(key);
51
+ this.appendOrder(key);
52
+ }
53
+
54
+ return value;
55
+ }
56
+ }, {
57
+ key: "set",
58
+ value: function set(key, value) {
59
+ if (!this.cache[key]) {
60
+ if (Object.keys(this.cache).length === this.limit) {
61
+ this.delete(this.order[0]);
62
+ }
63
+
64
+ this.cache[key] = value;
65
+ this.appendOrder(key);
66
+ } else {
67
+ this.delete(key);
68
+ this.cache[key] = value;
69
+ this.appendOrder(key);
70
+ }
71
+ }
72
+ }, {
73
+ key: "delete",
74
+ value: function _delete(key) {
75
+ var value = this.cache[key];
76
+
77
+ if (value) {
78
+ this.deleteCache(key);
79
+ this.deleteOrder(key);
80
+ this.destroy(value, key);
81
+ }
82
+ }
83
+ }, {
84
+ key: "deleteCache",
85
+ value: function deleteCache(key) {
86
+ delete this.cache[key];
87
+ }
88
+ }, {
89
+ key: "deleteOrder",
90
+ value: function deleteOrder(key) {
91
+ var index = this.order.findIndex(function (o) {
92
+ return o === key;
93
+ });
94
+
95
+ if (index >= 0) {
96
+ this.order.splice(index, 1);
97
+ }
98
+ }
99
+ }, {
100
+ key: "appendOrder",
101
+ value: function appendOrder(key) {
102
+ this.order.push(key);
103
+ }
104
+ }]);
105
+ return LRUCache;
106
+ }();
107
+
108
+ exports.default = LRUCache;
109
+ //# sourceMappingURL=lruCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/imagetile/utils/lruCache.ts"],"names":["LRUCache","limit","destroy","order","clear","forEach","key","delete","cache","value","deleteOrder","appendOrder","Object","keys","length","deleteCache","index","findIndex","o","splice","push"],"mappings":";;;;;;;;;;;;;;;IAOqBA,Q;AAKnB,sBAA4C;AAAA,QAAhCC,KAAgC,uEAAxB,EAAwB;AAAA,QAApBC,OAAoB,uEAAV;AAAA,aAAM,EAAN;AAAA,KAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAC1C,SAAKD,KAAL,GAAaA,KAAb;AACA,SAAKC,OAAL,GAAeA,OAAf;AACA,SAAKC,KAAL,GAAa,EAAb;AACA,SAAKC,KAAL;AACD;;;;WAED,iBAAe;AAAA;;AACb,WAAKD,KAAL,CAAWE,OAAX,CAAmB,UAACC,GAAD,EAAc;AAC/B,QAAA,KAAI,CAACC,MAAL,CAAYD,GAAZ;AACD,OAFD;AAGA,WAAKE,KAAL,GAAa,EAAb;AAEA,WAAKL,KAAL,GAAa,EAAb;AACD;;;WAED,aAAWG,GAAX,EAAwB;AACtB,UAAMG,KAAK,GAAG,KAAKD,KAAL,CAAWF,GAAX,CAAd;;AACA,UAAIG,KAAJ,EAAW;AAET,aAAKC,WAAL,CAAiBJ,GAAjB;AACA,aAAKK,WAAL,CAAiBL,GAAjB;AACD;;AACD,aAAOG,KAAP;AACD;;;WAED,aAAWH,GAAX,EAAwBG,KAAxB,EAAoC;AAClC,UAAI,CAAC,KAAKD,KAAL,CAAWF,GAAX,CAAL,EAAsB;AAEpB,YAAIM,MAAM,CAACC,IAAP,CAAY,KAAKL,KAAjB,EAAwBM,MAAxB,KAAmC,KAAKb,KAA5C,EAAmD;AACjD,eAAKM,MAAL,CAAY,KAAKJ,KAAL,CAAW,CAAX,CAAZ;AACD;;AAED,aAAKK,KAAL,CAAWF,GAAX,IAAkBG,KAAlB;AACA,aAAKE,WAAL,CAAiBL,GAAjB;AACD,OARD,MAQO;AAEL,aAAKC,MAAL,CAAYD,GAAZ;AAEA,aAAKE,KAAL,CAAWF,GAAX,IAAkBG,KAAlB;AACA,aAAKE,WAAL,CAAiBL,GAAjB;AACD;AACF;;;WAED,iBAAcA,GAAd,EAA2B;AACzB,UAAMG,KAAK,GAAG,KAAKD,KAAL,CAAWF,GAAX,CAAd;;AACA,UAAIG,KAAJ,EAAW;AACT,aAAKM,WAAL,CAAiBT,GAAjB;AACA,aAAKI,WAAL,CAAiBJ,GAAjB;AACA,aAAKJ,OAAL,CAAaO,KAAb,EAAoBH,GAApB;AACD;AACF;;;WAED,qBAAmBA,GAAnB,EAAgC;AAC9B,aAAO,KAAKE,KAAL,CAAWF,GAAX,CAAP;AACD;;;WAED,qBAAmBA,GAAnB,EAAgC;AAC9B,UAAMU,KAAK,GAAG,KAAKb,KAAL,CAAWc,SAAX,CAAqB,UAACC,CAAD;AAAA,eAAOA,CAAC,KAAKZ,GAAb;AAAA,OAArB,CAAd;;AACA,UAAIU,KAAK,IAAI,CAAb,EAAgB;AACd,aAAKb,KAAL,CAAWgB,MAAX,CAAkBH,KAAlB,EAAyB,CAAzB;AACD;AACF;;;WAED,qBAAmBV,GAAnB,EAAgC;AAC9B,WAAKH,KAAL,CAAWiB,IAAX,CAAgBd,GAAhB;AACD","sourcesContent":["/**\n * LRU Cache class with limit\n *\n * Update order for each get/set operation\n * Delete oldest when reach given limit\n */\n\nexport default class LRUCache {\n public limit: number;\n public order: any[];\n public cache: any;\n public destroy: any;\n constructor(limit = 50, destroy = () => '') {\n this.limit = limit;\n this.destroy = destroy;\n this.order = [];\n this.clear();\n }\n\n public clear() {\n this.order.forEach((key: any) => {\n this.delete(key);\n });\n this.cache = {};\n // access/update order, first item is oldest, last item is newest\n this.order = [];\n }\n\n public get(key: string) {\n const value = this.cache[key];\n if (value) {\n // update order\n this.deleteOrder(key);\n this.appendOrder(key);\n }\n return value;\n }\n\n public set(key: string, value: any) {\n if (!this.cache[key]) {\n // if reach limit, delete the oldest\n if (Object.keys(this.cache).length === this.limit) {\n this.delete(this.order[0]);\n }\n\n this.cache[key] = value;\n this.appendOrder(key);\n } else {\n // if found in cache, delete the old one, insert new one to the first of list\n this.delete(key);\n\n this.cache[key] = value;\n this.appendOrder(key);\n }\n }\n\n public delete(key: string) {\n const value = this.cache[key];\n if (value) {\n this.deleteCache(key);\n this.deleteOrder(key);\n this.destroy(value, key);\n }\n }\n\n public deleteCache(key: string) {\n delete this.cache[key];\n }\n\n public deleteOrder(key: string) {\n const index = this.order.findIndex((o) => o === key);\n if (index >= 0) {\n this.order.splice(index, 1);\n }\n }\n\n public appendOrder(key: string) {\n this.order.push(key);\n }\n}\n"],"file":"lruCache.js"}