banner
陈不易

陈不易

没有技术想聊生活
twitter
medium
tg_channel

Cloud Optimized GeoTIFF (COG) 概述|簡介

概述#

Cloud Optimized GeoTIFF (COG) 依賴兩種輔助技術。

  • 第一種是 GeoTiff 的存儲能力:用特殊方式存儲像素,而不僅僅是將未處理的像素直接存儲起來。

  • 第二種是 HTTP Get 支持的範圍請求,這種能力可以讓 client 只請求文件中需要的那部分。

    前者的 GeoTIFF 存儲方式,使後者的請求能方便的獲取文件中需要被處理的那部分數據。

GeoTIFF 的組織方式#

COG 使用的兩種主要的數據組織技術是瓦片和概覽圖,數據的壓縮也使得數據在線傳輸變得更高效。

瓦片切片在影像中創建了內置了切片,而不是簡單的運用數據的條紋,使用數據的條紋的話,想要獲取指定的數據需要讀取整個數據,當切片可以被在指定區域快速被獲取到成為可能之後,同樣的需求只需要訪問數據的特定部分就可以了。

概覽圖創建了同個影像的向下採樣的多個版本。向下採樣的意思是當從一個原始影像 ' 縮小 ' 時,有很多細節消失掉了(當前的 1 個像素在原始影像中可能存在 100 個甚至 1000 個像素),同時它的數據量也更小。通常一個 GeoTIFF 會有多個概覽圖來匹配不同縮放級別。這使得服務端的響應變得更快,因為渲染時只需要返回這個特定的像素值即可,無需再來找出用哪個像素值來表示這 1000 個像素,但是這也會使得整個文件的體積變大。

通過數據的壓縮,會使軟件能夠快速獲取影像,通常會有更好的用戶體驗,但是使 HTTP GET 的範圍請求的工作更有效率依然是非常重要的。

HTTP Get 範圍請求#

HTTP 的 1.1 版本引入了一個非常牛的功能:範圍請求,在 client 請求服務端數據的 GET 請求時使用。如果服務端在 response 的 header 中有Accept-Ranges: bytes,這就說明數據中的 bytes 可以被客戶端用任何想用的方式分塊的請求。這通常也被稱為 "Byte Serving", 維基百科中有文章詳細解釋了其工作原理。client 可以從服務端請求需要的 bytes,在 Web 領域,這被廣泛地應用,例如視頻服務,這樣,client 就不需要下載下整個文件就可以來操作它了。

範圍請求是一個可選的字段,所以服務端並非必須要實現它。但是大多數的雲服務提供商(Amazon, Google, Microsoft, OpenStack 等)的對象存儲工具提供了這個選項。所以大多數的存儲在雲上的數據已經能夠提供範圍請求的服務。

整合#

介紹過這兩個技術之後,兩個部分之間如何一起工作就變得很明顯了。GeoTIFF 中的瓦片和概覽圖以確定的結構存儲在雲端的文件中,這樣,範圍請求就能請求到文件中相關的部分了。

概覽圖在 client 想要渲染一個整幅影像的快視圖時起作用,整個過程不需要下載每一個像素,這樣一來,請求變成請求體積更小、預先創建的概覽圖。GeoTIFF 文件特定的結構在支持 HTTP 範圍請求的服務端就能使 client 輕鬆的獲取整個文件中需要的那部分。

切片在一些整幅影像的局部需要被處理或者可視化的時候發揮作用。這可以是概覽圖的一部分,也可以是全分辨率的。需要注意的是,瓦片組織所有的相關數據的區域在文件中的相同位置,所以範圍請求可以在需要的時候獲取它。

如果 GeoTIFF 沒有被用概覽圖和切片 ‘cloud optimized’ 過,同樣也能進行一些遠程操作,但是它們需要下載整個數據或者需要下載的數據量超過實際需求的數據。

優勢#

越來越多的地理信息數據被遷移到了雲端☁️,而且其中大多數被存儲在基於雲服務的對象存儲中,比如 S3Google Cloud Storage,傳統的 GIS 文件格式能夠方便的存儲在雲端,但是對於提供 Web 地圖瓦片服務或者執行快速的數據處理時,這些格式就不再保持高效了,通常需要將數據全部下載到另一個地方,之後再轉換為更優化的格式或者讀入內存中。

Cloud Optimized GeoTIFF 通過一些 小技術使得數據流更高效,使得基於雲服務的地理數據工作流成為可能。在線影像平台比如 Planet PlatformGBDX 使用這種方式提供影像服務從而使影像處理非常快速。使用 COG 技術的軟件能通過獲取需要的數據的那部分來優化執行時間。

許多新的地理信息軟件比如GeoTrellis, Google Earth EngineIDAHO 同樣在他們的軟件架構中使用了 COG 的理念。每一個處理節點高速執行影像處理通過獲取 COG 的部分的文件流。

對於現有的 GeoTIFF 標準的影響,不像引入一個新的文件格式。因為目前的軟件不需要任何的修改也能夠讀取 COG。它們不需要具備處理流文件的能力,只需要簡單地將整個文件下載下來並且讀取即可。

在雲端提供 Cloud Optimized GeoTIFF 格式的文件能夠幫助減少大量的文件拷貝。因為在線的軟件能使用流文件而不需要保留其自己的副本,這就變得更加高效,也是當今一種通用的模式。此外,數據提供商無需提供多種格式的數據,因為老式軟件和新式軟件同樣能讀取這些數據。數據提供商只需要更新一個版本的數據,與此同時,無需多餘的拷貝和下載,多種在線軟件都能夠同時使用它。

QUICK START#

前言#

這個教程說明開發者如何使用和生產 Cloud Optimized GeoTIFF。

讀取#

最簡單的使用方式是使用 GDAL 的VSI Curl 功能。可以閱讀 GDAL Wiki 在How to read it with GDAL小節。當今大多數的地理信息軟件都在使用 GDAL 作為依賴庫,所以引入 GDAL 是讀取 COG 功能的最快方式。

Planet 上,所有的數據都已經是 COG 格式,關於下載有一個小教程: download part of an image 。 大多數教程只講了關於 Planet API 的使用方法,但也說明了 GDAL Warp 怎樣從大的 COG 文件中提取單個工作區域。

創建#

同樣在 GDAL wiki 關於 COG 的頁面,How to generate it with GDAL

$ gdal_translate in.tif out.tif -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=DEFLATE

或者使用rio-cogeo plugin:

$ rio cogeo create in.tif out.tif --cog-profile deflate

與多其他的地理信息軟件應該也能夠添加合適的略縮圖和切片。

驗證#

使用 rio-cogeo plugin:

$ rio cogeo validate test.tif

參考#

https://www.cogeo.org/

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。