当前位置: 首页 > news >正文

PostGIS实现栅格数据转二进制应用实践【ST_AsBinary】

ST_AsBinary解析与应用实践(同ST_AsWKB)

  • 一、函数概述
  • 二、核心参数解析
  • 三、典型用法示例
  • 四、Out-DB 波段处理机制
  • 五、二进制格式与其他格式的转换
  • 六、性能与存储优化
  • 七、应用场景
  • 八、注意事项
  • 九、扩展应用:基于Python Web的栅格二进制数据的网络传输
  • 十、总结

一、函数概述

ST_AsBinary和ST_AsWKB是 PostGIS 中用于将栅格数据(raster)转换为二进制格式的工具函数,主要用于:

  • 高效存储与传输栅格数据(避免文本格式的冗余)。
  • 支持二进制游标(Binary Cursor)从数据库中提取数据。
  • 兼容 OGC 标准的栅格二进制表示,便于与其他 GIS 系统交互。

两者本质功能相同,ST_AsWKB是ST_AsBinary的别名,均遵循 PostGIS 自定义的栅格 WKB(Well-Known Binary)格式规范。

二、核心参数解析

bytea ST_AsBinary(raster rast,                -- 输入栅格boolean outasin = FALSE     -- 控制外存波段处理方式
);

参数说明:

1. outasin 参数:

  • FALSE(默认):外存波段(Out-DB Bands)在二进制中存储文件路径。
  • TRUE:外存波段数据直接嵌入二进制中(类似内存波段),避免客户端访问文件路径权限问题。

2. 二进制格式规范:

  • PostGIS 栅格 WKB 格式遵循RFC2 规范,主要包含:

    • 栅格元数据(宽度、高度、波段数等)。
    • 每个波段的像素数据(按波段顺序存储)。
    • 空间参考信息(SRID、仿射变换参数)。

三、典型用法示例

示例 1:导出栅格为二进制数据(内存波段)

-- 将栅格转换为二进制,用于二进制流传输
SELECT ST_AsBinary(rast) AS raster_binary
FROM satellite_raster
WHERE acquisition_date = '2023-07-15' AND band_id = 1;

应用:通过网络接口传输栅格数据时,二进制格式比其他格式(如 GeoTIFF)更高效。

示例 2:处理外存波段

-- 外存波段栅格转换为自包含二进制
SELECT ST_AsBinary(rast := dem_rast,outasin := TRUE  -- 嵌入外存波段数据
) AS self_contained_binary
FROM raster_catalog
WHERE storage_type = 'out-db';

场景:当客户端无法访问服务器文件系统时,确保栅格数据完整传输。

示例 3:二进制数据导入与验证

-- 从二进制还原栅格并验证元数据
WITH binary_data AS (SELECT ST_AsBinary(rast) AS bin FROM dummy_rast WHERE rid = 1
),
restored_rast AS (SELECT ST_FromWKB(bin) AS rast FROM binary_data
)
SELECT ST_Width(rast) AS width,ST_Height(rast) AS height,ST_NumBands(rast) AS band_count
FROM restored_rast;

输出:验证还原栅格的元数据与原始栅格一致,确保二进制转换无损失。

四、Out-DB 波段处理机制

1. Out-DB 存储模式:

  • 栅格像素数据存储在文件系统,数据库仅记录文件路径(如/path/to/raster_123.dat)。
  • 优点:减少数据库体积,适合大尺寸栅格。

2. outasin=TRUE 的影响:

  • 强制将 Out-DB 波段的像素数据读取并嵌入二进制中,转换为 In-DB 存储模式(临时)。
  • 注意:可能导致二进制数据量大幅增加(如 1GB 栅格文件嵌入后二进制大小约 1GB)。

五、二进制格式与其他格式的转换

1. 二进制→栅格对象:

  • 使用ST_FromWKB(bytea)或ST_FromBinary(bytea)还原栅格:
SELECT ST_FromWKB(raster_binary) AS restored_rast
FROM binary_storage;

2. 与 GDAL 格式互转:

  • 先转换为二进制,再通过ST_AsGDALRaster导出为其他格式:
