Ottenere aree poligonali usando geopandas?


16

Dato che geopandas GeoDataFramecontiene una serie di poligoni, vorrei ottenere l'area in kmq di ciascuna funzione nell'elenco.

Questo è un problema piuttosto comune e la solita soluzione suggerita in passato è stata quella di utilizzare shapelye pyprojdirettamente (ad esempio qui e qui ).

C'è un modo per farlo in puro geopandas?

Risposte:


17

Se il crs di GeoDataFrame è noto (EPSG: 4326 unità = grado, qui), non è necessario Shapely, né pyproj nello script perché GeoPandas li usa).

import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")
print test.crs
test.head(2)

inserisci qui la descrizione dell'immagine

Ora copia GeoDataFrame e modifica la proiezione in un sistema cartesiano (EPSG: 3857, unità = m come nella risposta di ResMar)

tost = test.copy()
tost= tost.to_crs({'init': 'epsg:3857'})
print tost.crs
tost.head(2)

inserisci qui la descrizione dell'immagine

Ora l'area in chilometri quadrati

tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)

inserisci qui la descrizione dell'immagine

Ma le superfici nella proiezione Mercator non sono corrette, quindi con altre proiezioni in metri.

tost= tost.to_crs({'init': 'epsg:32633'})
tost["area"] = tost['geometry'].area/ 10**6
tost.head(2)

inserisci qui la descrizione dell'immagine


Il tuo testo è epsg:3857, ma il tuo codice è epsg:3395: quale dei due è corretto?
Aleksey Bilogur,

4
La .to_crsfunzione viene passata pyprojcomunque. Un buon esempio di una proiezione della stessa area: proj4.org/projections/cea.html che può essere passato come segue:.to_crs({'proj':'cea'})
Swier

Almeno per gli shapefile degli US Census Tracts, posso confermare che {'proj':'cea'}producono le stime di area più vicine.
Polor Beer

4

Io credo di si. Il seguente dovrebbe funzionare:

gdf['geometry'].to_crs({'init': 'epsg:3395'})\
               .map(lambda p: p.area / 10**6)

Ciò converte la geometria in una proiezione di uguale area, recupera l' shapelyarea (restituita in m ^ 2) e la associa a un km ^ 2 (quest'ultimo passaggio è facoltativo).


È corretto?
Aleksey Bilogur,


Ho modificato questa risposta per adattarla al epsg:3395CRS del gene . Grazie.
Aleksey Bilogur,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.