Получение полигонов с использованием геопанд?


16

Учитывая наличие geopandas GeoDataFrameряда полигонов, я хотел бы получить площадь в км кв каждой функции в моем списке.

Это довольно распространенная проблема, и обычно предлагаемое решение в прошлом было использовать shapelyи pyprojнапрямую (например, здесь и здесь ).

Есть ли способ сделать это в чистом виде geopandas?

Ответы:


17

Если crs GeoDataFrame известны (EPSG: 4326 единица = градус, здесь), вам не нужны ни Shapely, ни pyproj в вашем скрипте, потому что GeoPandas их использует).

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

введите описание изображения здесь

Теперь скопируйте ваш GeoDataFrame и измените проекцию на декартову систему (EPSG: 3857, unit = m, как в ответе ResMar)

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

введите описание изображения здесь

Сейчас площадь в квадратных километрах

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

введите описание изображения здесь

Но поверхности в проекции Меркатора не правильные, поэтому с другой проекцией в метрах.

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

введите описание изображения здесь


Ваш текст есть epsg:3857, но ваш код epsg:3395, какой из этих двух является правильным?
Алексей Билогур

4
.to_crsФункция переходит в руки в pyprojлюбом случае. Хороший пример равной площади проекции: proj4.org/projections/cea.html , который может быть передан следующим образом :.to_crs({'proj':'cea'})
Swier

По крайней мере, для шейп-файлов переписей США, я могу подтвердить, что они {'proj':'cea'}дают оценки ближайших районов.
Polor Beer

4

Я верю да Следующее должно работать:

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

Это преобразует геометрию в проекцию равной площади, выбирает shapelyплощадь (возвращается в m ^ 2) и отображает ее в км ^ 2 (этот последний шаг не является обязательным).


Это верно?
Алексей Билогур

1
EPSG 3857 не является равной по площади. en.wikipedia.org/wiki/Map_projection#Equal-area
alphabetasoup

Я изменил этот ответ, чтобы соответствовать epsg:3395CRS гена . Благодарю.
Алексей Билогур
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.