How to calculate the area of a polygon on the earth's surface using python?

前端 未结 9 505
生来不讨喜
生来不讨喜 2020-11-29 19:09

The title basically says it all. I need to calculate the area inside a polygon on the Earth\'s surface using Python. Calculating area enclosed by arbitrary polygon on Earth&

9条回答
  •  独厮守ぢ
    2020-11-29 19:52

    Here is a Python 3 implementation where the function would take a list of tuple-pairs of lats and longs and would return the area enclosed in the projected polygon.It uses pyproj to project the coordinates and then Shapely to find the area of any projected polygon

    def calc_area(lis_lats_lons):
    
    import numpy as np
    from pyproj import Proj
    from shapely.geometry import shape
    
    
    lons, lats = zip(*lis_lats_lons)
    ll = list(set(lats))[::-1]
    var = []
    for i in range(len(ll)):
        var.append('lat_' + str(i+1))
    st = ""
    for v, l in zip(var,ll):
        st = st + str(v) + "=" + str(l) +" "+ "+"
    st = st +"lat_0="+ str(np.mean(ll)) + " "+ "+" + "lon_0" +"=" + str(np.mean(lons))
    tx = "+proj=aea +" + st
    pa = Proj(tx)
    
    x, y = pa(lons, lats)
    cop = {"type": "Polygon", "coordinates": [zip(x, y)]}
    
    return shape(cop).area 
    

    For a sample set of lats/longs, it gives an area value close to the surveyed approximation value

    calc_area(lis_lats_lons = [(-102.05, 41.0),
     (-102.05, 37.0),
     (-109.05, 37.0),
     (-109.05, 41.0)])
    

    Which outputs an area of 268952044107.4342 Sq. Mts.

提交回复
热议问题