Geographic Information Systems Asked on March 25, 2021
Given a GeoPandas’s GeoDataFrame
containing a series of polygons, I would like to get the area in km sq of each feature in my list.
This is a pretty common problem, and the usual suggested solution in the past has been to use shapely
and pyproj
directly (e.g. here and here).
Is there a way to do this in pure GeoPandas?
If the crs of the GeoDataFrame is known (EPSG:4326 unit=degree, here), you don't need Shapely, nor pyproj in your script because GeoPandas uses them).
import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")
print test.crs
test.head(2)
Now copy your GeoDataFrame and change the projection to a Cartesian system (EPSG:3857, unit= m as in the answer of ResMar)
tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
tost.head(2)
Now the area in square kilometers
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
But the surfaces in the Mercator projection are not correct, so with other projection in meters.
tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)
Correct answer by gene on March 25, 2021
I believe yes. The following ought to work:
gdf['geometry'].to_crs({'init': 'epsg:3395'})
.map(lambda p: p.area / 10**6)
This converts the geometry to an equal-area projection, fetches the shapely
area (returned in m^2), and maps that to a km^2 (this last step is optional).
Answered by Aleksey Bilogur on March 25, 2021
Yes, simply be sure to reproject your shape in Cylindrical equal-area format with {'proj':'cea'}
that preserve area measure.
Then you can use .area
method of your GeoDataFrame.
Your also need to divide by 1000000 because .area
method give area in square meters.
import geopandas as gpd
gdf = gpd.read_file("YOUR_SHAPE_FILE.shp")
gdf = gdf['geometry'].to_crs({'proj':'cea'})
gdf.area / 10**6
Answered by Fabio G. on March 25, 2021
Just a quick thought on the appropriate EPSG code for an equal-area estimation - 6933 may be a better "generic" solution (see https://epsg.io/6933 / https://www.mdpi.com/2220-9964/1/1/32)
No perfect solution for obvious reasons, but 6933 does seem to nicely merge the benefits of a cea and Lambert equal area.
Answered by Dan Runfola on March 25, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP