1. 程式人生 > 實用技巧 >Cloud Optimized GeoTIFF (COG) 簡介

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 etc)的物件儲存工具提供了這個選項。所以大多數的儲存在雲上的資料已經能夠提供範圍請求的服務。

整合

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

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

切片在一些整幅影像的區域性需要被處理或者視覺化的時候發揮作用。這可以是概覽圖的一部分,也可以是全解析度的。需要注意的是,瓦片組織所有的相關資料的區域在檔案中的相同位置,所以範圍請求可以在需要的時候獲取它。

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

優勢

越來越多的地理資訊資料被遷移到了雲端☁️,而且其中大多數被儲存在基於雲服務的物件儲存中,比如 S3 or Google 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/