回答:
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)
.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
、どちらが正しいのですか?