GeoPandas GeoDataFrame多边形面积计算及投影问题求助
解决GeoPandas多边形面积(平方米)计算问题
问题根源
- 用EPSG:4326(WGS84经纬度坐标系)直接计算的
area是平方度,属于地理坐标系的虚拟单位,没有实际空间面积意义。 - 重投影到EPSG:32610出错是因为这个UTM投影针对的是北纬10°-16°的区域,你的多边形在赤道附近(0°-2°纬度),不在该投影的有效范围内,导致坐标转换异常出现
Inf值。
正确实现步骤
匹配对应投影坐标系
赤道附近(0°纬度)的区域要选UTM第1带的投影:EPSG:32601(WGS 84 / UTM zone 1N),这个投影的单位是米,能直接计算平方米面积。批量重投影GeoDataFrame
别单独转换单个几何对象,对整个GeoDataFrame执行重投影,保证CRS元数据和所有几何同步更新。计算平方米面积
重投影完成后,直接调用geometry.area就能得到以平方米为单位的面积值。
完整可运行代码
import geopandas as gpd from shapely.geometry import Polygon # 创建示例多边形 poly1 = Polygon([(0,0), (1,0), (1,1), (0,1)]) poly2 = Polygon([(1,1), (2,1), (2,2), (1,2)]) # 构建GeoDataFrame,初始CRS设为EPSG:4326 data = {'name': ['Polygon 1', 'Polygon 2'], 'geometry': [poly1, poly2]} df = gpd.GeoDataFrame(data, crs='EPSG:4326') # 重投影到适配的UTM投影(EPSG:32601) df_proj = df.to_crs('EPSG:32601') # 计算平方米面积并新增列存储 df_proj['area_sqm'] = df_proj.geometry.area # 输出结果 print(df_proj[['name', 'area_sqm']])
额外提示
- UTM投影按经度每6°分一个带,还要区分南北半球,得根据数据实际地理位置选对应带;嫌手动查麻烦的话,可以用
utm库自动匹配合适的投影。 - 如果数据覆盖全球或跨多个UTM带,推荐用等面积投影(比如EPSG:6933),避免UTM带的区域限制。
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

