geopandas
是一个基于 pandas
的地理空间数据处理库,专门用于处理矢量数据(如点、线、面)。它结合了 pandas
的数据处理能力和 shapely
的地理空间计算能力,是地理信息系统(GIS)分析中的重要工具。
创建矢量数据的步骤
-
准备数据:
数据通常是一个包含地理坐标(如经度和纬度)的表格。每一行代表一个地理要素(如点、线、面)。 -
创建几何对象:
使用shapely.geometry
中的类(如Point
、LineString
、Polygon
)将坐标转换为几何对象。 -
创建 GeoDataFrame:
使用geopandas.GeoDataFrame
将数据和几何对象组合成一个地理数据框(GeoDataFrame)。 -
设置坐标系:
使用set_crs()
方法为 GeoDataFrame 设置坐标系(如 WGS84,EPSG:4326)。 -
保存数据:
使用to_file()
方法将 GeoDataFrame 保存为矢量文件(如 GeoPackage、Shapefile)。 -
可视化数据:
使用matplotlib
或geopandas
内置的绘图功能可视化地理数据。
示例代码分块注释说明
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 文件已成功创建。
Comments 1 条评论
holle,wo shi foreigner,Nice to see you。You are the most handsome Nantong I have ever seen。hahahha