动态重新加载传单图块
Dynamically reload leaflet tiles
我想根据对用户 activity 的更改加载特定的传单图块。因此,比方说,用户打开地图并看到特定的图块。然后,几分钟后,重新加载一些图块(因为它们已更改)并显示。也许原来的是橙色的,新的是蓝色的。
This question and answer 给出一个可以刷新 所有 磁贴的建议,但效率很低。
有没有办法强制重新加载特定的个别图块?
您必须为此实现一个插件,子类化 L.TileLayer
并覆盖它的 createTile()
方法,这样您要么拥有对图块的引用,要么添加某种超时或逻辑每个(loading/loaded)块。
目前还没有通用的方法,您必须编写代码。
我知道我来晚了,但我有解决办法。您可以使用仅为应重新加载的图块更新的参数来操纵 url。其余的将保留缓存的图块图像。
L.TileLayer.CustomLayer = L.TileLayer.extend({
getTileUrl: (coords) => {
var test = some_function_deciding_test_based_on_tile(coords);
return `http://example.com/tile_${coords.x}_${coords.y}.png?test=${test}`;
}
});
在这种情况下,如果 some_function_deciding_test_based_on_tile(coords)
returns 与上次相同的值,将使用缓存的图块。否则将获取一个新图块。
我想根据对用户 activity 的更改加载特定的传单图块。因此,比方说,用户打开地图并看到特定的图块。然后,几分钟后,重新加载一些图块(因为它们已更改)并显示。也许原来的是橙色的,新的是蓝色的。
This question and answer 给出一个可以刷新 所有 磁贴的建议,但效率很低。
有没有办法强制重新加载特定的个别图块?
您必须为此实现一个插件,子类化 L.TileLayer
并覆盖它的 createTile()
方法,这样您要么拥有对图块的引用,要么添加某种超时或逻辑每个(loading/loaded)块。
目前还没有通用的方法,您必须编写代码。
我知道我来晚了,但我有解决办法。您可以使用仅为应重新加载的图块更新的参数来操纵 url。其余的将保留缓存的图块图像。
L.TileLayer.CustomLayer = L.TileLayer.extend({
getTileUrl: (coords) => {
var test = some_function_deciding_test_based_on_tile(coords);
return `http://example.com/tile_${coords.x}_${coords.y}.png?test=${test}`;
}
});
在这种情况下,如果 some_function_deciding_test_based_on_tile(coords)
returns 与上次相同的值,将使用缓存的图块。否则将获取一个新图块。