惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
雷峰网
雷峰网
罗磊的独立博客
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Cisco Talos Blog
Cisco Talos Blog
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
Spread Privacy
Spread Privacy
D
DataBreaches.Net
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
爱范儿
爱范儿
U
Unit 42
Security Latest
Security Latest
M
MIT News - Artificial intelligence
月光博客
月光博客
Scott Helme
Scott Helme
G
Google Developers Blog
有赞技术团队
有赞技术团队
T
Tor Project blog
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
博客园 - Franky
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
V
V2EX
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
Securelist
博客园 - 三生石上(FineUI控件)
Blog — PlanetScale
Blog — PlanetScale
TaoSecurity Blog
TaoSecurity Blog
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
腾讯CDC
D
Docker
Google Online Security Blog
Google Online Security Blog

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第1章:GeoPandas 概述与入门
我才是银古 · 2026-06-22 · via 博客园 - 我才是银古

第1章:GeoPandas 概述与入门

本章将带你全面了解 GeoPandas 的背景、定位、核心特性以及应用场景,并通过一个完整的快速体验示例,让你在最短时间内感受 GeoPandas 的强大能力。


1.1 什么是 GeoPandas

1.1.1 项目背景

GeoPandas 是一个开源的 Python 库,旨在让 地理空间数据 在 Python 中的处理变得更加简单高效。它建立在 pandas 的基础之上,通过扩展 DataFrameSeries,使得用户可以像操作普通表格数据一样操作矢量地理空间数据。

GeoPandas 最早由 Kelsey Jordahl 于 2013 年创建,目的是填补 Python 数据科学生态中地理空间数据处理的空白。传统上,处理地理空间数据需要使用专业的 GIS 软件(如 ArcGIS、QGIS)或底层库(如 OGR/GDAL),学习曲线陡峭。GeoPandas 让熟悉 pandas 的数据科学家能够零障碍地处理空间数据。

1.1.2 起源与发展历程

时间 里程碑
2013 年 Kelsey Jordahl 创建 GeoPandas 项目
2014 年 发布 v0.1,支持基本的空间数据读写和操作
2017 年 社区贡献者大幅增加,功能日趋完善
2020 年 v0.8 发布,引入新的空间索引引擎
2022 年 v0.12 发布,开始向 Shapely 2.0 过渡
2023 年 v0.14 发布,全面拥抱 Shapely 2.0,性能大幅提升
2024 年 v1.0 发布,标志着 API 稳定性的重大里程碑
2025 年 v1.1 发布,进一步优化性能与功能

1.1.3 开源社区

GeoPandas 托管在 GitHub 上(geopandas/geopandas),采用 BSD 3-Clause 开源协议。

  • GitHub Stars:超过 4,500+
  • 贡献者:超过 300+
  • 下载量:每月数百万次(PyPI + conda-forge)
  • 活跃维护者:包括 Joris Van den Bossche、Martin Fleischmann 等知名 GIS 与数据科学社区成员

社区活跃在多个平台:

  • GitHub Issues/Discussions:Bug 报告与功能讨论
  • Stack Overflow:标签 geopandas 下有大量问答
  • Gitter/Discord:实时交流

1.2 GeoPandas 的定位与价值

1.2.1 Python 中的 PostGIS

如果说 PostGIS 是 PostgreSQL 的地理空间扩展,那么 GeoPandas 就是 pandas 的地理空间扩展

PostgreSQL  +  PostGIS   =  空间数据库
pandas      +  GeoPandas =  空间数据分析框架

这种类比帮助我们理解 GeoPandas 的核心定位:

特性 PostGIS GeoPandas
基础平台 PostgreSQL 数据库 pandas DataFrame
空间类型 geometry/geography 列 GeoSeries (geometry 列)
空间函数 ST_Buffer, ST_Intersects 等 buffer(), intersects() 等
空间索引 GiST/SP-GiST STRtree
坐标参考系 SRID CRS (pyproj)
查询语言 SQL Python/pandas API

