第2章:安装与环境配置

工欲善其事,必先利其器。本章将详细介绍 GeoPandas 的安装方法、依赖管理、虚拟环境配置以及常见问题排查,确保你的开发环境顺利搭建。


2.1 系统要求

2.1.1 Python 版本要求

GeoPandas 1.0/1.1 版本要求 Python 3.10 或更高版本;1.2 起要求 Python 3.11 或更高版本。

GeoPandas 版本 最低 Python 版本 推荐 Python 版本
1.2.x 3.11 3.12
1.1.x 3.10 3.12
1.0.x 3.10 3.12
0.14.x 3.9 3.11
0.13.x 3.8 3.11

⚠️ 注意:如果你的 Python 版本低于 3.10,请先升级 Python 或使用较早版本的 GeoPandas。

检查当前 Python 版本:

python --version
# 或
python3 --version

2.1.2 操作系统兼容性

GeoPandas 支持所有主流操作系统:

操作系统 支持状态 安装难度 备注
Windows 10/11 ✅ 完全支持 ⭐⭐ conda 安装最简单
macOS (Intel) ✅ 完全支持 ⭐⭐ Homebrew + pip 或 conda
macOS (Apple Silicon) ✅ 完全支持 ⭐⭐ conda-forge 原生支持 ARM
Ubuntu/Debian ✅ 完全支持 ⭐⭐ apt 安装系统依赖后 pip
CentOS/RHEL ✅ 支持 ⭐⭐⭐ 可能需要编译 GDAL
Arch Linux ✅ 支持 ⭐ pacman 可直接安装

2.1.3 硬件建议

用途 内存 磁盘空间 CPU
学习与小规模分析 4 GB+ 2 GB 任意
中等规模分析 8 GB+ 5 GB 多核推荐
大规模数据处理 16 GB+ 10 GB+ 多核必备

2.2 使用 pip 安装

2.2.1 基础安装

最简单的安装方式是使用 pip:

pip install geopandas

这将自动安装 GeoPandas 及其所有核心依赖。

教程示例使用的数据集由 geodatasets 包提供(GeoPandas 1.0 起内置示例数据已迁移至该包),如尚未安装,请执行:

pip install geodatasets

并在代码中导入:

import geodatasets
world = gpd.read_file(geodatasets.get_path("naturalearth.land"))

2.2.2 安装特定版本

# 安装最新稳定版
pip install geopandas

# 安装特定版本
pip install geopandas==1.1.0

# 安装最新开发版
pip install git+https://github.com/geopandas/geopandas.git

# 升级到最新版
pip install --upgrade geopandas

2.2.3 安装可选依赖

GeoPandas 支持通过 extras 一次性安装可选依赖:

# 安装所有可选依赖
pip install geopandas[all]

# 仅安装开发依赖
pip install geopandas[dev]

2.2.4 pip 安装注意事项

使用 pip 安装时需要注意以下几点:

  1. C 库依赖:GeoPandas 的部分依赖(如 GDAL、GEOS、PROJ)是 C/C++ 库。pip 安装时通常会下载预编译的二进制轮子包(wheel),但在某些平台上可能需要从源码编译。

  2. 预编译支持:
    • Windows、macOS、Linux 的主流架构通常有预编译包
    • 较新的 Python 版本在刚发布时可能暂时没有预编译包
  3. 建议:如果 pip 安装遇到问题,推荐使用 conda 安装(见 2.3 节)。

2.3 使用 conda 安装

2.3.1 推荐方式

conda 是安装 GeoPandas 的推荐方式,因为它能完美处理 C/C++ 库依赖。

# 使用 conda-forge 渠道安装(推荐)
conda install -c conda-forge geopandas

2.3.2 为什么推荐 conda

特性 pip conda
C 库依赖管理 需要系统预装或编译 自动处理
二进制兼容性 可能有冲突 统一管理
环境隔离 venv conda env
跨平台一致性 取决于平台 高度一致
GDAL/GEOS/PROJ 需要单独安装 自动作为依赖安装

