The interface is localized. Skill descriptions and documents are machine-translated by AI into your language; code, commands, paths and technical terms stay in the original, and the author's document governs.
Explore skills
Data & research · SKILL.md

geopipe-agent

geopipe-agent

Use when building AI-driven GIS data pipelines with YAML-defined steps — format conversion, spatial validation, QC reporting, PostGIS loading, WMS publishing. GeoPipe Agent: YAML-driven GIS ETL pipeline agent with quality control.

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill documentation

GitHub

name: geopipe-agent description: "Use when building AI-driven GIS data pipelines with YAML-defined steps — format conversion, spatial validation, QC reporting, PostGIS loading, WMS publishing. GeoPipe Agent: YAML-driven GIS ETL pipeline agent with quality control." tags:

  • gis
  • agent
  • pipeline
  • yaml
  • qc
  • spatial-analysis
  • vector
  • raster
  • geoprocessing
  • python

项目地址: https://github.com/znlgis/GeoPipeAgent(发布包名 geopipe-agent,截至 2026 年尚未上传 PyPI,需从源码安装)

许可证: MIT

概述

GeoPipeAgent 是一个 AI 原生的 GIS 分析流水线引擎。核心理念是:你(AI)生成 YAML 管道配置,框架负责执行并返回结构化结果。

核心能力:

  • 声明式流水线:YAML 定义分析步骤,AI 友好
  • 丰富步骤库:矢量分析、栅格分析、网络分析、空间聚类、数据质检
  • 多后端支持:native_python(基于 geopandas/shapely/rasterio)和 qgis_process
  • 质检框架:10 种 QC 检查,支持错误/警告/信息三级
  • 结构化报告:JSON 输出,含统计信息和 QC 汇总
  • 步骤引用:$step_id.output 语法实现步骤间数据传递

快速开始

安装

git clone https://github.com/znlgis/GeoPipeAgent.git
cd GeoPipeAgent
pip install -e ".[analysis,network]"   # 按需启用分析/网络分析可选依赖

基本用法

# 列出所有可用步骤(可按类别过滤)
geopipe-agent list-steps --category qc

# 查看步骤详情
geopipe-agent describe vector.buffer

# 校验 YAML 流水线(不执行)
geopipe-agent validate pipeline.yaml

# 执行流水线
geopipe-agent run pipeline.yaml

# 查看可用后端
geopipe-agent backends

最小示例

pipeline:
  name: "快速缓冲区"
  steps:
    - id: read
      use: io.read_vector
      params:
        path: "data/roads.shp"
    - id: buffer
      use: vector.buffer
      params:
        input: "$read"
        distance: 500
    - id: save
      use: io.write_vector
      params:
        input: "$buffer"
        path: "output/result.geojson"
  outputs:
    result: "$save"

核心概念

步骤引用语法

语法说明示例
$step_id等同于 $step_id.output$buffer
$step_id.output引用步骤输出$buffer.output
$step_id.stats引用步骤统计信息$buffer.stats
$step_id.issues引用 QC 步骤问题列表$check.issues
$step_id.issues_countQC 问题数量$check.issues_count
${var_name}变量替换${input_path}

条件执行 (when)

- id: fix-geometries
  use: qc.geometry_validity
  params:
    input: "$data"
    auto_fix: true
  when: "$check.issues_count > 0"

支持比较运算符(==, !=, >, <, >=, <=)、布尔运算符(and, or, not)。

错误处理 (on_error)

值行为
fail(默认)停止管道执行
skip跳过当前步骤,继续下一步
retry重试最多 3 次(带退避)

步骤分类

IO 步骤(io.*)

步骤说明关键参数
io.read_vector读取矢量数据(SHP/GeoJSON/GPKG)path, layer, encoding
io.read_raster读取栅格数据(GeoTIFF 等)path
io.write_vector写入矢量数据input, path, format, encoding
io.write_raster写入栅格数据input, path

矢量分析步骤(vector.*)

步骤说明关键参数后端
vector.buffer缓冲区分析input, distance, cap_stylenative_python, qgis_process
vector.clip矢量裁剪input, clip_geometrynative_python, qgis_process
vector.reproject投影转换input, target_crsnative_python, qgis_process
vector.dissolve按字段融合input, by, aggfuncnative_python
vector.overlay叠加分析input, overlay_layer, hownative_python
vector.query属性查询input, expression—
vector.simplify几何简化input, tolerance, preserve_topologynative_python

