python - Python Folium - 几秒钟后关闭城市边界
问题描述
有没有办法在几秒钟后自动关闭城市边界?我尝试使用 time.sleep() 但它不起作用。太感谢了。
蟒蛇代码:
import folium
import os
import time
m = folium.Map(location=[22.3193, 114.1694], zoom_start=10, tiles='CartoDB Dark_ Matter', zoom_control=False, height='75%')
outline = os.path.join('outline.json')
folium.GeoJson(outline, name='outline', show=True).add_to(m)
time.sleep(1000)
folium.GeoJson(outline, name='outline', show=False).add_to(m)
folium.TileLayer('CartoDB Dark_Matter').add_to(m)
folium.TileLayer('CartoDB Positron').add_to(m)
folium.LayerControl().add_to(m)
m.save('map.html')
解决方案
我认为最好的方法不是尝试在 Python 代码中执行此操作,而是在生成的 HTML 文件中使用 JavaScript 函数。
这应该是起始 py 文件:
import folium
import os
m = folium.Map(location=[22.3193, 114.1694], zoom_start=10, tiles='CartoDB Dark_ Matter', zoom_control=False, height='75%')
outline = os.path.join(some_path, 'outline.json')
folium.GeoJson(outline, name='outline', show=True).add_to(m)
folium.TileLayer('CartoDB Dark_Matter').add_to(m)
folium.TileLayer('CartoDB Positron').add_to(m)
folium.LayerControl().add_to(m)
m.save('map.html')
然后,在生成的 HTML 文件的末尾,只需添加以下setTimeout()
函数:
...
L.control.layers(
layer_control.base_layers,
layer_control.overlays,
{"autoZIndex": true, "collapsed": true, "position": "topright"}
).addTo(map);
tile_layer.remove();
// here is our new function, set to remove the GeoJSON layer after 3 seconds
setTimeout(function(){
map.removeLayer(geo_json);
}, 3000);
</script>
只要确保你的变量名匹配,我的 HTML 文件看起来像这样,但你的肯定会有所不同:
setTimeout(function(){
map_50c065d5877245f6ba25bdee213bf5fa.removeLayer(geo_json_39ca0b100615423f86a124836b41fa2e);
}, 3000);
在脚本元素的最开始,Folium 为地图选择了一个名称:
<script>
var map_50c065d5877245f6ba25bdee213bf5fa = L.map(
"map_50c065d5877245f6ba25bdee213bf5fa",
{
center: [22.3193, 114.1694],
crs: L.CRS.EPSG3857,
zoom: 10,
zoomControl: false,
preferCanvas: false,
}
);
...稍后,它会命名您的“轮廓”层。这是我的 HTML 的样子:
function geo_json_39ca0b100615423f86a124836b41fa2e_add (data) {
geo_json_39ca0b100615423f86a124836b41fa2e
.addData(data)
.addTo(map_50c065d5877245f6ba25bdee213bf5fa);
推荐阅读
- android - 我无法在 Android Studio 中访问“TextView”或“Button”
- azure - 如何在 node.js 中使用“@azure/ms-rest-nodeauth”获取 Azure 凭据?
- .net - 无法在 Azure 中找到 .NET 5
- python - 服务总线 CBS 身份验证已过期
- java - python列表与Java数组有何不同
- objective-c - 在 Objective C 中,将浮点数乘以 100 有时会产生一个稍微出乎意料的结果
- c# - C# 使用 system.net.FtpClient 连接显式 FTP - 证书错误
- javascript - 在按钮单击时添加 React-Select 下拉组件
- python - 如何提取numpy数组的一些特定行
- android - 改变一个变量的状态也会改变另一个变量