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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python实现远程控制电脑
May 23 Python
python实现感知机线性分类模型示例代码
Jun 02 Python
python实现批量nii文件转换为png图像
Jul 18 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
Python 如何实现访问者模式
Jul 28 Python
python如何运行js语句
Sep 09 Python
浅谈Python numpy创建空数组的问题
May 25 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连接Oracle数据库
2006/10/09 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
php中的异常和错误浅析
2017/05/03 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
详解JavaScript中的表单验证
2015/06/16 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python Django批量导入不重复数据
2016/03/25 Python
python进行TCP端口扫描的实现
2018/12/21 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
24个canvas基础知识小结
2014/12/17 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
毕业生求职推荐信
2013/11/04 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
八年级作文之我的母亲
2019/12/10 职场文书
python cv2图像质量压缩的算法示例
2021/06/04 Python
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android