Answers:
如果已知GeoDataFrame的crs(此处为EPSG:4326 unit = degree),则您的脚本中不需要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)
.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
,两者中的哪一个是正确的?