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.pswp.cn/web/81090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81090.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線性回歸原理推導與應用(七):邏輯回歸原理與公式推導

邏輯回歸是一種分類算法,常用于二分類,也就是得出的結果為是和不是,例如通過各種因素判斷一個人是否生病,信用卡是否違約等。邏輯回歸在社會和自然科學中應用非常廣泛, 前置知識 線性回歸 邏輯回歸的底層方法就是線…

Fastrace:Rust 中分布式追蹤的現代化方案

原文鏈接:Fastrace: A Modern Approach to Distributed Tracing in Rust | FastLabs / Blog 摘要 在微服務架構中,分布式追蹤對于理解應用程序的行為至關重要。雖然 tokio-rs/tracing 在 Rust 中被廣泛使用,但它存在一些顯著的挑戰&#xf…

水果系列數據集- 葡萄grapes>> DataBall

該數據集可以用于目標檢測,水果分類 ,文生圖相關項目。 以下是圖片樣例:

HTTP協議接口三種測試方法之-postman

HTTP協議作為現代Web開發的基石,其接口測試是開發過程中不可或缺的環節。Postman作為最流行的API測試工具之一,能夠極大提升我們的測試效率。本文將詳細介紹如何使用Postman進行HTTP接口測試。 一、HTTP協議基礎回顧 在開始使用Postman之前&#xff0c…

佰力博科技與您探討半導體電阻測試常用的一些方法

一、兩探針法? 兩探針法是一種較為基礎的測試方法。該方法將兩根探針與半導體樣品表面緊密接觸,通過電源在兩根探針之間施加電壓,同時使用電流表測量通過樣品的電流,再根據歐姆定律計算電阻。?這種方法的優點在于操作簡單、設備要求較低&a…

機器學習的一些基本概念

看了b站一個清華博士的視頻做的筆記,對于人工智能的底層原理,訓練方式,以及生成式文本輸出,圖片生成的底層原理有了一個了解,算是一個還不錯的科普文。之前一直想要了解一下機器學習的入門原理,神經網絡相關…

Python爬蟲實戰:研究Grab 框架相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網的快速發展,網絡上的數據量呈爆炸式增長。如何高效地獲取和利用這些數據成為了當前的研究熱點。網絡爬蟲作為一種自動獲取網頁內容的技術,能夠按照一定的規則,自動地抓取萬維網信息,在搜索引擎、數據挖掘、信息整合等領域有著廣泛的…

uniapp 嵌入鴻蒙原生組件 具體步驟

關于怎么使用uniapp 嵌入鴻蒙原生組件 HBuilder X 版本 4.64 app-harmony文件下新建 index.uts button.ets button.ets里面復制uniapp 官方提供的 示例代碼 https://uniapp.dcloud.net.cn/tutorial/harmony/native-component.html button.ets import { NativeEmbedBuilderO…

阿里云 OS Copilot 使用指南

安裝: AlibabaCloudLinux: sudo yum install -y os-copilotUbuntu: curl -#S https://mirrors.aliyun.com/os-copilot/os-copilot-all-in-one-latest.sh | bash添加RAM用戶 打開 https://ram.console.aliyun.com/users 復制AccessKey,Ac…

枚舉類擴充處理

問題背景 由于 Java 不允許枚舉繼承另一個枚舉(enum cannot extend enum),但可以通過 組合方式 或 工具類 來實現類似功能。 ? 解決方案一:組合方式引入原始枚舉值 示例代碼: public enum CustomErrorCodeEnum imp…

Spring Security探索與應用

Spring Security核心概念 框架定位與核心能力 Spring Security是Spring生態中實現應用級安全的核心框架,其官方定義為"強大且高度可定制的認證與訪問控制框架"。作為Spring應用程序安全防護的事實標準解決方案,它通過模塊化設計提供以下核心能力: 認證(Authenti…

藍橋杯國14 不完整的算式

!!!!!!!!!!!!!!!理清思路 然后一步步寫 問題描述 小藍在黑板上寫了一個形如 AopBC 的算式&#x…

掃描電鏡:打開微觀世界的“超維相機“

當你用手機拍攝一朵花的微距照片時,放大100倍已足夠驚艷。但如果告訴你,科學家手中的"相機"能將物體放大百萬倍,連病毒表面的蛋白突觸都清晰可見,你是否會好奇這背后的黑科技?這把打開微觀宇宙的鑰匙&#x…

JVM學習(四)--對象內存布局

目錄 一、對象內存布局 1、對象的實例化 1.1、你有幾種方式創建對象? 1.2、創建對象的步驟 1.2.1、從字節碼角度看待對象創建過程 1.2.2、從執行步驟角度分析 2、對象的內存布局 2.1、對象頭 2.2、實例數據 2.3、對齊填充 3、對象的訪問定位 3.1、句柄訪…

SQL每日一題(4)

前言:第四更 雖然已經全部做完了,這套卷子非常推薦! 根據題目還原出來的原始表 employees表 idnameagestatus1張三28在崗2李四35在崗3王五42在崗4趙六NULL在崗5錢七58在崗6孫八24在崗7周九31離職8吳十-5在崗9鄭十一45在崗10王十二52在崗 題…

如何做好一份技術文檔?

文章目錄 前言一、技術文檔的核心原則二、技術文檔的類型與場景三、技術文檔的寫作流程3.1 需求分析階段(文檔生產的基礎)3.2 架構設計階段(文檔的骨架搭建)3.3 內容開發階段(血肉填充)3.4 質量保障階段&am…

怎么判斷一個Android APP使用了KMM這個跨端框架

要判斷一個 Android 應用是否使用了 KMM(Kotlin Multiplatform Mobile) 框架,可以通過以下方法逐步驗證: 一、安裝包結構分析 解壓 APK 將 .apk 文件重命名為 .zip 并解壓,檢查以下特征: ? kotlin/ 目錄&a…

Axure系統原型設計列表版方案

列表頁面是眾多系統的核心組成部分,承擔著數據呈現與基礎交互的重要任務。一個優秀的列表版設計,能夠極大提升用戶獲取信息的效率,優化操作體驗。下面,我們將結合一系列精心設計的列表版方案圖片,深入探討如何打造出實…

HarmonyOS優化應用內存占用問題性能優化四

一、使用purgeable優化C內存 Purgeable Memory是HarmonyOS中native層常用的內存管理機制,可用于圖像處理的Bitmap、流媒體應用的一次性數據、圖片等。應用可以使用Purgeable Memory存放其內部的緩存數據,并由系統根據淘汰策略統一管理全部的purgeable內存…

第一課如何學習課程

讀薄就這些東西 讀厚細節;實現了還是很混沌(內功心法)-》有個項目;在聽的過程中寫博客:我學了什么,敲代碼; 第二章 網絡-》9.1kv存儲 第三章 基礎組件 (API函數、最基礎的底層架構…