SELECT ST_AsGDALRaster(ST_FromWKB(raster_binary), 'GTiff') AS tiff_data
FROM binary_table;

六、性能与存储优化

1. 二进制传输效率:

  • 相比文本格式,二进制格式传输速度提升约 30-50%,存储空间减少约 40%。

2. Out-DB 波段策略:

  • 若客户端可访问服务器文件系统,保持outasin=FALSE(仅存储路径,传输效率更高)。
  • 若需跨服务器传输,使用outasin=TRUE确保数据自包含。

3. 大栅格处理:

  • 对大尺寸栅格(如 10GB+),建议分块转换(ST_Tile)后再二进制化,避免内存溢出。

七、应用场景

1. 数据库备份与恢复:

  • 二进制格式用于栅格数据的高效备份,减少存储空间和恢复时间。

2. 实时数据传输:

  • 遥感卫星数据实时入库时,通过二进制流快速写入数据库。

3. 跨平台数据交换:

  • 与非 PostGIS 系统(如 ArcGIS、QGIS)交换栅格数据时,使用标准 WKB 格式。

4. 二进制缓存:

  • 将频繁访问的栅格数据缓存为二进制,加速后续查询。

八、注意事项

1. 权限问题:

  • outasin=FALSE时,客户端需有服务器文件系统的读取权限,否则无法解析 Out-DB 波段。

2. 数据一致性:

  • 若 Out-DB 波段文件被删除或移动,outasin=FALSE的二进制数据将无法还原。

3. 版本兼容性:

  • PostGIS 栅格 WKB 格式可能随版本更新,建议使用ST_Version()确认兼容性。

4. 二进制解析:

  • 自定义程序解析栅格 WKB 时,需严格遵循RFC2 规范,注意字节序(大端 / 小端)。

九、扩展应用:基于Python Web的栅格二进制数据的网络传输

… …

全部文章内容请转【PostGIS专栏】,原创不易,求关注支持,更多开源GIS相关知识技能分享,免费提供学习问答交流。

在这里插入图片描述

http://www.xdnf.cn/news/621631.html

相关文章:

  • 【esp32 WIFI连接】-STA模式
  • rce命令执行原理及靶场实战(详细)
  • Vue项目前后端交互大量数据的-之-前端优化方案
  • 前端流行框架Vue3教程:25. 组件保持存活
  • 湖北理元理律师事务所债务优化方案解析:如何科学规划还款保障生活质量
  • 0304考试通过-逻辑回归实战-机器学习-人工智能
  • Symbol、Set 与 Map:新数据结构探秘
  • uniapp-商城-66-shop(2-品牌信息显示,数据库读取的异步操作 放到vuex actions)
  • Perl单元测试实战指南:从Test::Class入门到精通的完整方案
  • Linux系统管理与编程23:巧用git资源一键部署LAMP
  • ShenNiusModularity项目源码学习(29:ShenNius.Admin.Mvc项目分析-14)
  • React整合【ECharts】教程001:柱状图的构建和基本设置
  • 【Python 中 lambda、map、filter 和 reduce】详细功能介绍及用法总结
  • Java三十而立:Java 的30岁与Spring AI 1.0正式发布
  • STC89C52RC/LE52RC
  • 嵌入式Openharmony系统应用开发与实现方法
  • (已开源-CVPR2024) RadarDistill---NuScenes数据集Radar检测第一名
  • TypeScript 和 JavaScript核心关系及区别
  • 最大似然估计(Maximum Likelihood Estimation, MLE)详解
  • 机器学习课程设计报告 —— 基于二分类的岩石与金属识别模型
  • PHP SPL 自动加载机制详解与实战应用:spl_autoload_register 使用指南
  • BLIP论文笔记
  • 使用 CodeBuddy 实现视频合并工具:解决本地视频处理痛点
  • 【RabbitMQ运维】集群搭建
  • 【强化学习】#7 基于表格型方法的规划和学习
  • 力扣 283.移动零 (双指针)
  • SQL语句的执行流程
  • C++搜索二叉树
  • Java语言快速排序和堆排序(优先队列)介绍,附demo代码
  • C# 深入理解类(析构函数和this关键字)