再说不会用python计算地球表面多边形面积,可不能了!(记录五种可行方法)

由于地理投影导致导致每个像元实际地面面积不同,越靠近北极实际面积越小,越靠近赤道实际面积越大,如果不进行面积加权就简单平均,会导致温度较实际温度偏低。
直接使用卫星地图的计算面积功能就会遇到这样的问题,多数卫星地图的计算面积功能是将地图假设为平面来计算,经纬度变化1度时默认距离变化为10km。带来极大误差。使用谷歌卫星地图截取的(110,39),(115,40),(110,41)三个点之间的区域面积,后文中的坐标也是该坐标下进行的计算。
谷歌卫星地图截取的(110,39),(115,40),(110,41)三个点之间的区域面积

学习地球科学的小伙伴经常会因为无法计算网格的面积大小或者其他更加不规则的区域的面积而让头发惨死在手中,因此今天对计算地球表面多边形面积的方法进行了整理。

分类方法

目前经过测试可行的方法共有五种,五种方法均假设地球为球体。我给他们分了三个大类,包括:1.使用首尾闭环坐标(GeoJSON格式);2.使用非闭环坐标;3.使用最大最小经纬度(仅能计算经纬度与地球网格平行的情况)。

一、使用首尾闭环坐标(GeoJSON格式坐标)

使用GeoJSON格式坐标的方法有两种,一种使用basemap包进行计算,一种使用area包。适合使用卫星云图直接导出坐标。

方法一:

import numpy
from mpl_toolkits.basemap import Basemap

#############   数据
coordinates=numpy.array([[110, 39],
                         [115, 40],
                         [110, 41],
                         [110, 39]])######### 坐标需要为闭环

############   计算
lats=coordinates[:,1]
lons=coordinates[:,0]

lat1=numpy.min(lats)
lat2=numpy.max(lats)
lon1=numpy.min(lons)
lon2=numpy.max(lons)

bmap=Basemap(projection='cea',llcrnrlat=lat1,llcrnrlon=lon1,urcrnrlat=lat2,urcrnrlon=lon2)
xs,ys=bmap(lons,lats)

area=numpy.abs(0.5*numpy.sum(ys[:-1]*numpy.diff(xs)-xs[:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值