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 sys.path详细介绍
Oct 17 Python
Python3基础之基本数据类型概述
Aug 13 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
python实现自动登录后台管理系统
Oct 18 Python
Python列表切片操作实例总结
Feb 19 Python
python Django的web开发实例(入门)
Jul 31 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
python中如何写类
Jun 29 Python
详解python tkinter 图片插入问题
Sep 03 Python
pandas按照列的值排序(某一列或者多列)
Dec 13 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之第七天
2006/10/09 PHP
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
详解Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
2019/04/20 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
跟老齐学Python之复习if语句
2014/10/02 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
python实现批量图片格式转换
2020/06/16 Python
python3监控CentOS磁盘空间脚本
2018/06/21 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
python time()的实例用法
2020/11/03 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
程序员跳槽必看面试题总结
2013/06/28 面试题
教师求职简历自我评价
2015/03/10 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电