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 中文乱码问题深入分析
Mar 13 Python
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
Python实现的异步代理爬虫及代理池
Mar 17 Python
Python 闭包的使用方法
Sep 07 Python
django缓存配置的几种方法详解
Jul 16 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
利用python实现逐步回归
Feb 24 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
Django实现文章详情页面跳转代码实例
Sep 16 Python
python对输出的奇数偶数排序实例代码
Dec 04 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对XML内容进行修改和删除实例代码
2016/10/26 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
js导出excel文件的简洁方法(推荐)
2016/11/02 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
python中enumerate的用法实例解析
2014/08/18 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python多线程并发实例及其优化
2019/06/27 Python
python Django的web开发实例(入门)
2019/07/31 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
Python图像读写方法对比
2020/11/16 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
const和static readonly区别
2013/05/20 面试题
法律进社区实施方案
2014/03/21 职场文书
反对邪教标语
2014/06/30 职场文书
2014年转正工作总结
2014/11/08 职场文书
python的变量和简单数字类型详解
2021/09/15 Python
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
mysql查找连续出现n次以上的数字
2022/05/11 MySQL
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android