Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用经纬度计算多边形的面积?_Python_Algorithm - Fatal编程技术网

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

Python 如何用经纬度计算多边形的面积?,python,algorithm,Python,Algorithm,我有以下方法来检查is点是否为多边形 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平

我有以下方法来检查is
是否为多边形

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

但答案似乎不正确,或者该值使用什么类型的单位,以及如何将其转换为平方英里或平方公里?

通常您会这样计算面积:

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

注意:对于以平方米为单位的面积计算,必须使用中所述的投影。这是最适合我的解决方案

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))

你确定吗?此值是超大的
多边形。面积*地球半径\u英里**2
!关于面积的计算,我错了。polygon.area返回平方度。。。你必须使用投影。OP可能是在寻找地球表面矩形的面积。不是穿过曲面的矩形区域。