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

如何用Python(优先Cartopy)计算椭球体经纬度网格单元面积?

计算椭球体规则经纬度网格单元面积的Python实现(优先Cartopy)

优先方案:使用Cartopy的Geodesic类

Cartopy自带的cartopy.geodesic.Geodesic可直接基于自定义椭球体计算地理多边形面积,完美适配规则经纬度网格场景,精度高且实现简洁。

代码示例

import numpy as np
import cartopy.crs as ccrs
from cartopy.geodesic import Geodesic

# 自定义椭球体参数(替换为你的a、b值,单位:米)
a = 6378137.0
b = 6356752.314245

# 定义经纬度网格参数
lon_min, lon_max, d_lon = -180, 180, 1.0  # 经度范围、步长
lat_min, lat_max, d_lat = -90, 90, 1.0    # 纬度范围、步长

# 生成网格点数组
lons = np.arange(lon_min, lon_max + d_lon, d_lon)
lats = np.arange(lat_min, lat_max + d_lat, d_lat)

# 初始化自定义椭球体的Geodesic对象
geod = Geodesic(semi_major_axis=a, semi_minor_axis=b)

# 创建存储网格面积的数组(维度为网格行数×列数)
grid_areas = np.zeros((len(lats)-1, len(lons)-1))

# 遍历每个网格单元计算面积
for i in range(len(lats)-1):
    for j in range(len(lons)-1):
        # 获取当前网格的四个顶点经纬度(按顺时针顺序排列)
        vertices = [
            (lons[j], lats[i]),
            (lons[j+1], lats[i]),
            (lons[j+1], lats[i+1]),
            (lons[j], lats[i+1])
        ]
        # 计算面积(返回值单位:平方米),取绝对值确保为正
        area_sqm = abs(geod.geometry_area_perimeter(vertices)[0])
        # 转换为平方公里并存储
        grid_areas[i, j] = area_sqm / 1e6

关键注意事项

  • 多边形顶点必须按连续的顺时针或逆时针顺序传入,否则面积计算会出错
  • geometry_area_perimeter方法返回的第一个值是面积,第二个是周长,仅需提取面积部分
  • 面积默认单位为平方米,可根据需求转换为平方公里(除以1e6)或其他单位

替代方案:使用pyproj的Geod类

若不想依赖Cartopy,可直接用pyproj计算(Cartopy底层也依赖pyproj),原理一致:

import numpy as np
from pyproj import Geod

# 初始化自定义椭球体的Geod对象
geod = Geod(a=a, b=b)

grid_areas = np.zeros((len(lats)-1, len(lons)-1))

for i in range(len(lats)-1):
    for j in range(len(lons)-1):
        # 提取网格顶点的经纬度数组
        poly_lons = [lons[j], lons[j+1], lons[j+1], lons[j]]
        poly_lats = [lats[i], lats[i], lats[i+1], lats[i+1]]
        # 计算面积
        area_sqm, _ = geod.polygon_area_perimeter(poly_lons, poly_lats)
        grid_areas[i, j] = abs(area_sqm) / 1e6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:05:45