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 快速排序代码
Nov 23 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python工厂函数用法实例分析
May 14 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
Python unittest单元测试框架总结
Sep 08 Python
python实现AES和RSA加解密的方法
Mar 28 Python
django中使用POST方法获取POST数据
Aug 20 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
基于Keras中Conv1D和Conv2D的区别说明
Jun 19 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 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
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
PHP的PDO连接讲解
2019/01/24 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
js获取ajax返回值代码
2014/04/30 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
理解JS事件循环
2016/01/07 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
numpy中索引和切片详解
2017/12/15 Python
对python生成业务报表的实例详解
2019/02/03 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python 画条形图(柱状图)实例
2020/04/24 Python
Python编写单元测试代码实例
2020/09/10 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
普天C++笔试题
2016/03/20 面试题
自动化职业生涯规划书范文
2014/01/03 职场文书
团组织关系介绍信
2014/01/12 职场文书
新闻编辑求职信
2014/04/09 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript