지오 팬더를 사용하여 다각형 영역을 가져 오시겠습니까?


16

geopandas GeoDataFrame일련의 다각형 이 포함되어 있으므로 목록의 각 지형지 물을 평방 피트 단위로 구하고 싶습니다.

이것은 매우 일반적인 문제이며, 과거에 보통 제안 된 솔루션을 사용하고있다 shapelypyproj(예를 들어, 직접 여기여기 ).

순수하게 이것을 할 수있는 방법이 geopandas있습니까?

답변:


17

GeoDataFrame의 crs가 알려진 경우 (EPSG : 4326 unit = degree, 여기) GeoPandas에서 사용하기 때문에 Shapely 또는 pyproj가 필요하지 않습니다.

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

여기에 이미지 설명을 입력하십시오

이제 GeoDataFrame을 복사하고 투영을 직교 시스템으로 변경하십시오 (EPS : 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입니다. 둘 중 어느 것이 맞습니까?
Aleksey Bilogur

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로 반환) km ^ 2에 매핑합니다 (마지막 단계는 선택 사항 임).


이 올바른지?
Aleksey Bilogur

1
EPSG 3857은 같은 면적이 아닙니다. en.wikipedia.org/wiki/Map_projection#Equal-area
alphabetasoup

유전자의 epsg:3395CRS 에 맞게이 답변을 수정했습니다 . 감사.
Aleksey Bilogur 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.