惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
博客园 - 三生石上(FineUI控件)
S
Securelist
U
Unit 42
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
B
Blog
T
Tenable Blog
The Hacker News
The Hacker News
The Register - Security
The Register - Security
IT之家
IT之家
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
P
Privacy & Cybersecurity Law Blog
博客园_首页
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
Tor Project blog
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
A
Arctic Wolf
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
V
Visual Studio Blog
月光博客
月光博客
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第七章:IO 步骤详解
我才是银古 · 2026-06-21 · via 博客园 - 我才是银古

第七章:IO 步骤详解

IO 步骤(io.*)负责地理数据的读取和写入,是每个流水线的入口和出口。GeoPipeAgent 内置 4 个 IO 步骤,支持主流矢量和栅格格式。


7.1 步骤总览

步骤 ID 名称 功能
io.read_vector 读取矢量数据 从文件读取矢量数据为 GeoDataFrame
io.write_vector 写入矢量数据 将 GeoDataFrame 写入矢量文件
io.read_raster 读取栅格数据 从文件读取栅格数据为数组+元信息
io.write_raster 写入栅格数据 将栅格数组写入 GeoTIFF

7.2 io.read_vector:读取矢量数据

参数

参数 类型 必填 默认值 说明
path string 矢量文件路径
layer string 图层名(多图层文件,如 GPKG)
encoding string utf-8 文件编码(Shapefile 中文乱码时设为 gbk

输出(StepResult)

属性 类型 说明
output GeoDataFrame 读取的矢量数据
stats.feature_count int 要素数量
stats.crs str 坐标参考系(如 "EPSG:4326"
stats.geometry_types list 几何类型列表(如 ["Polygon"]
stats.columns list 属性字段名列表

支持格式

格式 文件扩展名
GeoJSON .geojson, .json
Shapefile .shp(需配套 .dbf.shx
GeoPackage .gpkg
KML/KMZ .kml, .kmz
其他 GDAL/Fiona 支持格式 见 GDAL 文档

示例

# 基础读取
- id: load-vector
  use: io.read_vector
  params:
    path: "data/buildings.shp"

# 指定编码(中文 Shapefile)
- id: load-cn-data
  use: io.read_vector
  params:
    path: "data/roads_cn.shp"
    encoding: "gbk"

# 读取 GeoPackage 的特定图层
- id: load-layer
  use: io.read_vector
  params:
    path: "data/city.gpkg"
    layer: "buildings"

# 使用变量
- id: load-data
  use: io.read_vector
  params:
    path: "${input_path}"

常用引用

# 后续步骤引用读取结果
- id: buffer
  use: vector.buffer
  params:
    input: "$load-data"            # 引用 GeoDataFrame
    distance: 100

# 在 when 中引用统计信息
- id: check
  use: qc.geometry_validity
  params:
    input: "$load-data"
  when: "$load-data.feature_count > 0"  # 有数据时才执行检查

# 引用字段列表(用于 QC 步骤)
outputs:
  columns: "$load-data.columns"

7.3 io.write_vector:写入矢量数据

参数

参数 类型 必填 默认值 说明
input geodataframe 输入矢量数据
path string 输出文件路径
format string GeoJSON 输出格式(见下表)
encoding string utf-8 文件编码

支持的 format

format GDAL Driver 输出格式
GeoJSON GeoJSON .geojson 文件
Shapefile / shp ESRI Shapefile .shp 文件组
GPKG / GeoPackage GPKG .gpkg 文件

输出(StepResult)

属性 类型 说明
output str 输出文件路径(字符串)
stats.feature_count int 写入的要素数量
stats.output_path str 输出路径(与 output 相同)
stats.format str 实际使用的 GDAL Driver 名

示例

# 保存为 GeoJSON
- id: save-geojson
  use: io.write_vector
  params:
    input: "$buffer"
    path: "output/buffer_result.geojson"
    format: "GeoJSON"

# 保存为 Shapefile
- id: save-shapefile
  use: io.write_vector
  params:
    input: "$dissolve"
    path: "output/dissolved.shp"
    format: "Shapefile"

# 保存为 GeoPackage
- id: save-gpkg
  use: io.write_vector
  params:
    input: "$process"
    path: "output/result.gpkg"
    format: "GPKG"

# 使用变量控制格式
- id: save-result
  use: io.write_vector
  params:
    input: "$process"
    path: "${output_path}"
    format: "${output_format}"

说明

  • 自动创建目录:输出路径的父目录不存在时会自动创建(mkdir -p
  • 覆盖行为:若目标文件已存在,默认覆盖
  • write_vector 输出output 字段是字符串(文件路径),而非 GeoDataFrame。outputs 声明中引用此步骤得到的是路径字符串。

7.4 io.read_raster:读取栅格数据

参数

参数 类型 必填 默认值 说明
path string 栅格文件路径

输出(StepResult)

属性 类型 说明
output ndarray 栅格数组(shape: [bands, height, width]
metadata.transform Affine 仿射变换矩阵
metadata.crs CRS 坐标参考系
metadata.dtype str 数据类型(如 uint8float32
metadata.nodata float/None NoData 值
metadata.count int 波段数量
metadata.width int 栅格宽度(像素)
metadata.height int 栅格高度(像素)
metadata.bounds BoundingBox 地理范围

示例

# 读取 GeoTIFF
- id: load-dem
  use: io.read_raster
  params:
    path: "data/dem.tif"

# 后续步骤使用栅格数据
- id: calc-ndvi
  use: raster.calc
  params:
    input: "$load-multispectral"
    expression: "(band4 - band3) / (band4 + band3)"
    output_bands: 1

- id: get-stats
  use: raster.stats
  params:
    input: "$load-dem"

7.5 io.write_raster:写入栅格数据

参数

参数 类型 必填 默认值 说明
input ndarray 输入栅格数组
path string 输出文件路径
metadata dict 栅格元信息(包含 transform、crs、dtype 等)

说明

io.write_raster 通常与 raster.* 步骤配合使用,其中 metadata 参数需要从前置步骤获取:

- id: load-raster
  use: io.read_raster
  params:
    path: "data/dem.tif"

- id: reproject-raster
  use: raster.reproject
  params:
    input: "$load-raster"
    target_crs: "EPSG:3857"

- id: save-raster
  use: io.write_raster
  params:
    input: "$reproject-raster"          # 重投影后的数组
    path: "output/dem_3857.tif"
    metadata: "$reproject-raster.metadata"   # 新的元信息(包含更新后的 transform、crs)

7.6 IO 步骤最佳实践

6.1 始终检查 CRS

读取数据后,及时检查坐标系,避免后续分析因 CRS 不匹配而失败:

- id: load-data
  use: io.read_vector
  params: { path: "data/roads.shp" }

- id: check-crs
  use: qc.crs_check
  params:
    input: "$load-data"
    expected_crs: "EPSG:4326"
  on_error: skip

- id: reproject
  use: vector.reproject
  params:
    input: "$load-data"
    target_crs: "EPSG:3857"

6.2 先用 geopipe-agent info 了解数据

geopipe-agent info data/roads.shp
# 输出:feature_count, crs, geometry_types, columns, bounds

6.3 Shapefile 中文编码

中国区域数据常见 GBK 编码的 Shapefile:

- id: load-cn-roads
  use: io.read_vector
  params:
    path: "data/roads_china.shp"
    encoding: "gbk"              # 避免属性字段中文乱码

6.4 大文件处理建议

对于大型矢量文件,可以先用 vector.query 过滤需要的数据,减少后续处理量:

- id: load-all
  use: io.read_vector
  params: { path: "data/national_roads.shp" }

- id: filter-major
  use: vector.query
  params:
    input: "$load-all"
    expr: "road_class in ['highway', 'primary']"   # 只保留主要道路

7.7 本章小结

本章详细介绍了 4 个 IO 步骤:

  1. io.read_vector:支持 GeoJSON、Shapefile、GPKG 等格式,返回 GeoDataFrame,可查看 feature_count、crs、columns 等统计信息
  2. io.write_vector:将 GeoDataFrame 写入文件,支持 GeoJSON/Shapefile/GPKG,自动创建输出目录
  3. io.read_raster:读取 GeoTIFF 等栅格文件,返回数组+完整元信息(transform、crs、bands等)
  4. io.write_raster:将栅格数组和元信息写入 GeoTIFF

下一章将介绍矢量分析步骤,包括缓冲、裁剪、投影转换等 7 个步骤。


导航← 第六章:条件执行与错误策略第八章:矢量分析步骤 →