2.3.3 使用 Miniforge

如果你还没有安装 conda,推荐使用 Miniforge(比 Anaconda 更轻量,默认使用 conda-forge):

# Linux/macOS
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
bash Miniforge3-$(uname)-$(uname -m).sh

# Windows
# 下载 Miniforge3-Windows-x86_64.exe 并运行

2.3.4 创建专用环境

建议为 GeoPandas 项目创建专用的 conda 环境:

# 创建新环境
conda create -n geoenv python=3.12

# 激活环境
conda activate geoenv

# 安装 GeoPandas
conda install -c conda-forge geopandas

# 安装额外的可视化工具
conda install -c conda-forge matplotlib jupyter folium mapclassify

2.3.5 使用环境配置文件

你也可以通过 YAML 文件一次性创建完整环境:

# environment.yml
name: geoenv
channels:
  - conda-forge
dependencies:
  - python=3.12
  - geopandas>=1.0
  - matplotlib>=3.9
  - jupyter
  - jupyterlab
  - folium
  - mapclassify>=2.7.3
  - contextily
  - pyarrow>=15.0
  - scipy
  - seaborn
  - xyzservices

使用配置文件创建环境:

conda env create -f environment.yml
conda activate geoenv

2.4 从源码安装

2.4.1 适用场景

从源码安装适合以下情况:

  • 需要使用最新的开发版功能
  • 想要参与 GeoPandas 的开发与贡献
  • 需要调试 GeoPandas 的内部行为

2.4.2 安装步骤

# 1. 克隆仓库
git clone https://github.com/geopandas/geopandas.git
cd geopandas

# 2. 安装开发依赖
pip install -e ".[dev]"

# 或者使用 conda 安装依赖
conda install -c conda-forge --file requirements.txt

# 3. 以开发模式安装
pip install -e .

# 4. 验证安装
python -c "import geopandas; print(geopandas.__version__)"

2.4.3 开发环境设置

如果你计划为 GeoPandas 贡献代码:

# 克隆你的 fork
git clone https://github.com/YOUR_USERNAME/geopandas.git
cd geopandas

# 添加上游仓库
git remote add upstream https://github.com/geopandas/geopandas.git

# 创建开发分支
git checkout -b my-feature

# 安装开发和测试依赖
pip install -e ".[dev,test]"

# 运行测试
pytest geopandas/tests/ -x -v

2.5 核心依赖详解

GeoPandas 的核心依赖是它能正常工作的基础。了解这些依赖有助于排查问题和优化性能。

2.5.1 依赖总览

依赖包 版本要求 角色 底层 C/C++ 库
numpy >= 2.0 数值计算基础 -
pandas >= 2.2 表格数据处理 -
shapely >= 2.1 几何对象与操作 GEOS
pyproj >= 3.7 坐标参考系 PROJ
pyogrio >= 0.8 空间数据读写 GDAL/OGR
packaging - 版本号解析 -

2.5.2 numpy (>= 2.0)

NumPy 是 Python 数值计算的基础库,GeoPandas 依赖它进行高效的数组运算。

import numpy as np
print(f"NumPy 版本: {np.__version__}")

# GeoPandas 中的坐标数据底层就是 numpy 数组
import geopandas as gpd
from shapely.geometry import Point

gdf = gpd.GeoDataFrame(geometry=[Point(0, 0), Point(1, 1)])
# bounds 返回的就是 numpy 数组
print(gdf.total_bounds)  # array([0., 0., 1., 1.])

2.5.3 pandas (>= 2.2)

pandas 是 GeoPandas 的直接基础。GeoDataFrame 继承自 pandas DataFrame,GeoSeries 继承自 pandas Series。

import pandas as pd
print(f"pandas 版本: {pd.__version__}")

# GeoDataFrame 继承了 pandas 的所有功能
import geopandas as gpd
gdf = gpd.read_file(geodatasets.get_path("naturalearth.land"))

