AI 摘要

喵呜~小凡君m的小猫娘来啦!今天我们要一起探索如何用 Python 的 geopandas 创建一个炫酷的矢量数据地图哦!(✧ω✧) 从学生家乡的经纬度数据开始,一步步转换、设置坐标系,最后还能生成一张漂亮的地图呢!快来跟着我一起解锁这个神奇的地理空间数据处理之旅吧!喵呜~ (ฅ´ω`ฅ)

geopandas 是一个基于 pandas 的地理空间数据处理库,专门用于处理矢量数据(如点、线、面)。它结合了 pandas 的数据处理能力和 shapely 的地理空间计算能力,是地理信息系统(GIS)分析中的重要工具。

创建矢量数据的步骤

  1. 准备数据
    数据通常是一个包含地理坐标(如经度和纬度)的表格。每一行代表一个地理要素(如点、线、面)。

  2. 创建几何对象
    使用 shapely.geometry 中的类(如 PointLineStringPolygon)将坐标转换为几何对象。

  3. 创建 GeoDataFrame
    使用 geopandas.GeoDataFrame 将数据和几何对象组合成一个地理数据框(GeoDataFrame)。

  4. 设置坐标系
    使用 set_crs() 方法为 GeoDataFrame 设置坐标系(如 WGS84,EPSG:4326)。

  5. 保存数据
    使用 to_file() 方法将 GeoDataFrame 保存为矢量文件(如 GeoPackage、Shapefile)。

  6. 可视化数据
    使用 matplotlibgeopandas 内置的绘图功能可视化地理数据。


示例代码分块注释说明


1. 导入库

import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
  • 功能:导入所需的库。
    • geopandas:用于处理地理空间数据。
    • shapely.geometry.Point:用于创建点几何对象。
    • matplotlib.pyplot:用于绘图。

2. 设置 matplotlib 的字体和符号显示

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
  • 功能:设置 matplotlib 的中文字体和解决负号显示问题。
    • SimHei 是一种常用的中文字体。
    • axes.unicode_minus=False 确保负号正常显示。

3. 准备学生位置数据

students_data = [
    {"姓名": "张三", "经度": 116.4074, "纬度": 39.9042},  # 北京
    {"姓名": "李四", "经度": 121.4737, "纬度": 31.2304},  # 上海
    {"姓名": "王五", "经度": 113.2644, "纬度": 23.1291},  # 广州
    {"姓名": "赵六", "经度": 108.9379, "纬度": 34.0522},  # 西安
    {"姓名": "孙七", "经度": 114.1694, "纬度": 22.3193},  # 香港
]
  • 功能:定义一个包含学生姓名和家乡经纬度的列表。每个字典表示一个学生的数据。

4. 将经纬度转换为几何对象

geometry = [Point(x['经度'], x['纬度']) for x in students_data]
  • 功能:使用列表推导式将每个学生的经纬度转换为 shapely.geometry.Point 对象。

5. 创建 GeoDataFrame

gdf = gpd.GeoDataFrame(students_data, geometry=geometry)
  • 功能:将学生数据和几何对象组合成一个 GeoDataFrame
    • students_data:表格数据。
    • geometry:几何列。

6. 设置坐标系

gdf.set_crs("EPSG:4326", allow_override=True, inplace=True)
  • 功能:为 GeoDataFrame 设置坐标系为 WGS84(EPSG:4326)。
    • EPSG:4326:WGS84 坐标系,常用于全球范围的经纬度数据。
    • allow_override=True:允许覆盖现有坐标系。
    • inplace=True:直接修改原对象。

7. 保存为 GeoPackage 文件

gdf.to_file(r"数据\students.gpkg", driver="GPKG")
  • 功能:将 GeoDataFrame 保存为 GeoPackage 文件。
    • r"数据\students.gpkg":文件保存路径。
    • driver="GPKG":指定文件格式为 GeoPackage。

8. 创建绘图窗口

fig, ax = plt.subplots(figsize=(10, 10))
  • 功能:创建一个 10x10 大小的绘图窗口。

9. 绘制学生家乡位置

gdf.plot(ax=ax, color='blue', marker='o', markersize=50, label="学生家乡")
  • 功能:在绘图窗口中绘制学生家乡位置。
    • ax=ax:指定绘图区域。
    • color='blue':设置点的颜色为蓝色。
    • marker='o':设置点的形状为圆形。
    • markersize=50:设置点的大小为 50。
    • label="学生家乡":设置图例标签。

10. 设置标题和坐标轴标签

ax.set_title("本学期选课同学家乡位置", fontsize=15)
ax.set_xlabel("经度")
ax.set_ylabel("纬度")
  • 功能:设置图表的标题和坐标轴标签。

11. 添加图例

ax.legend()
  • 功能:在图表中添加图例。

12. 显示绘图

plt.show()
  • 功能:显示绘图窗口。

13. 打印提示信息

print("GeoPackage文件已创建:students.gpkg")
  • 功能:提示用户 GeoPackage 文件已成功创建。

我是谁?我在哪?我在干什么?
最后更新于 2025-03-02