使用 geopandas 计算多边形的正确面积
Calculating correct area for polygons with geopandas
我最近尝试使用 geopandas 和包含的世界文件计算国家大小;而且我无法计算出所选国家/地区的正确尺寸。也许有人可以给我提示我在哪里犯了错误?
尝试了各种形状文件(以及 geopandas 附带的世界文件); epsg:4326
中的所有 afaik
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cnames = ['Austria','Sweden','Kenya']
epsgs = ['3857','3395']
for c in cnames:
carea = world[world['name'] == c]
for e in epsgs:
carea = carea.to_crs(epsg=e)
area = int(pd.to_numeric(carea['geometry'].area)/10**6)
print(area)
预期结果是:
- 奥地利:83,879 平方公里
- 瑞典:450,295 平方公里
- 肯尼亚:580,367 平方公里
我得到的实际结果:
- 奥地利:187163
- 奥地利:186592
- 瑞典:2190160
- 瑞典:2187138
- 肯尼亚:595731
- 肯尼亚:591749
那么肯尼亚很近(也离赤道)?重投影不对吗?
要获得正确的面积,您必须使用 'equal-area' 投影。最适合您的代码的是 epsg 6933
。是圆柱等积投影。
我最近尝试使用 geopandas 和包含的世界文件计算国家大小;而且我无法计算出所选国家/地区的正确尺寸。也许有人可以给我提示我在哪里犯了错误?
尝试了各种形状文件(以及 geopandas 附带的世界文件); epsg:4326
中的所有 afaikworld = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cnames = ['Austria','Sweden','Kenya']
epsgs = ['3857','3395']
for c in cnames:
carea = world[world['name'] == c]
for e in epsgs:
carea = carea.to_crs(epsg=e)
area = int(pd.to_numeric(carea['geometry'].area)/10**6)
print(area)
预期结果是:
- 奥地利:83,879 平方公里
- 瑞典:450,295 平方公里
- 肯尼亚:580,367 平方公里
我得到的实际结果:
- 奥地利:187163
- 奥地利:186592
- 瑞典:2190160
- 瑞典:2187138
- 肯尼亚:595731
- 肯尼亚:591749
那么肯尼亚很近(也离赤道)?重投影不对吗?
要获得正确的面积,您必须使用 'equal-area' 投影。最适合您的代码的是 epsg 6933
。是圆柱等积投影。