# 所有 pandas 操作都可用
print(type(gdf))          # <class 'geopandas.geodataframe.GeoDataFrame'>
print(isinstance(gdf, pd.DataFrame))  # True

2.5.4 shapely (>= 2.1)

Shapely 是 GeoPandas 几何操作的核心引擎。GeoPandas 1.1 要求 Shapely 2.0+,1.2 起要求 Shapely 2.1+,充分利用了 Shapely 2.0 的向量化操作能力。

import shapely
print(f"Shapely 版本: {shapely.__version__}")
print(f"GEOS 版本: {shapely.geos_version_string}")

# Shapely 提供几何对象
from shapely.geometry import Point, Polygon, LineString

point = Point(116.4, 39.9)       # 北京
polygon = Polygon([(0,0), (1,0), (1,1), (0,1)])
line = LineString([(0,0), (1,1), (2,0)])

# Shapely 2.0 的向量化操作
import numpy as np
points = shapely.points(np.random.rand(1000), np.random.rand(1000))
areas = shapely.area(shapely.buffer(points, 0.1))  # 批量缓冲区

Shapely 2.0 的重大改进:

  • 向量化操作:批量处理性能提升 10-100 倍
  • 线程安全:支持多线程并行
  • 更简洁的 API
  • 与 NumPy 深度集成

2.5.5 pyproj (>= 3.7)

pyproj 负责坐标参考系统 (CRS) 的管理和投影转换。

import pyproj
print(f"pyproj 版本: {pyproj.__version__}")
print(f"PROJ 版本: {pyproj.proj_version_str}")

# CRS 对象
crs_4326 = pyproj.CRS.from_epsg(4326)   # WGS84 地理坐标系
crs_3857 = pyproj.CRS.from_epsg(3857)   # Web 墨卡托

print(f"WGS84: {crs_4326.name}")
print(f"Web Mercator: {crs_3857.name}")

# 坐标转换
transformer = pyproj.Transformer.from_crs(4326, 3857, always_xy=True)
x, y = transformer.transform(116.4, 39.9)  # 经纬度 → Web墨卡托
print(f"北京: ({x:.2f}, {y:.2f})")

2.5.6 pyogrio (>= 0.8)

pyogrio 是 GeoPandas 的默认 I/O 引擎,基于 GDAL/OGR,提供高性能的空间数据读写。

import pyogrio
print(f"pyogrio 版本: {pyogrio.__version__}")
print(f"GDAL 版本: {pyogrio.__gdal_version__}")

# 列出支持的驱动
drivers = pyogrio.list_drivers()
print(f"支持的驱动数量: {len(drivers)}")

# pyogrio 提供底层读取功能
# GeoPandas 的 read_file() 内部调用 pyogrio

📝 历史说明:在 GeoPandas 0.x 版本中,默认 I/O 引擎是 fiona。从 GeoPandas 1.0 开始,pyogrio 成为默认引擎,因为它性能更好,安装更简单。


2.6 可选依赖安装

GeoPandas 的可选依赖扩展了其功能范围。根据你的需求选择安装。

2.6.1 可视化相关

# matplotlib - 静态地图绘制(最常用)
pip install "matplotlib>=3.9"

# folium - 交互式 Web 地图(基于 Leaflet.js)
pip install folium

# mapclassify - 数据分类方案(分级设色地图必备)
pip install "mapclassify>=2.7.3"

# xyzservices - 瓦片地图服务提供者
pip install xyzservices

# 一次性安装所有可视化依赖
pip install "matplotlib>=3.9" folium "mapclassify>=2.7.3" xyzservices

2.6.2 各可视化库的用途