叠加方式 (vector.overlay 的 how 参数):intersection、union、difference、symmetric_difference、identity

栅格分析步骤(raster.*)

步骤说明关键参数
raster.reproject栅格投影转换input, target_crs, resampling
raster.clip栅格裁剪input, mask, crop, nodata
raster.calc栅格波段计算input, expression(如 '(B4-B3)/(B4+B3)')
raster.contour等值线提取input, interval, band, base
raster.stats栅格统计input, band

重采样方法 (raster.reproject 的 resampling):nearest、bilinear、cubic、lanczos

高级分析步骤(analysis.*)

步骤说明关键参数
analysis.voronoi泰森多边形input, envelope
analysis.heatmap热力图(KDE)input, resolution, bandwidth
analysis.interpolate空间插值input, value_field, method, resolution
analysis.cluster空间聚类input, method(dbscan/kmeans), eps, n_clusters

插值方法 (analysis.interpolate 的 method):linear、nearest、cubic、idw

网络分析步骤(network.*)

步骤说明关键参数
network.shortest_path最短路径input, origin, destination, weight
network.service_area服务区分析input, center, cost_limit, weight
network.geocode地理编码addresses, provider, user_agent

质检步骤(qc.*)

QC 步骤遵循 「检查即透传」 模式:输入数据原样通过为 output,问题单独收集在 $step.issues 和 $step.issues_gdf 中。

步骤检查内容关键参数
qc.geometry_validity几何有效性(自相交、空几何等)input, auto_fix, severity
qc.topology拓扑关系(重叠、缝隙、悬挂线)input, rules, tolerance, severity
qc.attribute_completeness必填字段完整性input, required_fields, allow_empty, severity
qc.attribute_domain属性值域合规性input, field, allowed_values, pattern, severity
qc.value_range数值字段范围input, field, min, max, severity
qc.duplicate_check重复要素检测input, check_geometry, check_fields, tolerance, severity
qc.crs_check坐标参考系验证input, expected_crs, severity
qc.raster_nodataNoData 一致性input, expected_nodata, max_nodata_ratio, severity
qc.raster_value_range栅格值域检查input, min, max, band, severity
qc.raster_resolution分辨率一致性input, expected_x, expected_y, tolerance, severity

严重级别 (severity):error、warning、info

拓扑规则 (qc.topology 的 rules):no_overlaps、no_gaps、no_dangles


典型工作流

工作流 1:数据质检 + 修复流水线

pipeline:
  name: "数据质检修复"
  steps:
    - id: read
      use: io.read_vector
      params:
        path: "data/buildings.shp"

    # 第一步:检查几何有效性
    - id: check_valid
      use: qc.geometry_validity
      params:
        input: "$read"
        severity: error

    # 第二步:条件修复(仅当发现问题时执行)
    - id: fix_valid
      use: qc.geometry_validity
      params:
        input: "$check_valid"
        auto_fix: true
      when: "$check_valid.issues_count > 0"

    # 第三步:属性完整性检查
    - id: check_attr
      use: qc.attribute_completeness
      params:
        input: "$fix_valid"
        required_fields: ["name", "height", "type"]
        severity: warning

    # 第四步:写入结果
    - id: save
      use: io.write_vector
      params:
        input: "$check_attr"
        path: "output/buildings_checked.gpkg"
        format: GPKG

  outputs:
    result: "$save"
    issues: "$check_attr.issues"

工作流 2:缓冲区 + 叠加分析

pipeline:
  name: "道路影响范围分析"
  steps:
    - id: roads
      use: io.read_vector
      params:
        path: "data/roads.shp"
    - id: parcels
      use: io.read_vector
      params:
        path: "data/parcels.shp"

    # 500 米道路缓冲区
    - id: buffer
      use: vector.buffer
      params:
        input: "$roads"
        distance: 500

    # 缓冲区与地块求交集
    - id: overlay
      use: vector.overlay
      params:
        input: "$parcels"
        overlay_layer: "$buffer"
        how: intersection

    - id: save
      use: io.write_vector
      params:
        input: "$overlay"
        path: "output/affected_parcels.geojson"

  outputs:
    result: "$save"

工作流 3:DEM 分析 + 等值线

