javascript - Mapbox GL JS 更新图片叠加源
问题描述
我正在做一个项目,我在屏幕上一次有 4 张地图。我有一个准系统菜单,用户可以在其中选择叠加层,它会显示在正确的地图上。
这可行,但是我使用的图像叠加层的图像源每 2 分钟更新一次服务器端。我只想有一个简单的功能来自动重新获取源代码,这样可以保证每 2 分钟更新一次。我添加了一张图片来展示它是如何工作的。
我找到了有关以这种方式更新 GeoJSON 文件的 Mapbox API 文档,但我无法弄清楚如何自动更新图像源。我看了无济于事。
这是我的带有实际源和层的屏幕截图,在下面我将为我想要做的事情编写伪代码。
这是源和层:
topleftmapbox.on('load', function() {
topleftmapbox.addSource("source_KEWX_L2_REFLECTIVITY", {
"type": "image",
"url": "images/KEWX_L2_REFLECTIVITY.gif",
"coordinates": [
[-103.009641, 33.911],
[-94.009641, 33.911],
[-94.009641, 24.911],
[-103.009641, 24.911]
]
})
var layers = topleftmapbox.getStyle().layers;
// Find the index of the first symbol layer in the map style
var firstSymbolId;
for (var i = 0; i < layers.length; i++) {
if (layers[i].type === 'symbol') {
firstSymbolId = layers[i].id;
break;
}
}
topleftmapbox.addLayer({
"id": "overlay_KEWX_L2_REFLECTIVITY",
"source": "source_KEWX_L2_REFLECTIVITY",
"type": "raster",
"raster-opacity": 0.5,
"layout": {
"visibility": "none"
},
}, firstSymbolId)
});
我想做的伪代码:
On Map load() {
start timer for every 2 minutes
Get Source "source_KEWX_L2_REFLECTIVITY"
Refresh the source with same URL ("images/KEWX_L2_REFLECTIVITY.gif") to make sure its live.
keep doing this every 2 minutes
}
解决方案
有(现在?)一种updateImage()
方法,您可以这样做:
map.getSource('source_KEWX_L2_REFLECTIVITY').updateImage({
url: "images/KEWX_L2_REFLECTIVITY.gif?" + counter++,
coordinates': [
[-103.009641, 33.911],
[-94.009641, 33.911],
[-94.009641, 24.911],
[-103.009641, 24.911]
]
});
包括增量counter
将确保您不显示缓存的图像。
推荐阅读
- angularjs - 如何在Angular中单击浏览器中的后退按钮时取回在html控件中输入的数据
- ruby-on-rails - 使用 Apartment gem 将单个租户应用程序转换为多租户应用程序
- sql-server - 如何使用日期操作从三个表中提取数据
- python-3.x - 如何在基于 Linux 的操作系统上分发基于 python 的软件
- java - 如何使用 Java 获取名称和默认浏览器版本?
- c++ - 如何在 OpenCV 中将图像与另一个图像相关联
- dataframe - 优化 PowerBI 查询以创建“迄今为止”最大值
- python - 在列表中的三个数字后添加换行符
- php - WooCommerce - 限制购物车页面上的邮政编码字符限制(不是结帐/帐户页面)
- laravel - 如何修复无法在 Amazon EC2 上连接的 Selenium?