Diberikan geopandasGeoDataFrameserangkaian poligon, saya ingin mendapatkan luas dalam km persegi dari setiap fitur dalam daftar saya.
Ini adalah masalah yang cukup umum, dan solusi yang disarankan di masa lalu adalah menggunakan shapelydan pyprojsecara langsung (misalnya di sini dan di sini ).
Apakah ada cara untuk melakukan ini dengan murni geopandas?
Jika crs GeoDataFrame diketahui (EPSG: 4326 unit = degree, di sini), Anda tidak perlu Shapely, atau pyproj dalam skrip Anda karena GeoPandas menggunakannya).
import geopandas as gpd
test = gpd.read_file("test_wgs84.shp")print test.crs
test.head(2)
Sekarang salin GeoDataFrame Anda dan ubah proyeksi ke sistem Cartesian (EPSG: 3857, unit = m seperti pada jawaban ResMar)
Teks Anda benar epsg:3857, tetapi kode Anda benar epsg:3395, mana di antara keduanya yang benar?
Aleksey Bilogur
4
The .to_crsFungsi akan dilewatkan ke pyprojlagian. Contoh yang baik dari proyeksi area yang sama: proj4.org/projections/cea.html yang dapat diteruskan sebagai berikut:.to_crs({'proj':'cea'})
Swier
Untuk shapefile US Census Tracts setidaknya, saya dapat mengonfirmasi bahwa {'proj':'cea'}menghasilkan estimasi area terdekat.
Ini mengubah geometri menjadi proyeksi dengan luas yang sama, mengambil shapelyarea tersebut (dikembalikan dalam m ^ 2), dan memetakannya menjadi km ^ 2 (langkah terakhir ini opsional).
epsg:3857
, tetapi kode Anda benarepsg:3395
, mana di antara keduanya yang benar?.to_crs
Fungsi akan dilewatkan kepyproj
lagian. Contoh yang baik dari proyeksi area yang sama: proj4.org/projections/cea.html yang dapat diteruskan sebagai berikut:.to_crs({'proj':'cea'})
{'proj':'cea'}
menghasilkan estimasi area terdekat.Saya percaya ya. Berikut ini harus bekerja:
Ini mengubah geometri menjadi proyeksi dengan luas yang sama, mengambil
shapely
area tersebut (dikembalikan dalam m ^ 2), dan memetakannya menjadi km ^ 2 (langkah terakhir ini opsional).sumber
epsg:3395
CRS gen . Terima kasih.