第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 安装时需要注意以下几点:
-
C 库依赖:GeoPandas 的部分依赖(如 GDAL、GEOS、PROJ)是 C/C++ 库。pip 安装时通常会下载预编译的二进制轮子包(wheel),但在某些平台上可能需要从源码编译。
- 预编译支持:
- Windows、macOS、Linux 的主流架构通常有预编译包
- 较新的 Python 版本在刚发布时可能暂时没有预编译包
- 建议:如果 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 版提供了完善的科学计算支持。
配置步骤:
- 创建新项目时选择 conda 或 venv 环境
- 安装 GeoPandas 及相关包
- 配置 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 等核心类的设计原理。
📚 参考资料