以下是一个使用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")

关键功能说明:

  1. 数据加载

    • 使用内置数据集演示国家边界数据
    • 创建自定义点数据集(城市坐标)
    • 坐标系统一为WGS84 (EPSG:4326)
  2. 空间分析

    • 面积计算:$$ A = \int_{S} dS $$ 转换为平方公里
    • 空间连接:点面叠加分析(sjoin
    • 缓冲区生成:$$ B = { p \in \mathbb{R}^2 : d(p,c) \leq r } $$
  3. 可视化特性

    • 分级设色地图(GDP分布)
    • 动态标注与区域放大
    • 缓冲区叠加显示
    • 多子图组合输出(300dpi高清图)

扩展应用建议:

  1. 实际使用时替换数据路径:
# 自定义数据加载
gdf = gpd.read_file("您的数据路径.shp")

  1. 进阶分析可添加:
    • 空间热力图
    • 路径网络分析
    • 地形高程叠加
    • 动态交互地图(Folium集成)

此代码完整展示了地理空间数据处理的核心流程,输出结果包含三个分析视图:全球宏观视角、区域聚焦视角和空间影响范围分析。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