답변:
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)
.to_crs
함수는 pyproj
어쨌든 전달됩니다 . 등가 투영법의 좋은 예 : proj4.org/projections/cea.html 다음과 같이 전달 될 수 있습니다..to_crs({'proj':'cea'})
{'proj':'cea'}
구역 셰이프 파일의 경우 가장 가까운 면적 추정값 을 생성 함을 확인할 수 있습니다 .
나는 믿습니다. 다음이 작동해야합니다.
gdf['geometry'].to_crs({'init': 'epsg:3395'})\
.map(lambda p: p.area / 10**6)
형상을 등 면적 투영법으로 변환하고 면적을 가져오고 shapely
(m ^ 2로 반환) km ^ 2에 매핑합니다 (마지막 단계는 선택 사항 임).
epsg:3395
CRS 에 맞게이 답변을 수정했습니다 . 감사.
epsg:3857
이지만 코드는epsg:3395
입니다. 둘 중 어느 것이 맞습니까?