库 用途 示例
matplotlib 静态地图、出版级图表 gdf.plot()
folium 交互式 Web 地图 gdf.explore()
mapclassify 数据分类(自然断裂、分位数等) scheme='quantiles'
xyzservices 底图瓦片(OpenStreetMap 等) 在线底图叠加
# matplotlib 静态绘图
import matplotlib.pyplot as plt
gdf.plot(column='population', cmap='YlOrRd', legend=True)
plt.savefig("static_map.png")

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

# 使用 mapclassify 分级
gdf.plot(column='population', scheme='NaturalBreaks', k=5, legend=True)

2.6.3 地理编码

# geopy - 地理编码(地址 ↔ 坐标)
pip install geopy
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="my_app")
location = geolocator.geocode("北京市天安门")
print(f"经度: {location.longitude}, 纬度: {location.latitude}")

2.6.4 数据库支持

# PostgreSQL/PostGIS 支持
pip install psycopg "SQLAlchemy>=2.0" GeoAlchemy2
import geopandas as gpd
from sqlalchemy import create_engine

# 连接 PostGIS 数据库
engine = create_engine("postgresql+psycopg://user:password@localhost:5432/gisdb")

# 从 PostGIS 读取数据
gdf = gpd.read_postgis("SELECT * FROM buildings", engine, geom_col='geom')

# 写入 PostGIS
gdf.to_postgis("analysis_result", engine, if_exists='replace')

2.6.5 高性能格式支持

# Apache Arrow / Parquet / Feather 格式支持
pip install "pyarrow>=15.0"
import geopandas as gpd

# 读写 Parquet 格式(高性能列式存储)
gdf = gpd.read_parquet("data.parquet")
gdf.to_parquet("output.parquet")

# 读写 Feather 格式(快速序列化)
gdf = gpd.read_feather("data.feather")
gdf.to_feather("output.feather")

💡 性能提示:Parquet 和 Feather 格式的读写速度通常比 Shapefile 和 GeoJSON 快 5-10 倍,且文件更小。强烈推荐用于中间数据存储。

2.6.6 科学计算

# scipy - 科学计算(Voronoi 图等)
pip install scipy

# pointpats - 点模式分析
pip install pointpats

2.6.7 完整安装命令

如果你想安装所有可选依赖:

# pip 方式
pip install geopandas[all]

# conda 方式
conda install -c conda-forge geopandas matplotlib folium mapclassify \
    xyzservices geopy psycopg sqlalchemy geoalchemy2 pyarrow scipy jupyter

2.7 虚拟环境最佳实践

2.7.1 为什么需要虚拟环境

虚拟环境可以:

  • 隔离依赖:不同项目使用不同版本的库
  • 避免冲突:防止系统级 Python 包被污染
  • 可复现:确保团队成员使用相同的环境
  • 易于部署:环境配置可导出为文件

2.7.2 使用 venv(Python 内置)

# 创建虚拟环境
python -m venv geoenv

# 激活环境
# Linux/macOS:
source geoenv/bin/activate
# Windows:
geoenv\Scripts\activate

# 安装 GeoPandas
pip install geopandas matplotlib jupyter

# 导出依赖列表
pip freeze > requirements.txt

# 从依赖列表安装
pip install -r requirements.txt

# 退出虚拟环境
deactivate

2.7.3 使用 conda env

# 创建环境
conda create -n geoenv python=3.12

# 激活环境
conda activate geoenv

# 安装包
conda install -c conda-forge geopandas matplotlib jupyterlab

# 导出环境
conda env export > environment.yml

# 从文件创建环境
conda env create -f environment.yml

# 列出所有环境
conda env list

# 删除环境
conda env remove -n geoenv

# 退出环境
conda deactivate

2.7.4 使用 Poetry

# 初始化项目
poetry init

# 添加依赖
poetry add geopandas matplotlib jupyter

# 安装依赖
poetry install

# 在虚拟环境中运行
poetry run python script.py
poetry run jupyter lab

# 导出为 requirements.txt
poetry export -f requirements.txt -o requirements.txt

pyproject.toml 示例:

