在Python中计算lat / lon多边形的面积

时间:2012-10-30 21:45:42

标签: python numpy scipy gis geospatial

基本上,我想知道0.25°纬度x 0.25°lon贴片在世界各地的各种多边形中适合多少次。后者的尺寸大约为3°lat x 10°lon或2°lat x 4°lon。

我有多边形角的纬度/经度值,我正在计算它们的面积:

from pyproj import Proj
from shapely.geometry import shape

def getArea(coords):
    c = {"type": "Polygon",
    "coordinates": [[ (coords[0], coords[2]), (coords[1], coords[2]),
                      (coords[0], coords[3]), (coords[1], coords[3]) ]]}
    lon, lat = zip(*c['coordinates'][0])
    pro = Proj("+proj=aea")
    x, y = pro(lon, lat)
    poly = {"type": "Polygon", "coordinates": [zip(x, y)]}
    return shape(cop).area

我从这里开始采用这种方法:How to calculate the area of a polygon on the earth's surface using python?

现在的问题是,为了使多边形具有可比较的面积大小,我应选择哪个相等的面积投影。小补丁的区域总是相同的,无论它在这样的投影中位于地球上的哪个位置。

采用Albers等面积投影(aea)导致这些区域包含三个多边形:

  1. 240993868.90978813
  2. 699931593.1047173
  3. 212092562.5238676
  4. 采用Lambert Azimuthal等面积投影(laea)导致这些区域具有相同的多边形:

    1. 148709452.69292444
    2. 409253749.5468254
    3. 106218747.36092758
    4. 为什么两个投影中的区域之间的关系不同?首先1:3 = 0.344;第二个1:3 = 0.363;它们应该是相同的,因为两者都是相等的区域投影?!

      这让我想知道在任一投影中将小补丁与多边形区域进行比较是否合法。你有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果你关心实际的相对面积,计算瓷砖将无法给你正确的答案。 如果您需要实际表面积,请使用椭圆体或球形几何体,或下面的想法。

强力矢量方法:生成世界范围的.25度网格作为多边形,与多边形相交,计算结果。每个多边形可以是笛卡尔方形或实际的椭圆形方形。为每个图块创建自定义理想投影,然后计算并存储该区域作为每个图块的属性。你只需要做一次:)