使用Folium与Geopandas加载Shapefile绘制圆形失败求助
问题诊断与解决方案
核心问题:坐标系不匹配
你的Shapefile几何坐标是平面投影坐标(数值范围为几百到几万),但Folium地图默认使用WGS84(EPSG:4326)经纬度坐标系(范围:经度-180180,纬度-9090)。坐标系统不匹配导致图形无法在地图可视范围内显示。
解决步骤
1. 检查当前Shapefile的坐标系
先确认数据的投影信息:
import geopandas as gpd shp_map1 = gpd.read_file("3_4793.shp") print(shp_map1.crs)
如果输出为None或不是EPSG:4326,则需要转换坐标系。
2. 转换坐标系到WGS84
将数据转换为Folium支持的经纬度坐标系:
# 转换到WGS84(EPSG:4326) shp_map1 = shp_map1.to_crs(epsg=4326)
注意:如果转换后坐标仍不符合经纬度范围,说明你需要先确认Shapefile的原始投影(查看
.prj文件内容),替换为对应的EPSG代码再转换。例如若原始投影是UTM 10N(EPSG:32610),需先指定原始CRS再转换:shp_map1 = shp_map1.set_crs(epsg=32610).to_crs(epsg=4326)
3. 完整可运行代码
import folium import geopandas as gpd # 加载Shapefile并处理坐标系 shp_map1 = gpd.read_file("3_4793.shp") if shp_map1.crs != "EPSG:4326": # 若原始CRS未知,需先查看.prj文件确定后替换下方epsg值 shp_map1 = shp_map1.set_crs(epsg=你的原始投影EPSG代码).to_crs(epsg=4326) # 创建地图并添加图层 m_ = folium.Map(location=[39.828259, -98.579528], tiles="OpenStreetMap", zoom_start=4) folium.GeoJson(data=shp_map1).add_to(m_) m_
额外排查点
- 转换后查看
shp_map1.geometry,确认坐标是否在合理的经纬度范围内(比如美国区域为北纬2050,西经60120) - 确保Shapefile的配套文件(
.shx、.dbf、.prj)都在同一目录下,否则geopandas可能无法正确读取投影信息
内容的提问来源于stack exchange,提问作者Tarak Pandya
相关产品推荐
相关产品推荐

