如何快速搭建第一个基于的流水线?
摘要:layout: default title: "第三章:快速上手第一个流水线" 第三章:快速上手第一个流水线 本章通过一个完整的实战示例,带你从零到运行第一个 GeoPipeAgent 流
第三章:快速上手第一个流水线
本章通过一个完整的实战示例,带你从零到运行第一个 GeoPipeAgent 流水线,体验 AI 生成 → 框架执行的完整闭环。
3.1 准备测试数据
首先创建工作目录和测试数据:
mkdir -p my-gis-project/data
mkdir -p my-gis-project/output
cd my-gis-project
创建一个简单的测试 GeoJSON 文件 data/roads.geojson:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {"name": "主干道", "type": "primary"},
"geometry": {
"type": "LineString",
"coordinates": [[116.3, 39.9], [116.4, 39.9], [116.5, 39.95]]
}
},
{
"type": "Feature",
"properties": {"name": "次干道", "type": "secondary"},
"geometry": {
"type": "LineString",
"coordinates": [[116.35, 39.85], [116.35, 39.95], [116.45, 39.95]]
}
}
]
}
3.2 编写第一个 YAML 流水线
在 my-gis-project/ 目录下创建流水线文件 buffer-pipeline.yaml:
pipeline:
name: "道路缓冲区分析"
description: "对道路数据做投影转换后进行缓冲区分析,将结果保存为 GeoJSON"
variables:
input_path: "data/roads.geojson"
buffer_dist: 0.01
output_path: "output/road_buffer.geojson"
steps:
- id: load-roads
use: io.read_vector
params:
path: "${input_path}"
- id: buffer-roads
use: vector.buffer
params:
input: "$load-roads"
distance: "${buffer_dist}"
cap_style: "round"
- id: save-result
use: io.write_vector
params:
input: "$buffer-roads"
path: "${output_path}"
format: "GeoJSON"
outputs:
result: "$save-result"
feature_count: "$buffer-roads.feature_count"
流水线解读
字段
说明
pipeline.name
流水线名称,出现在报告中
pipeline.variables
可复用的变量,通过 ${变量名} 引用
pipeline.steps
步骤列表,按顺序执行
id: load-roads
步骤唯一 ID,后续步骤通过 $load-roads 引用其输出
use: io.read_vector
步骤类型,格式为 类别.动作
params
步骤参数,可使用变量替换和步骤引用
$load-roads
引用 load-roads 步骤的输出(output 字段)
$buffer-roads.feature_count
引用 buffer-roads 步骤 stats 中的 feature_count 值
outputs
声明流水线的最终输出,出现在 JSON 报告的 outputs 节
关于坐标系:roads.geojson 使用 WGS84(EPSG:4326,单位为度),缓冲区距离 0.01 表示约 1 公里(纬度方向)。若需精确计量距离,应先用 vector.reproject 转换为投影坐标系(如 EPSG:3857,单位米)后再做缓冲。
3.3 执行流水线
geopipe-agent run buffer-pipeline.yaml
正常执行输出(JSON 格式):
{
"pipeline": "道路缓冲区分析",
"status": "success",
"duration": 0.312,
"steps": [
{
"id": "load-roads",
"step": "io.read_vector",
"status": "success",
"duration": 0.089,
"output_summary": {
"feature_count": 2,
"crs": "EPSG:4326",
"geometry_types": ["LineString"],
"columns": ["name", "type", "geometry"]
}
},
{
"id": "buffer-roads",
"step": "vector.buffer",
"status": "success",
"duration": 0.124,
"output_summary": {
"feature_count": 2,
"crs": "EPSG:4326",
"geometry_types": ["Polygon"],
"total_area": 0.00024578
}
},
{
"id": "save-result",
"step": "io.write_vector",
"status": "success",
"duration": 0.098,
"output_summary": {
"feature_count": 2,
"output_path": "output/road_buffer.geojson",
"format": "GeoJSON"
}
}
],
"outputs": {
"result": "output/road_buffer.geojson",
"feature_count": 2
}
}
3.4 使用 --var 覆盖变量
通过 --var 参数在命令行覆盖流水线变量,无需修改 YAML 文件:
# 使用不同的缓冲距离
geopipe-agent run buffer-pipeline.yaml --var buffer_dist=0.02
# 同时覆盖多个变量
geopipe-agent run buffer-pipeline.yaml \
--var input_path=data/highway.geojson \
--var buffer_dist=0.05 \
--var output_path=output/highway_buffer.geojson
这对批量处理多个数据文件非常方便——只需一个 YAML 文件,通过不同的 --var 参数运行多次。
3.5 流水线校验(不执行)
在正式执行之前,可以用 validate 命令检查 YAML 语法和步骤引用是否正确:
geopipe-agent validate buffer-pipeline.yaml
输出示例:
{
"status": "valid",
"pipeline": "道路缓冲区分析",
"steps_count": 3,
"steps": [
{"id": "load-roads", "use": "io.read_vector"},
{"id": "buffer-roads", "use": "vector.buffer"},
{"id": "save-result", "use": "io.write_vector"}
]
}
如果有语法错误,会看到类似这样的错误信息:
{
"status": "invalid",
"error": "PipelineParseError",
"message": "Missing 'pipeline' key at the top level. Expected: pipeline:\n name: ...\n steps: ..."
}
3.6 带投影转换的完整示例
以下是一个更真实的示例,演示先投影转换再缓冲,确保缓冲距离单位正确:
pipeline:
name: "道路 500 米缓冲区分析(精确距离)"
description: "先将 WGS84 转为 Web Mercator(米制),再做 500 米缓冲"
variables:
input_path: "data/roads.geojson"
buffer_dist_m: 500
output_path: "output/road_buffer_500m.geojson"
steps:
- id: load-roads
use: io.read_vector
params:
path: "${input_path}"
- id: reproject-to-mercator
use: vector.reproject
params:
input: "$load-roads"
target_crs: "EPSG:3857"
- id: buffer-500m
use: vector.buffer
params:
input: "$reproject-to-mercator"
distance: "${buffer_dist_m}"
cap_style: "round"
- id: reproject-back
use: vector.reproject
params:
input: "$buffer-500m"
target_crs: "EPSG:4326"
- id: save-result
use: io.write_vector
params:
input: "$reproject-back"
path: "${output_path}"
format: "GeoJSON"
outputs:
result: "$save-result"
3.7 调试模式
如果流水线执行失败或结果不符合预期,使用调试模式查看详细日志:
# 显示 DEBUG 级别日志
geopipe-agent run buffer-pipeline.yaml --log-level DEBUG
# 使用 JSON 格式日志(便于机器解析)
geopipe-agent run buffer-pipeline.yaml --json-log
3.8 查看 GIS 文件信息
在编写流水线之前,可以用 info 命令快速了解数据文件的基本信息:
geopipe-agent info data/roads.geojson
输出:
{
"path": "data/roads.geojson",
"format": "vector",
"feature_count": 2,
"crs": "EPSG:4326",
"geometry_types": ["LineString"],
"columns": ["name", "type", "geometry"],
"bounds": [116.3, 39.85, 116.5, 39.95]
}
这对确定坐标系(决定缓冲距离单位)和了解属性字段非常有帮助。
3.9 快速 Cookbook 体验
GeoPipeAgent 自带 7 个即用型流水线示例(cookbook/ 目录),可以直接运行:
# 克隆仓库后
geopipe-agent run cookbook/buffer-analysis.yaml
geopipe-agent run cookbook/vector-qc.yaml
geopipe-agent run cookbook/overlay-analysis.yaml
这些示例涵盖了最常见的 GIS 工作流,是学习框架的最佳起点。
3.10 本章小结
本章完整演示了 GeoPipeAgent 的基本使用流程:
准备数据:GeoJSON、Shapefile 等格式均可直接使用
编写 YAML:在 pipeline: 下定义 variables、steps、outputs
执行流水线:geopipe-agent run <file> 一键执行,输出 JSON 报告
覆盖变量:--var key=value 在运行时动态修改参数
校验流水线:geopipe-agent validate <file> 在执行前检查语法
查看文件信息:geopipe-agent info <file> 了解数据基本情况
下一章将深入解析 YAML 流水线格式的每一个字段和规则。
导航:← 第二章:安装与环境配置 | 第四章:YAML 流水线格式 →
