You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Folium地图中Geopandas地理CRS求质心的警告问题

解决Geopandas计算Centroid时的地理CRS警告问题

你在使用Pandas、Folium、Geopandas分析格鲁吉亚区域收入并绘制Choropleth地图时,遇到了以下警告:

UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.

问题原因

地理CRS(比如常用的WGS84,EPSG:4326)以经纬度为单位,属于球面坐标系,直接计算质心会因球面曲率导致结果偏差。必须先将几何数据转换为投影CRS(平面坐标系,单位为米/千米),再计算质心才能得到准确结果。

解决方案步骤

  • 查看当前GeoDataFrame的CRS
  • 选择适配格鲁吉亚区域的投影CRS
  • 转换CRS并计算质心,若需在Folium地图显示,再将质心转回地理CRS

代码示例

import geopandas as gpd
import folium

# 加载你的格鲁吉亚区域地理数据(替换为实际路径)
gdf = gpd.read_file("georgia_regions.shp")

# 1. 查看当前数据的CRS
print("当前CRS:", gdf.crs)

# 2. 转换为适合格鲁吉亚的投影CRS(推荐EPSG:32638,UTM 38N,覆盖格鲁吉亚大部分区域)
gdf_projected = gdf.to_crs(epsg=32638)

# 3. 在投影CRS下计算质心
gdf_projected["centroid"] = gdf_projected.geometry.centroid

# 4. 将质心转回地理CRS(Folium默认使用WGS84,即EPSG:4326)
gdf_projected["centroid_wgs84"] = gdf_projected["centroid"].to_crs(epsg=4326)

# 绘制Choropleth地图(使用原地理CRS的GeoDataFrame即可)
map_georgia = folium.Map(location=[42.23, 43.36], zoom_start=7)  # 格鲁吉亚中心经纬度

folium.Choropleth(
    geo_data=gdf,
    data=gdf,
    columns=["region_name", "average_income"],  # 替换为你的字段名
    key_on="feature.properties.region_name",
    fill_color="YlOrRd",
    legend_name="区域平均收入"
).add_to(map_georgia)

# 添加质心标记到地图
for _, row in gdf_projected.iterrows():
    folium.Marker(
        location=[row["centroid_wgs84"].y, row["centroid_wgs84"].x],
        popup=f"{row['region_name']}<br>收入: {row['average_income']}"
    ).add_to(map_georgia)

# 保存地图
map_georgia.save("georgia_income_choropleth.html")

关键说明

  • 投影CRS的选择:EPSG:32638是UTM分区投影,适配格鲁吉亚的纬度范围;若有更贴合的本地CRS也可使用
  • 绘制Choropleth无需转换原数据CRS,因为Folium仅支持地理CRS的几何数据
  • 质心必须转回地理CRS才能在Folium地图上正确定位

内容的提问来源于stack exchange,提问作者data science

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:37:54