Python 计算以纬线 lat1 和 lat2 以及子午线 lon1 和 lon2 为界的表面积

Python calculate surface area bounded by the parallels lat1 and lat2 and the meridians lon1 and lon2

我正在 Python 中寻找与此 Matlab 函数 areaquad 等效的函数。

area = areaquad(lat1,lon1,lat2,lon2) returns the surface area bounded by the parallels lat1 and lat2 and the meridians lon1 and lon2. The output area is a fraction of the unit sphere's area of 4π, so the result ranges from 0 to 1.

你知道我如何使用 Python 计算这个吗? 非常感谢任何提示!

计算起来并不难,如果你只需要计算球体的话。 Here是计算两个纬度之间球面总面积的公式。所以:

h = sin(lat2)-sin(lat1)
Az = 2 * pi * h

现在,我们可以简单地求出两个经度之间的区域所占的比例:

Aq = Az * (lon2-lon1)/(2*pi)

最后,要使结果成为单位球面的一部分,请将其除以 4*pi。 将所有内容放在一起,进行简化并考虑角度单位:

 A = (sind(lat2)-sind(lat1)) * deg2rad(lon2-lon1) / (4*pi);

希望你能翻译成python。

编辑: 这是我在 R2020b 中为您的测试用例获得的结果:

lat1 = -90; lat2 = -89; lon1 = -180; lon2 = 180;
A = (sind(lat2)-sind(lat1)) * deg2rad(lon2-lon1) / (4*pi)

A =
7.6152e-05

此外,关于 Aq 不存在于最终公式中:

h = sin(lat2)-sin(lat1)
Az = 2 * pi * h
Aq = Az * (lon2-lon1)/(2*pi)
   = 2*pi*h*(lon2-lon1)/(2*pi) // reducing 2*pi
   = h * (lon2-lon1)
   = (sin(lat2)-sin(lat1))*(lon2-lon1)
A  = Aq/(4*pi)
   = (sin(lat2)-sin(lat1))*(lon2-lon1)/(4*pi)