1.2.2 为什么选择 GeoPandas

  1. 低学习曲线:如果你会 pandas,你几乎已经会了 GeoPandas 的 80%
  2. 一站式方案:读取、处理、分析、可视化,全部在一个库中完成
  3. 无缝集成:与 Python 数据科学生态(numpy、scikit-learn、matplotlib)完美配合
  4. 高性能:基于 Shapely 2.0 的向量化操作,性能优异
  5. 灵活性:既能处理小数据,也能与 Dask-GeoPandas 配合处理大数据

1.2.3 GeoPandas 不适合的场景

需要注意的是,GeoPandas 并非万能的:

  • 超大规模数据(数亿条记录):考虑使用空间数据库或 Dask-GeoPandas
  • 栅格数据处理:应使用 rasterio、xarray 等
  • 三维空间分析:GeoPandas 主要处理二维数据
  • 实时地图服务:应使用 GeoServer、MapServer 等

1.3 核心特性总览

GeoPandas 提供了丰富的地理空间数据处理能力,以下是其核心特性的概览:

1.3.1 矢量数据处理

import geopandas as gpd

# 读取 Shapefile
gdf = gpd.read_file("cities.shp")

# 读取 GeoJSON
gdf = gpd.read_file("boundaries.geojson")

# 读取 GeoPackage
gdf = gpd.read_file("data.gpkg", layer="buildings")

支持的矢量格式包括但不限于:

格式 读取 写入 说明
Shapefile (.shp) 经典格式,广泛使用
GeoJSON (.geojson) Web 友好的 JSON 格式
GeoPackage (.gpkg) 现代替代 Shapefile
FlatGeobuf (.fgb) 高性能流式格式
Parquet (.parquet) 列式存储,高效压缩
Feather (.feather) 快速序列化格式
KML (.kml) Google Earth 格式
CSV (含 WKT) 文本格式

1.3.2 空间分析

GeoPandas 内置了丰富的空间分析功能:

# 缓冲区分析
buffered = gdf.buffer(distance=1000)  # 1000 米缓冲区

# 空间叠加
result = gpd.overlay(gdf1, gdf2, how='intersection')

# 空间连接
joined = gpd.sjoin(points, polygons, predicate='within')

# 距离计算
distances = gdf1.distance(gdf2)

# 面积计算
areas = gdf.area

# 质心计算
centroids = gdf.centroid

1.3.3 坐标参考系 (CRS)

# 查看 CRS
print(gdf.crs)  # EPSG:4326

# 投影转换
gdf_projected = gdf.to_crs(epsg=3857)

# 自定义 CRS
from pyproj import CRS
custom_crs = CRS.from_proj4("+proj=aea +lat_1=25 +lat_2=47 +lon_0=105")
gdf_custom = gdf.to_crs(custom_crs)

1.3.4 可视化

import matplotlib.pyplot as plt

# 基础绘图
gdf.plot(column='population', cmap='YlOrRd', legend=True)
plt.title("人口分布图")
plt.show()

# 交互式地图
m = gdf.explore(column='population', cmap='YlOrRd')
m.save("interactive_map.html")

1.3.5 空间索引

# 空间索引自动创建
sindex = gdf.sindex

# 查询某个范围内的要素
bbox = (116.0, 39.0, 117.0, 40.0)
candidates = list(sindex.query(bbox))

1.4 GeoPandas 与其他 GIS 工具的对比

1.4.1 GeoPandas vs ArcPy

对比维度 GeoPandas ArcPy
授权费用 免费开源 需要 ArcGIS 许可证(昂贵)
安装 pip/conda 轻松安装 必须安装 ArcGIS Desktop/Pro
数据模型 DataFrame 风格 游标(Cursor)风格
批量处理 向量化操作,高效 逐行处理,较慢
可扩展性 可与任意 Python 库配合 受 ArcGIS 环境限制
社区支持 开源社区活跃 官方支持 + 用户社区
功能丰富度 聚焦矢量分析 全面的 GIS 功能
栅格处理 不直接支持 完整支持

适用场景

  • GeoPandas:数据科学导向的空间分析、自动化脚本、批量处理
  • ArcPy:需要 ArcGIS 专有工具的复杂 GIS 工作流

