geo_tools
专业地理信息数据处理工具库 —— 基于 geopandas / shapely / fiona
功能特性
- 统一 IO 接口:一行代码读写 Shapefile、GeoJSON、GeoPackage、File Geodatabase (GDB)、KML、CSV 等格式
- 核心几何运算:基于 Shapely 2.x 的缓冲区、集合运算、有效性检查与自动修复
- 坐标系处理:重投影、CRS 信息查询、批量坐标转换,内置中国常用 CRS 常量
- 空间分析:叠置分析、最近邻、按位置选择、面积加权均值、属性统计汇总
- 配置驱动:通过
.env或环境变量控制输出路径、日志级别、默认 CRS 等 - 栅格预留接口:为 rasterio 集成预留扩展点
项目结构
geo_tools/
├── geo_tools/ # 主包
│ ├── config/ # Pydantic BaseSettings 全局配置
│ ├── core/ # 核心处理(vector / geometry / projection / raster)
│ ├── io/ # 数据读写(readers / writers,含 GDB)
│ ├── analysis/ # 空间分析(spatial_ops / stats)
│ └── utils/ # 通用工具(logger / validators / config)
├── scripts/ # 独立处理脚本
├── tests/ # pytest 测试套件
├── data/sample/ # 示例数据(GeoJSON)
├── output/ # 处理结果输出目录
├── logs/ # 日志文件目录
├── docs/ # 文档
└── pyproject.toml # 项目配置与依赖
快速开始
安装依赖
# 推荐使用 conda 安装地理库(避免 GDAL 编译问题)
conda install -c conda-forge geopandas shapely fiona pyproj
# 然后安装本项目(开发模式)
pip install -e ".[dev]"
基本使用
import geo_tools
# 读取矢量数据(自动识别格式)
gdf = geo_tools.read_vector("data/sample/sample_points.geojson")
# 读写 File Geodatabase
layers = geo_tools.list_gdb_layers("path/to/data.gdb")
gdf = geo_tools.read_gdb("path/to/data.gdb", layer="my_layer")
geo_tools.write_gdb(gdf, "output/result.gdb", layer="result")
# 坐标系转换
gdf_proj = geo_tools.reproject(gdf, "EPSG:3857")
# 缓冲区分析
from geo_tools.core.geometry import buffer_geometry
buffered_geom = buffer_geometry(gdf.geometry[0], distance=1000)
# 空间叠置
from geo_tools.analysis.spatial_ops import overlay
result = geo_tools.overlay(layer_a, layer_b, how="intersection")
# 面积加权均值
from geo_tools.analysis.stats import area_weighted_mean
result = area_weighted_mean(polygon_gdf, value_col="soil_ph", group_col="region")
配置
复制 .env.example 为 .env 并按需修改:
GEO_TOOLS_OUTPUT_DIR=D:/output
GEO_TOOLS_DEFAULT_CRS=EPSG:4490
GEO_TOOLS_LOG_LEVEL=DEBUG
运行测试
# 运行全部测试
pytest tests/ -v
# 运行带覆盖率报告
pytest tests/ -v --cov=geo_tools --cov-report=html
运行示例脚本
python scripts/example_workflow.py
GDB 支持说明
本项目通过 fiona>=1.9 的 OpenFileGDB 驱动读写 Esri File Geodatabase(.gdb)。
| 操作 | 驱动 | 要求 |
|---|---|---|
| 读取 GDB | OpenFileGDB |
fiona >= 1.9(内置) |
| 写出 GDB | OpenFileGDB |
fiona >= 1.9(内置) |
| 编辑 GDB(高级) | FileGDB |
需要 ESRI FileGDB API |
# 列出所有图层
layers = geo_tools.list_gdb_layers("data.gdb")
# 读取指定图层
gdf = geo_tools.read_gdb("data.gdb", layer="土地利用", crs="EPSG:4490")
# 写出到 GDB(新建或追加图层)
geo_tools.write_gdb(result_gdf, "output.gdb", layer="分析结果", mode="w")
许可证
MIT License
Description
Languages
Python
100%