znlgis 博客

GIS开发与技术分享

第2章:安装与环境配置

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


2.1 系统要求

2.1.1 Python 版本要求

GeoPandas 1.x 版本要求 Python 3.10 或更高版本

GeoPandas 版本 最低 Python 版本 推荐 Python 版本
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 及其所有核心依赖。

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(gpd.datasets.get_path('naturalearth_lowres'))

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

2.5.4 shapely (>= 2.1)

Shapely 是 GeoPandas 几何操作的核心引擎。GeoPandas 1.x 要求 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(gpd.datasets.get_path('naturalearth_lowres'))
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 等核心类的设计原理。


📚 参考资料