[tool.poetry]
name = "geo-analysis"
version = "0.1.0"
description = "地理空间数据分析项目"
authors = ["Your Name <your@email.com>"]

[tool.poetry.dependencies]
python = "^3.10"
geopandas = "^1.0"
matplotlib = "^3.9"
folium = "*"
mapclassify = "^2.7.3"
jupyterlab = "*"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

2.7.5 方案对比

特性 venv conda env Poetry
安装方式 Python 内置 conda 命令 pip install poetry
C 库管理 ❌ 不支持 ✅ 支持 ❌ 不支持
依赖解析 基础 完善 高级
锁文件 ❌ ❌ ✅ poetry.lock
Python 版本管理 ❌ ✅ ❌
磁盘占用 小 大 中
推荐场景 简单项目 GIS 项目(推荐) 正式项目开发

2.8 常见安装问题排查

2.8.1 GDAL 编译问题

症状:

ERROR: Failed building wheel for GDAL

解决方案:

# Ubuntu/Debian
sudo apt-get install gdal-bin libgdal-dev
export CPLUS_INCLUDE_PATH=/usr/include/gdal
export C_INCLUDE_PATH=/usr/include/gdal

# macOS (Homebrew)
brew install gdal
export GDAL_CONFIG=/opt/homebrew/bin/gdal-config

# 或者直接使用 conda(推荐,避免此问题)
conda install -c conda-forge geopandas

2.8.2 Shapely/GEOS 相关问题

症状:

OSError: Could not find lib geos_c or load any of its variants

解决方案:

# Ubuntu/Debian
sudo apt-get install libgeos-dev

# macOS
brew install geos

# 或使用 conda
conda install -c conda-forge shapely

2.8.3 PROJ 相关问题

症状:

pyproj.exceptions.CRSError: Invalid projection

解决方案:

# 确保 PROJ 数据文件存在
python -c "import pyproj; print(pyproj.datadir.get_data_dir())"

# Ubuntu/Debian
sudo apt-get install proj-data

# 设置 PROJ 数据目录(如果需要)
export PROJ_DATA=/path/to/proj/data

2.8.4 依赖版本冲突

症状:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed.

解决方案:

# 方法1:在干净环境中安装
python -m venv fresh_env
source fresh_env/bin/activate
pip install geopandas

# 方法2:使用 conda(依赖解析更好)
conda create -n geoenv -c conda-forge python=3.12 geopandas

# 方法3:指定兼容的版本
pip install "geopandas==1.1.0" "shapely>=2.1,<3" "pandas>=2.2,<3"

2.8.5 Windows 特定问题

问题1:长路径限制

# 以管理员身份运行 PowerShell
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
    -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

问题2:Visual C++ 编译器缺失

error: Microsoft Visual C++ 14.0 or greater is required

解决:安装 Microsoft Visual C++ Build Tools 或使用 conda。

2.8.6 macOS Apple Silicon 问题

症状:某些包没有 ARM64 预编译包

# 确保使用 ARM64 版本的 Python/conda
python -c "import platform; print(platform.machine())"  # 应输出 arm64

# 使用 Miniforge(原生 ARM64 支持)
# 从 https://github.com/conda-forge/miniforge 下载安装

2.8.7 通用排查步骤

当遇到安装问题时,按以下步骤排查:

# 1. 检查 Python 版本
python --version

# 2. 检查 pip 版本(确保是最新的)
pip install --upgrade pip

# 3. 检查已安装的相关包
pip list | grep -iE "geopandas|shapely|pyproj|gdal|fiona|pyogrio"

# 4. 尝试在干净环境中安装
python -m venv test_env && source test_env/bin/activate
pip install geopandas

# 5. 如果还是失败,使用 conda
conda create -n test_geo -c conda-forge python=3.12 geopandas

2.9 开发环境推荐

2.9.1 Jupyter Notebook / JupyterLab

推荐指数:⭐⭐⭐⭐⭐(地理空间分析首选)

