如何使用纬度和经度计算多边形的面积?

6
我有一个方法,用于检查points是否是多边形。
from shapely import wkt

def validate_polygon(points):
    try:
        wkt.loads("POLYGON((%s))" % points)
    except Exception as ex:
        raise WrongRequestDataError("Incorrect points format. " + str(ex))

如何计算多边形的面积,如果大于400平方英里,则抛出异常?

我已尝试检查以下内容:

polygon = wkt.loads("POLYGON((%s))" % "34.093523 -118.274893,34.091414 -118.275887,34.092082 -118.278062,34.093867 -118.276609,34.093523 -118.274893")
print(polygon.area)

4.406979500001112e-06

但似乎这是错误的答案,或者不知道它使用什么类型的单位来表示该值,以及如何将其转换为平方英里或平方千米?

2个回答

5

通常情况下,计算面积的方法如下:

from shapely.geometry import Polygon
points = [(34.093523, -118.274893), (34.091414, -118.275887), (34.092082, -118.278062), (34.093867, -118.276609), (34.093523, -118.274893)]
polygon = Polygon(points)
# the area in square degrees
area_sdeg = polygon.area

注意:如果要进行平方米的面积计算,您需要使用如https://gist.github.com/robinkraft/c6de2f988c9d3f01af3c中描述的投影。


你确定吗?这个值非常大 polygon.area*earth_radius_miles**2 - user8477807
我在计算面积方面错了。polygon.area返回的是平方度数...你必须使用投影来计算。 - udo

0

这是我完美运行的最佳解决方案

def compute_polygon_area(points):
    coordinates = (tuple(map(float, x.split())) for x in points.split(', '))
    xy_coordinates = switch_to_xy_coordinates(coordinates)
    return Polygon(xy_coordinates).area

def switch_to_xy_coordinates(coordinates):
    earth_radius = 6371  # in km
    lat_dist = pi * earth_radius / 180.0

    latitudes, longitudes = zip(*coordinates)
    y = (lat * lat_dist for lat in latitudes)
    x = (lon * lat_dist * cos(radians(lat))
     for lat, lon in zip(latitudes, longitudes))
    return list(zip(x, y))

2
OP可能是在寻找地球表面矩形的面积,而不是穿过地球表面的矩形的面积。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接