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 相关文章推荐
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python三元运算与lambda表达式实例解析
Nov 30 Python
python读取Kafka实例
Dec 23 Python
python数据预处理 :数据抽样解析
Feb 24 Python
利用python在excel中画图的实现方法
Mar 17 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
Python实现生成bmp图像的方法
Jun 13 Python
详解MindSpore自定义模型损失函数
Jun 30 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基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python3模拟登录操作实例分析
2019/03/12 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
python使用celery实现异步任务执行的例子
2019/08/28 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
超市营业员求职简历的自我评价
2013/10/17 职场文书
物理系毕业生自荐信
2013/11/01 职场文书
医学专业大学生求职的自我评价
2013/11/27 职场文书
优秀村官事迹材料
2014/01/10 职场文书
物控部经理职务说明书
2014/02/25 职场文书
党的群众路线对照检查材料
2014/08/27 职场文书
伏羲庙导游词
2015/02/09 职场文书
2015年实习单位评语
2015/03/25 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js