Jupyter 是地理空间数据分析的最佳环境,因为它可以:

  • 实时显示地图和图表
  • 逐步执行代码,方便调试
  • 混合代码、文本和可视化
  • 方便分享分析结果
# 安装
pip install jupyterlab

# 或使用 conda
conda install -c conda-forge jupyterlab

# 启动
jupyter lab

推荐扩展:

# 变量查看器
pip install jupyterlab-variableinspector

# Git 集成
pip install jupyterlab-git

Jupyter 中使用 GeoPandas 的示例:

# 在 Jupyter 中,GeoDataFrame 会自动以表格形式显示
import geopandas as gpd

world = gpd.read_file(geodatasets.get_path("naturalearth.land"))
world  # 自动渲染为 HTML 表格

# 交互式地图直接在 notebook 中显示
world.explore()  # 自动渲染为交互式地图

2.9.2 VS Code

推荐指数:⭐⭐⭐⭐

VS Code 适合编写正式的 Python 脚本和项目。

推荐扩展:

扩展 用途
Python Python 语言支持
Pylance 智能代码补全
Jupyter 在 VS Code 中运行 Notebook
Geo Data Viewer 地理数据预览
Rainbow CSV CSV 文件高亮

settings.json 配置示例:

{
    "python.defaultInterpreterPath": "/path/to/geoenv/bin/python",
    "python.analysis.typeCheckingMode": "basic",
    "jupyter.notebookFileRoot": "${workspaceFolder}"
}

2.9.3 PyCharm

推荐指数:⭐⭐⭐⭐

PyCharm Professional 版提供了完善的科学计算支持。

配置步骤:

  1. 创建新项目时选择 conda 或 venv 环境
  2. 安装 GeoPandas 及相关包
  3. 配置 Scientific Mode(科学模式)以获得更好的数据分析体验

PyCharm 优势:

  • 强大的代码补全和重构
  • 内置数据库工具(连接 PostGIS)
  • 科学模式下的变量查看器
  • 内置 Jupyter Notebook 支持

2.9.4 环境对比总结

特性 Jupyter VS Code PyCharm
交互式分析 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
代码编写 ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
调试 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
可视化 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
项目管理 ⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
免费 ✅ ✅ 社区版免费
推荐场景 数据探索 项目开发 大型项目

2.10 验证安装

安装完成后,务必验证所有组件是否正确安装。

2.10.1 版本检查

import geopandas as gpd
import pandas as pd
import numpy as np
import shapely
import pyproj
import pyogrio

print("=" * 50)
print("GeoPandas 环境信息")
print("=" * 50)
print(f"GeoPandas 版本: {gpd.__version__}")
print(f"pandas 版本:    {pd.__version__}")
print(f"numpy 版本:     {np.__version__}")
print(f"shapely 版本:   {shapely.__version__}")
print(f"pyproj 版本:    {pyproj.__version__}")
print(f"pyogrio 版本:   {pyogrio.__version__}")
print(f"GEOS 版本:      {shapely.geos_version_string}")
print(f"PROJ 版本:      {pyproj.proj_version_str}")
print(f"GDAL 版本:      {pyogrio.__gdal_version__}")

2.10.2 使用内置方法检查

GeoPandas 提供了一个方便的方法来显示所有相关版本信息:

import geopandas
geopandas.show_versions()

输出示例:

SYSTEM INFO
-----------
python     : 3.12.4
executable : /home/user/geoenv/bin/python
machine    : x86_64

GEOS, GDAL, PROJ INFO
----------------------
GEOS       : 3.12.1
GEOS lib   : /home/user/geoenv/lib/libgeos_c.so
GDAL       : 3.8.4
GDAL data dir: /home/user/geoenv/share/gdal
PROJ       : 9.3.1
PROJ data dir: /home/user/geoenv/share/proj

PYTHON DEPENDENCIES
-------------------
geopandas  : 1.1.0
numpy      : 2.1.0
pandas     : 2.2.2
pyproj     : 3.7.0
shapely    : 2.1.0
pyogrio    : 0.8.0
...

