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 25 Python
为python设置socket代理的方法
Jan 14 Python
详细介绍Python函数中的默认参数
Mar 30 Python
使用Python脚本将绝对url替换为相对url的教程
Apr 24 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
python求平均数、方差、中位数的例子
Aug 22 Python
python3 pathlib库Path类方法总结
Dec 26 Python
python Tensor和Array对比分析
Jan 08 Python
pyinstaller还原python代码过程图解
Jan 08 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 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
微信小程序 wx.getUserInfo引导用户授权问题实例分析
2020/03/09 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
python如何实现内容写在图片上
2018/03/23 Python
基于python实现百度翻译功能
2019/05/09 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
详解python对象之间的交互
2020/09/29 Python
世界上最大的在线旅行社新加坡网站:Expedia新加坡
2016/08/25 全球购物
理发店策划方案
2014/06/05 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
会员卡清退活动总结
2014/08/27 职场文书
创先争优活动心得体会
2014/09/04 职场文书
质量保证书格式
2015/02/27 职场文书
幼儿园个人总结
2015/02/28 职场文书
民间借贷借条如何写
2015/05/26 职场文书
理想国读书笔记
2015/06/25 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
python_tkinter事件类型详情
2022/03/20 Python