如何在Folium热力图上叠加北卡罗来纳州城市或县边界?
在Folium热力图上叠加北卡罗来纳州区域边界的实现方法
核心思路
要叠加特定城市/县的边界,需要先获取对应区域的地理边界数据(GeoJSON或Shapefile格式),再通过Folium的GeoJson组件将边界图层添加到已有的热力图上。
具体步骤及代码示例
1. 安装依赖(若未安装)
如果需要处理地理数据,先安装geopandas用于读取和筛选边界文件:
pip install geopandas
2. 修改原有代码,添加边界图层
结合你提供的热力图代码,完整实现如下:
import folium from folium.plugins import HeatMap import geopandas as gpd # --- 原有热力图代码保持不变 --- max_amount = float(df_top20['Total_Minutes'].max()) hmap = folium.Map(location=[35.5, -82.5], zoom_start=7) hm_wide = HeatMap( list(zip(df_top20.Latitude.values, df_top20.Longitude.values, df_top20.Total_Minutes.values)), min_opacity=0.2, max_val=max_amount, radius=25, blur=20, max_zoom=1, ) hmap.add_child(hm_wide) # --- 新增:添加区域边界逻辑 --- # 1. 读取北卡罗来纳州的县/城市边界文件(替换为你的本地文件路径) # 可从美国人口普查局TIGER数据集或开源地理平台获取对应边界文件 nc_boundaries = gpd.read_file("path/to/north_carolina_counties.geojson") # 2. 筛选出你数据框中包含的目标区域(假设df_top20有存储区域名称的列,比如'County') target_regions = df_top20['County'].unique() filtered_boundaries = nc_boundaries[nc_boundaries['NAME'].isin(target_regions)] # 3. 将筛选后的边界添加到地图,自定义样式避免遮挡热力图 folium.GeoJson( filtered_boundaries, style_function=lambda x: { 'color': '#ff0000', # 边界线颜色 'weight': 2, # 边界线宽度 'fillColor': '#ffa500', # 区域填充色 'fillOpacity': 0.1 # 填充透明度(低透明度保证热力图可见) }, # 鼠标悬停时显示区域名称 tooltip=folium.GeoJsonTooltip(fields=['NAME'], labels=True) ).add_to(hmap) # 保存或展示地图 hmap.save("heatmap_with_borders.html")
关键细节说明
- 边界数据获取:确保你的边界文件包含与数据框匹配的名称字段(比如县名字段
NAME),才能准确筛选出目标区域。 - 样式调整:通过
fillOpacity控制填充透明度,避免边界图层遮挡下方的热力图;可根据需求修改颜色、线宽等参数。 - 城市边界适配:如果需要叠加城市边界,只需替换为北卡罗来纳州的城市边界文件,并调整筛选时匹配的字段(比如城市名字段)即可。
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

