Python的地形三维可视化Matplotlib和gdal使用实例


Posted in Python onDecember 09, 2017

我是以Python开门的,我还是觉得Python也可以进行地形三维可视化,当然这里需要借助第三方库,so,我就来介绍:Python一个很重要可视化插件,Matplotlib。

Matplotlib是Python最著名的绘图库,它提供了一整套友好的命令,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。你会发现Matplotlib和matlab相似,但是你知道matlab强大是很强大,但是安装包就有7G,一下就让我失去玩弄他的兴趣。

Matplotlib的二维图形非常成熟,可以做各种各样的报表,比如:

Python的地形三维可视化Matplotlib和gdal使用实例

好吧,额,....... Matplotlib当然也可以做3维数据。首先准备了一份样例,珠穆朗姆峰周围地势的dem数据,我在arcsense进行拉伸显示,初步看看效果:

Python的地形三维可视化Matplotlib和gdal使用实例

讲这份数据,输入编写好的相关路径,然后经过简单的三维渲染:

Python的地形三维可视化Matplotlib和gdal使用实例

Matplotlib只是一个可视化包,不能直接识别栅格数据,所以这边还用到另外一个包---gdal,开源栅格空间数据转换库,他的本体竟然还是c++,也开放了一个Python框架,这算是向Python投诚嘛?

好吧,开源一下用Matplotlib和gdal包进行地形三维可视化的小脚本:

# -*- 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实验/Himalaya.tif" #输入你的dem数据
dataset = gdal.Open(filePath)
adfGeoTransform = dataset.GetGeoTransform()
band = dataset.GetRasterBand(1)  #用gdal去读写你的数据,当然dem只有一个波段
nrows = dataset.RasterXSize 
ncols  = dataset.RasterYSize  #这两个行就是读取数据的行列数
Xmin = adfGeoTransform[0] #你的数据的平面四至
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) #这一段就是讲数据的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)  #设置你可视化数据的色带
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() #最后渲染出你好看的三维图吧

Python的地形三维可视化Matplotlib和gdal使用实例

Python的地形三维可视化Matplotlib和gdal使用实例

最后是虾神的话:GDAL在python里面的安装,属于灰常纠结的事情,运气好(人品好)可能一下就成功,运气不好,可能死活就装不上……如果遇上死活装不上的,可以考虑用MinGW自己进行编译。

如果不想用gdal来实现以上效果,可以考虑用arcpy的RasterToNumpy来把tif文件读成矩阵,也可以实现。

总结

以上就是本文关于Python的地形三维可视化Matplotlib和gdal使用实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python 查找文件夹下所有文件 实现代码
Jul 01 Python
Python的另外几种语言实现
Jan 29 Python
简单的python后台管理程序
Apr 13 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
python 自定义装饰器实例详解
Jul 20 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
django实现用户注册实例讲解
Oct 30 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
python登录并爬取淘宝信息代码示例
Dec 09 #Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 #Python
Python排序搜索基本算法之选择排序实例分析
Dec 09 #Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 #Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 #Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 #Python
python爬取亚马逊书籍信息代码分享
Dec 09 #Python
You might like
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php flv视频时间获取函数
2010/06/29 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
PHP中的正则表达式实例详解
2017/04/25 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
js基础知识(公有方法、私有方法、特权方法)
2015/11/06 Javascript
JS集成fckeditor及判断内容是否为空的方法
2016/05/27 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
Python生成随机密码
2015/03/10 Python
Python 备份程序代码实现
2017/03/06 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
Python贪心算法实例小结
2018/04/22 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
西部世纪面试题
2014/12/05 面试题
热门专业求职信
2014/05/24 职场文书
交通安全横幅标语
2014/10/07 职场文书
求职自荐信怎么写
2015/03/04 职场文书
自书遗嘱范文
2015/08/07 职场文书