【问题标题】:Area of country in kilometers squared from Polygons国家面积(以平方公里为单位)从多边形
【发布时间】:2022-08-14 21:50:59
【问题描述】:

我正在为这个问题使用 geopandas 样本数据。

import geopandas as gpd

df = gpd.read_file(gpd.datasets.get_path(\"naturalearth_lowres\"))

我的真实数据集有些不同,仅包含“多边形”类型的几何点(在 EPSG::4326 中),但我想做的是计算每个国家的每个多边形的面积,以平方公里为单位。

我是 geopandas 的新手,所以我不确定我是否做对了。我的流程如下;

ndf=df
ndf.to_crs(\"epsg:32633\")
ndf[\"area\"] = ndf[\'geometry\'].area/ 10**6
ndf.head(2)

但由此产生的区域没有意义。

所以我尝试了

df_2= df.to_crs({\'proj\':\'cea\'})
df_2[\"area\"] = df_2[\'geometry\'].area/ 10**6
df_2.head(2)

哪个更好,但在运行谷歌搜索区域时仍然不准确。

所以我想知道1)这是正确的方法吗? 2) 我怎么知道最好的投影类型?

  • 您使用 \'cea\' 的方法对我来说似乎是合理的。您确实需要注意您使用的投影,并且所有投影都相对于地球上实际正确的区域(不是大地水准面,当然不是球体,也不是远离圆柱体或平面)有很大的误差。据我所知,您使用等面积投影的方法是您可以使用带有 shapely/geopandas 的平面几何操作做出的最准确的近似。

标签: geopandas


【解决方案1】:

equal-area 类型的地图投影上计算多边形区域并不总是产生良好的结果,因为需要沿所涉及的多边形边界的密集顶点。

在未投影的地球表面上进行计算并不困难。使用适当的 Python 库,在计算中形成表面区域的连续顶点之间采用更大的圆弧,结果更准确。

使用 Python 计算地球表面积的最准确(恕我直言)方法可以用这个简单的代码来演示。

import geopandas as gpd
from pyproj import Geod, Proj

# Use the included dataset of Geopandas
df = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres"))

# Prep an ellipsoidal earth (WGS84's parameters) 
geod = Geod('+a=6378137 +f=0.0033528106647475126')

# List of countries
some_countries = ["Thailand", "Nepal"]

def area_perim (country_name):
    pgon = df[df["name"]==country_name].geometry.iloc[0]
    # Extract list of longitude/latitude of country's boundary
    lons, lats = pgon.exterior.xy[:][0], pgon.exterior.xy[:][1]
    # Compute surface area and perimeter
    poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
    # Print the results
    print("\nCountry:", country_name)
    print("Area, (sq.Km): {:.1f}".format(abs(poly_area)/10**6))
    print("Perimeter, (Km): {:.2f}".format(poly_perimeter/10**3))

for each in some_countries:
    area_perim(each)

输出:

国家:泰国
面积,(平方公里):510125.6
周长,(公里):5555.56

国家:尼泊尔
面积,(平方公里):150706.9
周长,(公里):1983.42

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 2017-11-02
    • 2023-03-26
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多