Отримання ділянок полігонів за допомогою геопанд?


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, одиниця = 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'}дають оцінку найближчих районів.
Полярне пиво

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.