2.10.3 功能测试

运行一个简单的功能测试来确认一切正常:

import geopandas as gpd
from shapely.geometry import Point, Polygon
import pandas as pd

print("测试 1: 创建 GeoDataFrame...")
gdf = gpd.GeoDataFrame({
    '城市': ['北京', '上海', '广州', '深圳'],
    '人口_万': [2189, 2487, 1868, 1756],
    'geometry': [
        Point(116.40, 39.90),
        Point(121.47, 31.23),
        Point(113.26, 23.13),
        Point(114.06, 22.54)
    ]
}, crs="EPSG:4326")
print(f"  ✅ 创建成功,{len(gdf)} 条记录")

print("\n测试 2: CRS 转换...")
gdf_mercator = gdf.to_crs(epsg=3857)
print(f"  ✅ 转换成功,CRS: {gdf_mercator.crs.to_epsg()}")

print("\n测试 3: 缓冲区分析...")
gdf_proj = gdf.to_crs(epsg=32650)
buffered = gdf_proj.buffer(50000)  # 50公里缓冲区
print(f"  ✅ 缓冲区创建成功")

print("\n测试 4: 空间索引...")
sindex = gdf.sindex
print(f"  ✅ 空间索引创建成功")

print("\n测试 5: 空间关系...")
bbox = Polygon([(113, 22), (115, 22), (115, 24), (113, 24)])
result = gdf[gdf.within(bbox)]
print(f"  ✅ 空间查询成功,找到 {len(result)} 个城市在范围内")

print("\n测试 6: 数据导出...")
gdf.to_file("test_output.geojson", driver="GeoJSON")
gdf_read = gpd.read_file("test_output.geojson")
print(f"  ✅ GeoJSON 读写成功")

# 清理测试文件
import os
os.remove("test_output.geojson")

print("\n" + "=" * 50)
print("🎉 所有测试通过!GeoPandas 安装正确!")
print("=" * 50)

2.10.4 可选依赖检查

def check_optional_dep(name, min_version=None):
    """检查可选依赖是否安装"""
    try:
        mod = __import__(name)
        version = getattr(mod, '__version__', '未知')
        print(f"  ✅ {name:20s} {version}")
        return True
    except ImportError:
        print(f"  ❌ {name:20s} 未安装")
        return False

print("可选依赖检查:")
print("-" * 40)
check_optional_dep('matplotlib')
check_optional_dep('folium')
check_optional_dep('mapclassify')
check_optional_dep('xyzservices')
check_optional_dep('geopy')
check_optional_dep('sqlalchemy')
check_optional_dep('pyarrow')
check_optional_dep('scipy')

2.11 本章小结

本章详细介绍了 GeoPandas 的安装与环境配置:

主题 要点
系统要求 Python 3.10+,支持所有主流操作系统
pip 安装 pip install geopandas,简单但可能遇到 C 库问题
conda 安装 conda install -c conda-forge geopandas,推荐方式
源码安装 适合开发者和贡献者
核心依赖 numpy, pandas, shapely, pyproj, pyogrio, packaging
可选依赖 matplotlib, folium, mapclassify, pyarrow 等
虚拟环境 conda env 最适合 GIS 项目
问题排查 GDAL/GEOS/PROJ 问题最常见,conda 可避免
开发环境 Jupyter(分析)、VS Code/PyCharm(开发)
验证安装 geopandas.show_versions() 一键检查

安装建议总结:

推荐安装路线:
1. 安装 Miniforge(轻量级 conda 发行版)
2. 创建专用 conda 环境
3. 使用 conda-forge 安装 GeoPandas 及其依赖
4. 安装 JupyterLab 作为交互式分析环境

下一章预告:第 3 章将深入探讨 GeoPandas 的核心架构与数据模型,理解 GeoDataFrame、GeoSeries 等核心类的设计原理。


📚 参考资料