ジオパンダを使用してポリゴンエリアを取得しますか?


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をコピーし、投影をデカルトシステムに変更します(EPSG:3857、ResMarの答えのようにunit = m)。

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で返される)が取得され、km ^ 2にマッピングされます(この最後の手順はオプションです)。


これは正しいです?
アレクセイビログル

1
EPSG 3857は平面積ではありません。en.wikipedia.org/wiki/Map_projection#Equal-area
alphabetasoup

私は遺伝子のepsg:3395CRS に合うようにこの答えを修正しました。ありがとう。
アレクセイビログル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.