如何从GHSL人口数据提取两万全球经纬度点的人口密度?
用GHSL数据为经纬度点匹配人口密度的可行方案
GHSL(全球人类住区层)的人口栅格数据完全能满足你的需求——它覆盖全球范围,提供不同精度(30米到1公里)的人口数量栅格,通过简单计算就能得到人口密度,适配你的20000条经纬度记录。
具体实现步骤:
获取GHSL人口数据
- 下载对应年份、分辨率的GHS-POP数据集,数据为GeoTIFF格式,每个栅格单元存储对应区域的人口总数。
- 人口密度可通过栅格面积计算:比如1公里分辨率的栅格对应1平方公里,直接用人口数除以1即可得到人/平方公里的密度;30米分辨率栅格面积为0.0009平方公里,需对应调整除数。
预处理你的DataFrame
把普通DataFrame转为GeoDataFrame,确保坐标系为WGS84(EPSG:4326),和GHSL数据一致:import geopandas as gpd from shapely.geometry import Point # 假设你的经纬度列名为'lat'和'lon' gdf = gpd.GeoDataFrame( your_dataframe, geometry=gpd.points_from_xy(your_dataframe.lon, your_dataframe.lat), crs="EPSG:4326" )提取栅格人口值并计算密度
用rasterstats工具快速匹配每个点对应的栅格值:from rasterstats import point_query # 替换为你的GHSL栅格文件路径 pop_raster_path = "ghsl_population.tif" # 提取每个点所在栅格的人口数 gdf['total_pop'] = point_query( geometries=gdf.geometry, raster=pop_raster_path, interpolate='nearest' ) # 以1公里分辨率为例,计算人口密度 gdf['pop_density'] = gdf['total_pop'] / 1 # 单位:人/平方公里
注意事项
- 若点落在海洋等无数据区域,提取结果会是NaN,可根据需求填充0或标记为无效值。
- 20000条数据的处理速度极快,无需担心性能问题。
内容的提问来源于stack exchange,提问作者Olivia
相关产品推荐
相关产品推荐