1.4.2 GeoPandas vs QGIS Processing

对比维度 GeoPandas QGIS Processing
使用方式 纯代码 GUI + Python 脚本
学习曲线 需要编程基础 可视化操作更直观
自动化 天然支持批处理 通过模型构建器或 PyQGIS
数据规模 内存限制 同样受内存限制
可复现性 代码即文档 需要额外记录步骤
费用 免费 免费

1.4.3 GeoPandas vs PostGIS

对比维度 GeoPandas PostGIS
运行环境 内存中 数据库服务器
数据规模 适合中小规模 可处理海量数据
并发访问 单用户 多用户并发
查询语言 Python API SQL
空间函数 100+ 300+
事务支持 ACID 事务
适用场景 探索性分析 生产环境数据管理

1.4.4 GeoPandas vs R sf 包

对比维度 GeoPandas (Python) sf (R)
生态系统 Python 数据科学 R 统计分析
底层引擎 Shapely + pyproj GEOS + PROJ
数据模型 GeoDataFrame sf data.frame
可视化 matplotlib + folium ggplot2 + tmap
机器学习集成 scikit-learn, PyTorch caret, tidymodels
性能 向量化操作优异 向量化操作优异
语法风格 面向对象 tidyverse 管道

1.5 技术栈与依赖生态

GeoPandas 并非独立工作,而是构建在一系列优秀的开源库之上:

1.5.1 核心依赖

GeoPandas
├── pandas (>= 2.2)        # 表格数据处理
│   └── numpy (>= 2.0)     # 数值计算
├── shapely (>= 2.1)       # 几何对象与操作
│   └── GEOS               # C++ 几何引擎
├── pyproj (>= 3.7)        # 坐标参考系与投影
│   └── PROJ               # C 投影库
├── pyogrio (>= 0.8)       # 空间数据I/O
│   └── GDAL/OGR           # C/C++ 空间数据引擎
└── packaging              # 版本解析

1.5.2 可选依赖

版本要求 用途
matplotlib >= 3.9 静态地图绘制
folium - 交互式 Web 地图
mapclassify >= 2.7.3 数据分类方案(自然断裂点、等间距等)
xyzservices - 瓦片地图服务
geopy - 地理编码(地址转坐标)
psycopg - PostgreSQL 连接(用于 PostGIS)
SQLAlchemy >= 2.0 数据库 ORM
GeoAlchemy2 - SQLAlchemy 的地理空间扩展
pyarrow >= 15.0 Parquet/Feather 格式支持
scipy - 科学计算(Voronoi 图等)
pointpats - 点模式分析

1.5.3 生态系统全景

                    ┌─────────────────────────────┐
                    │      GeoPandas 生态系统       │
                    └─────────────────────────────┘
                                  │
          ┌───────────────────────┼───────────────────────┐
          │                       │                       │
    ┌─────┴─────┐          ┌─────┴─────┐          ┌─────┴─────┐
    │  数据 I/O  │          │  空间分析  │          │   可视化   │
    └─────┬─────┘          └─────┬─────┘          └─────┬─────┘
          │                      │                      │
    ┌─────┴─────┐          ┌─────┴─────┐          ┌─────┴─────┐
    │  pyogrio  │          │  shapely  │          │ matplotlib│
    │  pyarrow  │          │  scipy    │          │  folium   │
    │  psycopg  │          │ pointpats │          │ contextily│
    └───────────┘          └───────────┘          └───────────┘

1.6 应用场景

GeoPandas 在众多领域都有广泛应用:

1.6.1 城市规划

import geopandas as gpd

# 读取城市用地规划数据
land_use = gpd.read_file("land_use.shp")

# 计算各类用地面积
land_use['面积_平方公里'] = land_use.to_crs(epsg=32650).area / 1e6

# 按用地类型统计
summary = land_use.groupby('用地类型')['面积_平方公里'].sum()
print(summary)

典型任务

  • 用地分类统计与分析
  • 设施服务范围评估(缓冲区分析)
  • 人口密度计算与可视化
  • 交通可达性分析

1.6.2 环境监测

