Python的地形三維可視化Matplotlib和gdal使用實(shí)例
我是以Python開門的,我還是覺得Python也可以進(jìn)行地形三維可視化,當(dāng)然這里需要借助第三方庫,so,我就來介紹:Python一個(gè)很重要可視化插件,Matplotlib。
Matplotlib是Python最著名的繪圖庫,它提供了一整套友好的命令,十分適合交互式地進(jìn)行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應(yīng)用程序中。你會發(fā)現(xiàn)Matplotlib和matlab相似,但是你知道m(xù)atlab強(qiáng)大是很強(qiáng)大,但是安裝包就有7G,一下就讓我失去玩弄他的興趣。
Matplotlib的二維圖形非常成熟,可以做各種各樣的報(bào)表,比如:
好吧,額,....... Matplotlib當(dāng)然也可以做3維數(shù)據(jù)。首先準(zhǔn)備了一份樣例,珠穆朗姆峰周圍地勢的dem數(shù)據(jù),我在arcsense進(jìn)行拉伸顯示,初步看看效果:
講這份數(shù)據(jù),輸入編寫好的相關(guān)路徑,然后經(jīng)過簡單的三維渲染:
Matplotlib只是一個(gè)可視化包,不能直接識別柵格數(shù)據(jù),所以這邊還用到另外一個(gè)包---gdal,開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫,他的本體竟然還是c++,也開放了一個(gè)Python框架,這算是向Python投誠嘛?
好吧,開源一下用Matplotlib和gdal包進(jìn)行地形三維可視化的小腳本:
# -*- coding: gbk -*- from mpl_toolkits.mplot3d import Axes3D from Matplotlib import cbook from Matplotlib import cm from Matplotlib.colors import LightSource import Matplotlib.pyplot as plt import numpy as np from osgeo import gdal gdal.AllRegister() filePath = u"E:\桌面\dem實(shí)驗(yàn)/Himalaya.tif" #輸入你的dem數(shù)據(jù) dataset = gdal.Open(filePath) adfGeoTransform = dataset.GetGeoTransform() band = dataset.GetRasterBand(1) #用gdal去讀寫你的數(shù)據(jù),當(dāng)然dem只有一個(gè)波段 nrows = dataset.RasterXSize ncols = dataset.RasterYSize #這兩個(gè)行就是讀取數(shù)據(jù)的行列數(shù) Xmin = adfGeoTransform[0] #你的數(shù)據(jù)的平面四至 Ymin = adfGeoTransform[3] Xmax = adfGeoTransform[0] + nrows * adfGeoTransform[1] + ncols * adfGeoTransform[2] Ymax = adfGeoTransform[3] + nrows * adfGeoTransform[4] + ncols * adfGeoTransform[5] x = np.linspace(Xmin,Xmax, ncols) y = np.linspace(Ymin,Ymax, nrows) X,Y = np.meshgrid(x, y) Z = band.ReadAsArray(0, 0,nrows, ncols) #這一段就是講數(shù)據(jù)的x,y,z化作numpy矩陣 region = np.s_[10:400,10:400] X, Y, Z = X[region], Y[region],Z[region] fig, ax = plt.subplots(subplot_kw=dict(projection='3d'), figsize=(12,10)) ls = LightSource(270, 20) #設(shè)置你可視化數(shù)據(jù)的色帶 rgb = ls.shade(Z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft') surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=rgb, linewidth=0, antialiased=False, shade=False) plt.show() #最后渲染出你好看的三維圖吧
最后是蝦神的話:GDAL在python里面的安裝,屬于灰常糾結(jié)的事情,運(yùn)氣好(人品好)可能一下就成功,運(yùn)氣不好,可能死活就裝不上……如果遇上死活裝不上的,可以考慮用MinGW自己進(jìn)行編譯。
如果不想用gdal來實(shí)現(xiàn)以上效果,可以考慮用arcpy的RasterToNumpy來把tif文件讀成矩陣,也可以實(shí)現(xiàn)。
總結(jié)
以上就是本文關(guān)于Python的地形三維可視化Matplotlib和gdal使用實(shí)例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
基于python實(shí)現(xiàn)鼠標(biāo)實(shí)時(shí)坐標(biāo)監(jiān)測
這篇文章主要給大家介紹了如何基于python實(shí)現(xiàn)鼠標(biāo)實(shí)時(shí)坐標(biāo)監(jiān)測,文章通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2023-11-11PyQt5實(shí)現(xiàn)仿QQ貼邊隱藏功能的實(shí)例代碼
這篇文章主要介紹了PyQt5實(shí)現(xiàn)仿QQ貼邊隱藏功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Python實(shí)現(xiàn)將不規(guī)范的英文名字首字母大寫
這篇文章給大家主要介紹的是利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮?,其他小寫的?guī)范名字。文中給出了三種解決方法,大家可以根據(jù)需要選擇使用,感興趣的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11Win11平臺安裝和配置NeoVim0.8.2編輯器搭建Python3開發(fā)環(huán)境詳細(xì)過程(2023最新攻略)
這篇文章主要介紹了Win11平臺安裝和配置NeoVim0.8.2編輯器搭建Python3開發(fā)環(huán)境(2023最新攻略),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-01-01Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的完整代碼(面向?qū)ο?
這篇文章主要介紹了Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的完整代碼(面向?qū)ο?,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04