推荐的方式我们呈现光栅层到地图。该图层的源代码具有初始图块网址。现在我们要更改源的tile-url并触发新tile的重新加载。例如。我们针对不同的时间点拼贴,并且我们希望逐步完成不同的时间步骤。
map.addSource('tile-source', {...});
map.addLayer('tile-layer', {source: 'tile-source', ...});
// react to a button click or what ever to trigger tile url change
...
const source = map.getSource('tile-source');
source.tiles = ['new-tile-url'];
source._pyramid.reload();
做这工作得很好。但是,当然,使用私人方法是不好的做法。看到下面的原因:
什么可以与当前版本来完成从GitHub(最新提交b155118,2016年7月28日)
// init map, add layer, add source, like above
const source = map.getSource('tile-source');
source.tiles = ['new-tile-url'];
map.styles.sources['tile-source'].reload();
它做这种方式,因为前者TilePyramid
已被重构为SourceCache
。在这里,我们在SourceCache
上调用reload()
而不是RasterTileSource
。似乎我们不再需要使用任何私有方法,尽管这仍然看起来像未公开的API,这可能在未来的版本中打破。
而且似乎有打电话reload()
时,与内存泄漏问题:调用reload()
时 https://github.com/mapbox/mapbox-gl-js/issues/2266
此外缓存被清除。目前看起来没有问题。
// This yields a `RasterTileSource` instance
map.getSource('tile-source');
// This yields a `SourceCache` instance
map.styles.sources['tile-source'];
// What's really confusing too, at least namingwise
map.getStyle(); // <-- Yields the maps (visual) style
的SourceCache
有RasterTileSource
实例作为私人_source
场。
问题
什么是推荐的方式做这样的事情?这是一个功能正在工作吗?有没有解释为什么这不是一个功能(还)或永远不会?
谢谢,我们会尽力而为。 – Scarysize
这样做的时候,我经常会看到'source already exists'错误。我希望有一个像source.setTiles(['https:// ...'])这样的setter,它可以更好地为GeoJSON图层提供'source.setData'。 –
如果您认为已经移除了源,但您没有看到“源已存在”错误,因为某些图层使用了它。确保没有使用你的源的图层,它将被map.removeSource移除 – Andrew