地理空间数据处理:DeepSeek 生成 GeoPandas 分析与可视化代码
·
以下是一个使用GeoPandas进行地理空间数据处理、分析与可视化的完整代码示例,包含详细注释:
import geopandas as gpd
import matplotlib.pyplot as plt
from shapely.geometry import Point
# 1. 数据加载与预处理
# 读取示例数据集(世界国家边界)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
print("原始数据预览:")
print(world.head(3))
# 创建示例点数据集(城市坐标)
cities_data = {
'city': ['北京', '上海', '广州', '成都'],
'latitude': [39.90, 31.23, 23.12, 30.57],
'longitude': [116.41, 121.47, 113.25, 104.06]
}
cities = gpd.GeoDataFrame(
cities_data,
geometry=[Point(lon, lat) for lon, lat in zip(cities_data['longitude'], cities_data['latitude'])]
)
cities.crs = "EPSG:4326" # 设置坐标系
# 2. 空间分析操作
# 计算各国面积(单位:平方公里)
world['area_km2'] = world.geometry.area * 10**6
# 空间连接:匹配城市所在国家
cities_in_countries = gpd.sjoin(cities, world, how='inner', predicate='within')
# 缓冲区分析:创建城市100公里半径影响圈
cities['buffer_100km'] = cities.geometry.buffer(1.0) # 1度≈111公里
# 3. 空间数据可视化
fig, ax = plt.subplots(3, 1, figsize=(12, 18))
# 子图1:世界地图着色(按GDP)
world.plot(
ax=ax[0],
column='gdp_md_est',
legend=True,
legend_kwds={'label': "GDP (百万美元)"},
cmap='OrRd',
edgecolor='black',
linewidth=0.5
)
ax[0].set_title("世界各国GDP分布", fontsize=14)
cities.plot(ax=ax[0], color='blue', markersize=50, alpha=0.7)
# 子图2:中国区域放大
china = world[world['iso_a3'] == 'CHN']
ax[1].set_xlim(70, 140)
ax[1].set_ylim(15, 55)
china.plot(
ax=ax[1],
color='#ffeda0',
edgecolor='orange',
linewidth=1.5
)
cities.plot(ax=ax[1], color='red', markersize=100)
for idx, row in cities.iterrows():
ax[1].annotate(row['city'], (row.geometry.x, row.geometry.y), fontsize=9)
# 子图3:城市缓冲区分析
cities.buffer_100km.plot(
ax=ax[2],
alpha=0.3,
color='green',
edgecolor='darkgreen'
)
cities.plot(ax=ax[2], color='purple', markersize=80)
china.plot(ax=ax[2], facecolor='none', edgecolor='gray')
ax[2].set_title("主要城市100公里影响圈", fontsize=14)
plt.tight_layout()
plt.savefig('geo_analysis.png', dpi=300)
print("分析结果已保存至 geo_analysis.png")
关键功能说明:
-
数据加载
- 使用内置数据集演示国家边界数据
- 创建自定义点数据集(城市坐标)
- 坐标系统一为WGS84 (EPSG:4326)
-
空间分析
- 面积计算:$$ A = \int_{S} dS $$ 转换为平方公里
- 空间连接:点面叠加分析(
sjoin) - 缓冲区生成:$$ B = { p \in \mathbb{R}^2 : d(p,c) \leq r } $$
-
可视化特性
- 分级设色地图(GDP分布)
- 动态标注与区域放大
- 缓冲区叠加显示
- 多子图组合输出(300dpi高清图)
扩展应用建议:
- 实际使用时替换数据路径:
# 自定义数据加载
gdf = gpd.read_file("您的数据路径.shp")
- 进阶分析可添加:
- 空间热力图
- 路径网络分析
- 地形高程叠加
- 动态交互地图(Folium集成)
此代码完整展示了地理空间数据处理的核心流程,输出结果包含三个分析视图:全球宏观视角、区域聚焦视角和空间影响范围分析。
更多推荐
所有评论(0)