pipeline:
  name: "DEM 地形分析"
  steps:
    - id: read_dem
      use: io.read_raster
      params:
        path: "data/dem.tif"

    # 栅格 QC:检查 NoData 和分辨率
    - id: check_nodata
      use: qc.raster_nodata
      params:
        input: "$read_dem"
        max_nodata_ratio: 0.1

    - id: check_resolution
      use: qc.raster_resolution
      params:
        input: "$check_nodata"
        expected_x: 30
        expected_y: 30

    # 生成等高线(50 米间距)
    - id: contour
      use: raster.contour
      params:
        input: "$check_resolution"
        interval: 50

    # 输出矢量等值线
    - id: save_contour
      use: io.write_vector
      params:
        input: "$contour"
        path: "output/contours_50m.gpkg"
        format: GPKG

  outputs:
    contour: "$save_contour"

工作流 4:网络分析

pipeline:
  name: "紧急响应路径分析"
  steps:
    - id: roads
      use: io.read_vector
      params:
        path: "data/road_network.shp"

    # 最短路径
    - id: route
      use: network.shortest_path
      params:
        input: "$roads"
        origin: [116.3, 39.9]
        destination: [116.5, 40.0]

    # 服务区(5000 米)
    - id: service
      use: network.service_area
      params:
        input: "$roads"
        center: [116.4, 39.95]
        cost_limit: 5000

    - id: save_route
      use: io.write_vector
      params:
        input: "$route"
        path: "output/route.geojson"

    - id: save_service
      use: io.write_vector
      params:
        input: "$service"
        path: "output/service_area.geojson"

  outputs:
    route: "$save_route"
    service_area: "$save_service"

工作流 5:空间聚类 + 热力图

pipeline:
  name: "犯罪热点分析"
  steps:
    - id: points
      use: io.read_vector
      params:
        path: "data/crime_points.shp"

    # DBSCAN 聚类
    - id: cluster
      use: analysis.cluster
      params:
        input: "$points"
        method: dbscan
        eps: 0.01
        min_samples: 3

    # 热力图
    - id: heatmap
      use: analysis.heatmap
      params:
        input: "$points"
        resolution: 200

    - id: save_clusters
      use: io.write_vector
      params:
        input: "$cluster"
        path: "output/clusters.geojson"

    - id: save_heatmap
      use: io.write_raster
      params:
        input: "$heatmap"
        path: "output/heatmap.tif"

  outputs:
    clusters: "$save_clusters"
    heatmap: "$save_heatmap"

AI 使用建议

推荐工作流

  1. 理解需求:用户要做什么 GIS 分析?
  2. 列出可用步骤:geopipe-agent list-steps 或查阅步骤表
  3. 编写 YAML:按 io.read → analysis → io.write 模式编排
  4. 加入 QC:在关键步骤前后插入质检步骤
  5. 执行:geopipe-agent run pipeline.yaml
  6. 解读结果:检查 JSON 报告中的 qc_summary 和统计信息

关键注意事项

  • 步骤 ID 规则:只能用小写字母、数字、下划线和连字符,不能含点号(. 保留用于属性引用)
  • 引用链完整性:确保每个 $step_id 引用的步骤在当前步骤之前定义
  • QC 链式调用:QC 步骤可串联(qc.check1 → qc.check2 → qc.check3),问题汇总到管道报告的 qc_summary 中
  • 后端选择:简单分析用 native_python(无外部依赖),复杂分析使用 qgis_process 后端
  • 路径使用绝对路径:避免工作目录问题
  • 大数据注意:管道在内存中运行,超大栅格建议先裁剪

与其它工具对比

工具适用场景GeoPipeAgent 优势
GDAL CLI手动命令行操作AI 可编程,结构化输出
qgis_process复杂空间分析多步流水线编排,条件执行
PyQGIS 脚本Python 编程声明式配置,无需写 Python
Python 脚本自定义分析模板化,AI 直接生成配置

常见问题

问题解决
步骤引用解析失败检查步骤 ID 是否含点号,引用目标是否在当前步骤之前定义
管线执行超时对大范围栅格先裁剪,减少数据量
QC 步骤无输出QC 步骤透传输入数据,问题在 $step.issues 中,output 即输入
条件步骤未触发检查 when 表达式语法,确保引用的 $step.attr 存在
后端不兼容native_python 和 qgis_process 后端参数可能不同,查阅 list-steps 确认

相关技能

参考资源

Saved skills