使用GDAL對DEM渲染處理流程

2021-06-12 09:28:24 字數 2757 閱讀 9675

有時候我使用qgis的hillshade外掛程式來生成山體陰影資料,然後和原來的dem資料疊加顯示。使用顏色表渲染後以及使用半透明顯示的效果下圖所示:

圖1 使用hillshade使用假彩色渲染的效果

寫在開始之前

在開始之前,你需要有下面的資料:

dem資料——我這裡的資料名字是「alt.tif」

向量資料(比如shp格式),範圍是你最終處理結果的範圍——我這裡的名字是「tanzania.shp」

首先我們需要生成乙個山體陰影資料。qgis裡面有乙個使用python寫的很好用的外掛程式。在grass中使用這個外掛程式可以來生成山體陰影資料。但在本文中,我將使用gdal提供的工具來生成。我們要使用的是乙個叫gdaldem的命令列程式。在這裡我不會對gdaldem的引數進行說明解釋,因為在gdaldem的幫助文件中有詳細的說明。

我們生成山體陰影資料的命令列如下:

gdaldemhillshade alt.tif shade.tif -z 5 -s 111120 -az 90
生成的結果如下圖所示:

圖2 處理生成的山體陰影資料

首先你需要選擇了乙個合適的顏色調色盤(其中大約有

五、六個顏色),此外你還需要知道dem資料中的高程範圍。這個範圍你可以在qgis很容易的點幾次滑鼠就搞定了,但是這裡我們使用gdal的命令列:

gdalinfo -mm alt.tif
執行上面的命令列輸出的資訊包括第一波段的最大最小值,這個最大值最小值就是我們需要的東西。輸出的內容如下所示:

band 1 block=1334x3 type=uint16, colorinterp=gray

computed min/max=1.000,5768.000

nodata value=65535

ok,通過上面的內容可以知道,我們的最低高程是1公尺,最大高程為5789公尺——這裡就是坦尚尼亞的乞力馬扎羅山的海拔!接下來我們把這個高程範圍分為5類來匹配「landcarpet europe」制定的調色盤(這裡的landcarpet europe可能就是歐洲的乙個地圖渲染的顏色的標準吧,詳細內容參考顏色如圖3所示)。此外我又加了乙個顏色就是在最高的地方設定為白色。

圖3 landcarpet europe顏色

調色盤的內容如下:

65535 255 255 255

5800 254 254 254

3000 121 117 10

1500 151 106 47

800 127 166 122

500 213 213 149

1 218 179 122

上面的一共有四列值,第一列表示的是高程值,後面三個就是對應的rgb值。把上面的內容儲存為乙個叫ramp.txt的檔案,放到alt.tif所在的資料夾下。你會發現上面的值在低海拔處比較密集,而高海拔地區比較稀疏。(這裡有一句看不明白,沒翻譯,不影響後續使用)。另外,可以發現我設定的顏色在地勢最高的地方接近白色,所以最後設定nodata值(65535)的rgb值是白色(255,255,255)。

好了,現在我們可以用下面的命令生成彩色地形圖:

gdaldem color-relief alt.tif ramp.txt relief.tif
處理的結果如下所示:

圖4 生成的彩色地形圖

處理的結果好像和調色盤設定的顏色不太一致,不要擔心,我們將在下面的步驟進行處理。

接下來的步驟是將上面生成的兩個影象合併起來。我使用frank warmerdam的hsv_merge.py指令碼來完成。命令列指令碼如下:

./hsv_merge.py relief.tif shade.tif colour_shade.tif
處理的結果如下圖:

圖5 使用山體陰影資料和顏色渲染資料合併後的資料

你可能已經注意到,目前處理的顏色和我們使用的調色盤的顏色比較類似了。這裡有點小問題,就是把影象中的nodata值變成了白色(rgb:255 255 255)。

通過上面的步驟你可能已經得到了你想要的結果。此外,你還可以使用向量資料來對資料進行裁切和掩碼。命令列**如下:

gdalwarp -co compress=deflate -dstnodata 255 -cutline tanzania.shp  colour_shade.tif colour_shade_clipped.tif
我最後得到的影象是乙個無壓縮的tif資料,這個資料除了坦尚尼亞範圍內有資料,以外都是nodata,影象如下:

圖6 最終結果:坦尚尼亞假彩色高程地圖

python 呼叫gdal 處理dem資料

coding utf 8 from osgeo import gdal import osr import numpy as np from matplotlib import pyplot as plt from gdalconst import from matplotlib import cm...

使用selenium進行多視窗處理demo

使用selenium需要啟動瀏覽器,當然必要的環境肯定要支援啦,做爬蟲效率也沒有框架來的快,但是我喜歡啊 調皮 這是乙個可以進行多視窗抓取的demo,可以根據自己的需求進行更改 from selenium import webdriver from selenium.webdriver.common...

前端處理檔案流時對axios進行封裝

1 首先建立請求例項 const service axios.create service.apiurl baseurl2 對請求引數進行處理 service.interceptors.request.use config config.data qs.stringify 身份 const toke...