# 读取监测站点和行政区划数据
stations = gpd.read_file("monitoring_stations.geojson")
districts = gpd.read_file("districts.geojson")

# 空间连接:将站点关联到所在区域
joined = gpd.sjoin(stations, districts, predicate='within')

# 按区域计算平均污染指数
avg_pollution = joined.groupby('区域名称')['PM25'].mean()

典型任务

  • 空气质量空间分布分析
  • 水体污染源追溯
  • 生态敏感区识别
  • 自然保护区边界管理

1.6.3 交通分析

# 读取道路网络数据
roads = gpd.read_file("road_network.shp")

# 计算道路长度
roads['长度_km'] = roads.to_crs(epsg=32650).length / 1000

# 按道路等级统计里程
mileage = roads.groupby('道路等级')['长度_km'].sum()

# 创建道路缓冲区(模拟噪音影响范围)
noise_zones = roads.to_crs(epsg=32650).buffer(50)  # 50米缓冲区

1.6.4 房地产分析

# 读取房产和配套设施数据
properties = gpd.read_file("properties.geojson")
schools = gpd.read_file("schools.geojson")

# 计算每个房产到最近学校的距离
properties_proj = properties.to_crs(epsg=32650)
schools_proj = schools.to_crs(epsg=32650)

# 计算最近学校距离
from shapely.ops import nearest_points
properties_proj['到最近学校距离'] = properties_proj.geometry.apply(
    lambda x: schools_proj.distance(x).min()
)

1.6.5 更多应用场景

领域 应用示例
公共卫生 疫情空间传播分析、医疗资源分布
农业 农田边界管理、作物分布统计
电力能源 输电线路管理、风电场选址
物流配送 配送范围划分、仓库选址优化
保险 灾害风险区域评估、保单空间分析
考古学 遗址分布分析、文物保护区管理

1.7 快速体验

下面通过一个完整的示例,体验 GeoPandas 的核心工作流程。

1.7.1 示例:分析世界各国人口数据

import geopandas as gpd
import matplotlib.pyplot as plt

# ========================================
# 步骤 1:读取数据
# ========================================
# 使用 GeoPandas 内置的世界各国数据集
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# 查看数据概览
print("数据形状:", world.shape)
print("\n列名:", world.columns.tolist())
print("\n前5行数据:")
print(world.head())
print("\n坐标参考系:", world.crs)

# ========================================
# 步骤 2:数据探索
# ========================================
# 查看数据类型
print("\n数据类型:")
print(world.dtypes)

# 基本统计
print("\n人口统计:")
print(world['pop_est'].describe())

# 按大洲分组统计
continent_stats = world.groupby('continent').agg({
    'pop_est': ['sum', 'mean', 'count'],
    'gdp_md_est': 'sum'
}).round(0)
print("\n大洲统计:")
print(continent_stats)

# ========================================
# 步骤 3:空间分析
# ========================================
# 计算各国面积(使用等面积投影)
world_aea = world.to_crs('+proj=aea +lat_1=20 +lat_2=60 +lon_0=0')
world['area_km2'] = world_aea.area / 1e6  # 转换为平方公里

# 计算人口密度
world['pop_density'] = world['pop_est'] / world['area_km2']

# 找出人口密度最高的 10 个国家
top10_density = world.nlargest(10, 'pop_density')[['name', 'pop_density', 'pop_est']]
print("\n人口密度 TOP 10:")
print(top10_density)

# ========================================
# 步骤 4:空间操作
# ========================================
# 获取各国质心
world['centroid'] = world.centroid

# 计算中国的邻国
china = world[world['name'] == 'China']
neighbors = world[world.touches(china.unary_union)]
print(f"\n中国的邻国 ({len(neighbors)} 个):")
print(neighbors['name'].tolist())

# ========================================
# 步骤 5:可视化
# ========================================
fig, axes = plt.subplots(2, 2, figsize=(20, 16))

# 子图1:世界政区图
world.plot(ax=axes[0, 0], color='lightblue', edgecolor='gray')
axes[0, 0].set_title('世界政区图', fontsize=14)
axes[0, 0].set_axis_off()

