当前位置: 首页 > 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相关知识技能分享,免费提供学习问答交流。

在这里插入图片描述

相关文章:

  • Nat Rev Genet | 如果DNA序列能“说话”?深度学习S2E(序列2表达)模型正在听懂基因组的调控秘密!
  • 数字图像处理:基于 hough 变换的图像边缘提取
  • iOS知识复习
  • vue3+ts 安装tailwindcss样式库
  • uniapp判断ios或Android定位是否开启并跳转到系统设置
  • 白皮精读:2024年国家数据基础设施建设指引【附全文阅读】
  • BSDIFF算法详解
  • winsever2016Web服务器平台安装与配置
  • 道德经总结
  • 配置文件,xml,json,yaml,我该选哪个?
  • 【RabbitMQ运维】集群搭建
  • 基于ZYNQ的LWIP网络TCP/IP调试
  • leetcode 两两交换链表中的节点 java
  • 深度学习——超参数调优
  • 在Rockchip平台上利用FFmpeg实现硬件解码与缩放并导出Python接口
  • BLIP3-o:理解和生成统一的多模态模型
  • 力扣 283.移动零 (双指针)
  • 怎么开发一个网络协议模块(C语言框架)之(三) 全局实例
  • 计算机网络期末复习资料
  • 《Java vs Go vs C++ vs C:四门编程语言的深度对比》
  • 推广做网站/网站规划
  • 网站建设方案书 广东/怎么制作网站平台
  • c 做网站方便吗/搜索引擎优化课程总结
  • 行政还要负责网站建设新媒体吗/线上渠道推广有哪些方式
  • 怎么做祝福的网站/外贸网络营销
  • 做网站系统学校/seo是什么职务