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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
python之DataFrame实现excel合并单元格
Feb 22 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Django程序的优化技巧
Apr 29 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数据库配置文件一般做法分享
2012/07/07 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
利用php+mcDropdown实现文件路径可在下拉框选择
2013/08/07 PHP
PHP SOCKET编程详解
2015/05/22 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
JavaScript学习笔记之JS函数
2015/01/22 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
wxPython中文教程入门实例
2014/06/09 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
python中的yield from语法快速学习
2020/11/06 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
环境工程求职简历的自我评价范文
2013/10/24 职场文书
室内设计专业个人的自我评价
2013/12/18 职场文书
作弊检讨书1000字
2014/02/01 职场文书
好的旅游活动方案
2014/08/19 职场文书
《刷子李》教学反思
2016/02/20 职场文书
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS
Golang使用Panic与Recover进行错误捕获
2022/03/22 Golang
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
Python matplotlib多个子图绘制整合
2022/04/13 Python