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 list中append()与extend()用法分享
Mar 24 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
python requests post多层字典的方法
Dec 27 Python
python学生管理系统学习笔记
Mar 19 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
Python 调用 Windows API COM 新法
Aug 22 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
May 12 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
discuz7 phpMysql操作类
2009/06/21 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php实现两个数组相加的方法
2015/02/17 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
2018/09/01 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
详解重置Django migration的常见方式
2019/02/15 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
介绍一下write命令
2014/08/10 面试题
运动会800米加油稿
2014/02/22 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
讲解MySQL增删改操作
2022/05/06 MySQL