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字符转换
Sep 06 Python
python Opencv将图片转为字符画
Feb 19 Python
Python装饰器原理与用法分析
Apr 30 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
python通过matplotlib生成复合饼图
Feb 06 Python
pycharm实现在子类中添加一个父类没有的属性
Mar 12 Python
基于python图像处理API的使用示例
Apr 03 Python
解决numpy数组互换两行及赋值的问题
Apr 17 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
javascript 三种编解码方式
2010/02/01 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
Bootstrap基础学习
2015/06/16 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
详解django三种文件下载方式
2018/04/06 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
celery4+django2定时任务的实现代码
2018/12/23 Python
Python用户自定义异常的实现
2020/12/25 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
Europcar比利时:租车
2019/08/26 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
新闻专业应届生求职信
2013/10/31 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
工作自荐信
2013/12/11 职场文书
党的群众路线教育实践活动批评与自我批评
2014/02/16 职场文书
党员大会主持词
2014/04/02 职场文书
个人投资合作协议书
2014/10/12 职场文书
自我检讨书怎么写
2015/05/07 职场文书
运动会跳远广播稿
2015/08/19 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js