如何在特定缩放级别显示标记?

Isa*_*c A 8 python gis leaflet geopandas folium

我能够使用以下命令显示美国数据地理每个部分的标记(以美国数据为例,因为无法显示工作数据结果):

import dload
from shapely.geometry import shape
import geopandas as gpd
import pandas as pd
import folium

json_string = 'https://raw.githubusercontent.com/datasets/geo-admin1-us/master/data/admin1-us.geojson'

j = dload.json(json_string)

gdf_usa = gpd.GeoDataFrame.from_features(j["features"])
gdf_usa.head()

gdf_usa_new = gpd.GeoDataFrame(gdf_usa, crs="EPSG:4326", geometry='geometry')

usa_map = gdf_usa_new.explore(tiles='CartoDB  positron')
usa_map

gdf_usa_new["long"] = gdf_usa_new.to_crs(epsg='4326').centroid.map(lambda p: p.x)
gdf_usa_new["lat"] = gdf_usa_new.to_crs(epsg='4326').centroid.map(lambda p: p.y)

for i in range(0,len(gdf_usa_new)):
    folium.Marker(
      location=[gdf_usa_new.iloc[i]['lat'], gdf_usa_new.iloc[i]['long']],
      popup=gdf_usa_new.iloc[i]['name'],
      icon=folium.DivIcon(html=f"""<div style="font-family: courier new; color: white">{gdf_usa_new.iloc[i]['name']}</div>""")
   ).add_to(usa_map)

usa_map
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况,我得到以下结果。可以看出,标记彼此距离太近,因此在美国东部重叠。

在此输入图像描述

当我放大时,标记看起来更清晰,因此不会重叠。

在此输入图像描述

因此,如何修改代码以便在放大地图时显示标记?因此,当缩小地图时,只会出现某些标记,而当我放大地图时,则会出现其余标记。

我尝试遵循下面的答案,但很难理解在上面的代码中包含建议的答案的位置:

https://gis.stackexchange.com/questions/216558/leaflet-resize-markers-in-layer-when-zoom-in

更新,我已经添加了上面链接中的代码(见下文),但地图的结果仍然保持不变。

usa_map.get_root().html.add_child(folium.Element("""
var ar_icon_1 = ...;
var ar_icon_2 = ...;
var ar_icon_1_double_size = ...;
var ar_icon_2_double_size = ...;


map.on('zoomend', function() {
    var currentZoom = map.getZoom();
    if (currentZoom > 5) {
        all_testptLayer.eachLayer(function(layer) {
            if (layer.feature.properties.num < 0.5)
                return layer.setIcon(ar_icon_1);
            else if (feature.properties.num < 1.0)
                return layer.setIcon(ar_icon_2);
        });
    } else {
        all_testptLayer.eachLayer(function(layer) {
            if (layer.feature.properties.num < 0.5)
                return layer.setIcon(ar_icon_1_double_size);
            else if (feature.properties.num < 1.0)
                return layer.setIcon(ar_icon_2_double_size);
        });
    }
});
""")).add_to(usa_map)
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑:我知道某些图块显示美国的州名。然而,就我的工作而言,我正在与安大略省选区合作。磁贴不显示它们。因此,我使用上面的 for 循环来显示安大略省每个选区的选区名称。

Isa*_*c A 0

好吧,既然你们都不知道,这就是你们要做的。

  1. 在 Notepad++ 中打开地图的 HTML 文件。
  2. 对于感兴趣的区域,查找 map_... 和 u003e...,其中 ... 是州名称或选区 ID。例如亚利桑那州。
  3. 记下marker_...和div_icon_...
  4. 在记事本底部的 之前,为每个感兴趣的区域插入以下内容:
        var myIcon = L.divIcon({className: 'my-div-icon'});

            map_....on('zoomend', function() {  
            var currZoom = map_....getZoom();
            prevZoom = currZoom;                     
                    if (map_....getZoom() <9){                      
            marker_....setIcon(myIcon);
                    }
                    else {                        
            marker_....setIcon(div_icon_...);

                    }
                }
            );
Run Code Online (Sandbox Code Playgroud)
  1. 节省
  2. 刷新打开的 HTML 文件或打开 HTML 文件。6.5 注意,如果您要运行 python 代码并每次创建一个新地图,则还需要在代码中更新上述值。
  3. 利润。