Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating correct area for polygons with geopandas

I recently tried to calculate country sizes with geopandas and the included world file; and I am not capable to calculate the correct size for the chosen countries. Maybe someone can give me a hint where I made a mistake?

Tried various shapefiles (and the included world file shipped with geopandas); all of the afaik in epsg:4326

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cnames = ['Austria','Sweden','Kenya']
epsgs = ['3857','3395']

for c in cnames:
    carea = world[world['name'] == c]
    for e in epsgs:
        carea = carea.to_crs(epsg=e)
        area = int(pd.to_numeric(carea['geometry'].area)/10**6)
        print(area)

Expected results are:

  • Austria: 83,879 km²
  • Sweden: 450,295 km²
  • Kenya: 580,367 km²

Actual results I get:

  • Austria: 187163
  • Austria: 186592
  • Sweden: 2190160
  • Sweden: 2187138
  • Kenya: 595731
  • Kenya: 591749

So Kenya is quite close (also to the equator)? Is the reprojection not right?

like image 280
Gaelic Miko Avatar asked Aug 10 '19 11:08

Gaelic Miko


People also ask

How do I calculate area using latitude and longitude in Python?

Basically, you just multiply the latitude by the length of one degree of latitude, and the longitude by the length of a degree of latitude and the cosine of the latitude.

What does GeoPandas do?

GeoPandas is an open source project to make working with geospatial data in python easier. GeoPandas extends the datatypes used by pandas to allow spatial operations on geometric types. Geometric operations are performed by shapely. Geopandas further depends on fiona for file access and matplotlib for plotting.


1 Answers

To get correct area, you must use 'equal-area' projection. The one that works well with your code is epsg 6933. It is cylindrical equal-area projection.

like image 105
swatchai Avatar answered Sep 22 '22 17:09

swatchai