寻求支持地图区域高亮并返回区域内县的Python工具/库方案
地图区域圈选并提取县域的工具与Python库方案
Python库实现方案
1. GeoPandas + Folium
- 核心逻辑:通过GeoPandas加载县域边界地理数据(Shapefile或GeoJSON格式),用Folium生成支持圈选的交互式地图,再借助空间查询筛选出圈选范围内的县域。
- 操作步骤示例:
- 加载县域地理数据:
import geopandas as gpd # 替换为你的县域数据文件路径 counties = gpd.read_file("counties.shp") - 创建带圈选功能的交互式地图:
import folium from folium.plugins import Draw m = folium.Map(location=[35, 105], zoom_start=5) # 添加可绘制多边形的控件,支持导出圈选的GeoJSON Draw(export=True).add_to(m) m.save("interactive_map.html") - 导入圈选结果并筛选县域:
# 导入导出的圈选多边形GeoJSON drawn_polygon = gpd.read_file("drawn_polygon.geojson") # 空间交集查询,获取圈选范围内的县域 selected_counties = counties[counties.intersects(drawn_polygon.geometry.iloc[0])] # 输出县域名称列表 print(selected_counties["name"].tolist())
- 加载县域地理数据:
2. Plotly Express + Shapely
- 特点:Plotly的交互式地图支持框选、圈选操作,结合Shapely处理空间几何判断,无需额外导出文件即可完成筛选。
- 关键代码示例:
- 生成带圈选功能的地图:
import plotly.express as px fig = px.choropleth(counties, geojson=counties.geometry, locations=counties.index, color="name") # 设置地图样式并开启闭合路径绘制模式(圈选) fig.update_layout(mapbox={"style": "carto-positron", "zoom": 3}, dragmode="drawclosedpath") fig.show() - 基于圈选坐标筛选县域:
from shapely.geometry import Polygon # 替换为实际圈选得到的坐标列表 drawn_coords = [[100, 30], [110, 30], [110, 40], [100, 40], [100, 30]] polygon = Polygon(drawn_coords) # 筛选与圈选多边形相交的县域 selected_counties = counties[counties.geometry.intersects(polygon)] print(selected_counties["name"].values)
- 生成带圈选功能的地图:
现成工具方案
- QGIS:开源GIS桌面软件,加载县域边界图层后,用“绘制多边形”工具圈选目标区域,通过「选择要素」→「按位置选择」功能筛选区域内的县域要素,最后将选中要素的属性表导出为CSV或TXT文本。
- ArcGIS Online:在线GIS平台,上传县域数据图层后,在地图编辑器中绘制圈选多边形,使用空间分析工具提取范围内的要素,直接导出结果为文本格式。
内容的提问来源于stack exchange,提问作者Chandler O'Neal
相关产品推荐
相关产品推荐