# 子图2:人口分布图
world.plot(column='pop_est', ax=axes[0, 1], legend=True,
           legend_kwds={'label': '人口数量', 'shrink': 0.6},
           cmap='YlOrRd', missing_kwds={'color': 'lightgrey'})
axes[0, 1].set_title('世界人口分布', fontsize=14)
axes[0, 1].set_axis_off()

# 子图3:人均GDP
world.plot(column='gdp_md_est', ax=axes[1, 0], legend=True,
           legend_kwds={'label': 'GDP (百万美元)', 'shrink': 0.6},
           cmap='Greens', missing_kwds={'color': 'lightgrey'})
axes[1, 0].set_title('世界 GDP 分布', fontsize=14)
axes[1, 0].set_axis_off()

# 子图4:人口密度
world.plot(column='pop_density', ax=axes[1, 1], legend=True,
           legend_kwds={'label': '人口密度 (人/km²)', 'shrink': 0.6},
           cmap='OrRd', scheme='quantiles',
           missing_kwds={'color': 'lightgrey'})
axes[1, 1].set_title('世界人口密度分布', fontsize=14)
axes[1, 1].set_axis_off()

plt.tight_layout()
plt.savefig('world_analysis.png', dpi=150, bbox_inches='tight')
plt.show()

# ========================================
# 步骤 6:数据导出
# ========================================
# 导出为 GeoJSON
world.to_file("world_with_density.geojson", driver="GeoJSON")

# 导出为 GeoPackage
world.to_file("world_analysis.gpkg", layer="countries", driver="GPKG")

print("\n分析完成!数据已导出。")

1.7.2 运行结果说明

运行上述代码后,你将得到:

  1. 控制台输出:数据概览、统计信息、人口密度排名等
  2. 可视化图表:包含 4 个子图的世界地图分析
  3. 导出文件:GeoJSON 和 GeoPackage 格式的分析结果

这个简单的示例展示了 GeoPandas 的核心工作流程:

读取数据 → 数据探索 → 空间分析 → 空间操作 → 可视化 → 数据导出

1.8 学习路线图

为了系统地掌握 GeoPandas,建议按照以下路线学习:

1.8.1 基础阶段(第 1-5 章)

第1章:概述与入门        ← 你在这里
    │
第2章:安装与环境配置
    │
第3章:核心架构与数据模型
    │
第4章:GeoDataFrame 基础操作
    │
第5章:GeoSeries 与几何对象

目标:掌握 GeoPandas 的基本概念、数据结构和基础操作。

1.8.2 前置知识

在开始学习 GeoPandas 之前,建议具备以下知识:

知识领域 要求程度 推荐资源
Python 基础 必须 Python 官方教程
pandas 强烈建议 pandas 官方文档
GIS 基础概念 建议了解 地理信息系统导论
matplotlib 建议了解 matplotlib 官方教程
numpy 了解即可 numpy 快速入门

1.8.3 学习建议

  1. 动手实践:每个章节都有代码示例,建议在 Jupyter Notebook 中亲自运行
  2. 使用真实数据:尝试将学到的知识应用到自己的数据上
  3. 查阅官方文档:本教程是学习辅助,官方文档是最权威的参考
  4. 参与社区:在 GitHub、Stack Overflow 上提问和回答问题

1.9 本章小结

本章介绍了以下内容:

主题 要点
GeoPandas 简介 开源 Python 地理空间数据处理库,2013 年创建
定位与价值 pandas 的地理空间扩展,Python 中的 PostGIS
核心特性 矢量数据处理、空间分析、CRS、可视化、IO
工具对比 与 ArcPy、QGIS、PostGIS、R sf 各有优劣
技术栈 建立在 pandas、shapely、pyproj、pyogrio 之上
应用场景 城市规划、环境监测、交通分析等多个领域
快速体验 完整的世界各国人口数据分析示例
学习路线 从基础到进阶的系统学习路径

下一章预告:第 2 章将详细介绍 GeoPandas 的安装与环境配置,确保你的开发环境准备就绪。


📚 参考资料