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 从远程服务器下载东西的代码
Feb 10 Python
python实现发送和获取手机短信验证码
Jan 15 Python
Django后台获取前端post上传的文件方法
May 28 Python
浅谈python3.x pool.map()方法的实质
Jan 16 Python
python集合是否可变总结
Jun 20 Python
python3 实现调用串口功能
Dec 26 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
python如何做代码性能分析
Apr 26 Python
简单且有用的Python数据分析和机器学习代码
Jul 02 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
javascript 面向对象继承
2009/11/26 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
探秘vue-rx 2.0(推荐)
2018/09/21 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
Django中几种重定向方法
2015/04/28 Python
python实现归并排序算法
2018/11/22 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python模块常用用法实例详解
2019/10/17 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
父亲生日宴会答谢词
2014/01/10 职场文书
法制宣传实施方案
2014/03/13 职场文书
企业员工薪酬方案
2014/06/04 职场文书
公司应聘求职信
2014/06/21 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
酒店前台辞职书
2015/02/26 职场文书
初级职称评定工作总结
2015/08/13 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
python编写五子棋游戏
2021/05/25 Python