首页 > 解决方案 > 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')

这是叶地图

标签: pythonleafletmapsgisfolium

解决方案


我认为最好的方法不是尝试在 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);

推荐阅读