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 smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
python 系统调用的实例详解
Jul 11 Python
python如何实现int函数的方法示例
Feb 19 Python
Python中常见的异常总结
Feb 20 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
python创造虚拟环境方法总结
Mar 04 Python
pandas read_excel()和to_excel()函数解析
Sep 19 Python
Python 私有化操作实例分析
Nov 21 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
Python读写yaml文件
Mar 20 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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
php格式化电话号码的方法
2015/04/24 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python笔记之代理模式
2019/11/20 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
中学生获奖感言
2014/02/04 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
护士自我推荐信范文
2015/03/24 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
中学团支部工作总结
2015/08/13 职场文书
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers
SpringBoot详解执行过程
2022/07/15 Java/Android