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 25 Python
python回调函数用法实例分析
May 09 Python
python多进程共享变量
Apr 06 Python
关于python的list相关知识(推荐)
Aug 30 Python
Python序列化基础知识(json/pickle)
Oct 19 Python
Windows下Anaconda的安装和简单使用方法
Jan 04 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python图的深度优先和广度优先算法实例分析
Oct 26 Python
python安装gdal的两种方法
Oct 29 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
Python Http请求json解析库用法解析
Nov 28 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常用编译参数中文说明
2014/09/27 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
JavaScript实现图片懒加载的方法分析
2018/07/05 Javascript
layui表格数据重载
2019/07/27 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
python3 爬取图片的实例代码
2018/11/06 Python
python实现简易数码时钟
2021/02/19 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
什么是类的返射机制
2016/02/06 面试题
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
个人授权委托书
2014/04/03 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
MySQL七大JOIN的具体使用
2022/02/28 MySQL
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB