Python叠加两幅栅格图像的实现方法


Posted in Python onJuly 05, 2019

目的

现有两幅栅格图像,一个是某地区道路栅格图,一个是某地区土地利用类型图,需要将道路叠加到土地利用类型图中,即叠加后,重合的像元值以道路图为准,其余的像元值仍是土地利用类型图原有的像元值。

图1 道路信息图

Python叠加两幅栅格图像的实现方法

图2 土地利用类型图

Python叠加两幅栅格图像的实现方法

图3 结果图

Python叠加两幅栅格图像的实现方法

具体实现

from gdalconst import *
from osgeo import gdal
import osr
import sys
import copy

#叠加两个栅格图像(一个道路栅格图,一个土地利用类型图),两幅图像重叠的像元值都是第一个图像的值,
#未重叠的像元值还是土地利用类型图上的值,最终结果便是土地利用类型图上面多了道路信息。

roadFile = 'E:\\Exercise\\test\\grasstest\\road_rastercalc.tif'
landuseFile = 'E:\\Exercise\\test\\grasstest\\landuse.tif'
roadDs = gdal.Open(roadFile, GA_ReadOnly)
landuseDs = gdal.Open(landuseFile, GA_ReadOnly)
if roadDs is None:
  print 'Can not open ', roadFile
  sys.exit(1)

geotransform = roadDs.GetGeoTransform()
projection=roadDs.GetProjection()
cols = roadDs.RasterXSize
rows = roadDs.RasterYSize
roadBand = roadDs.GetRasterBand(1)
roadData = roadBand.ReadAsArray(0,0,cols,rows)
roadNoData = roadBand.GetNoDataValue()

landuseBand = landuseDs.GetRasterBand(1)
landuseData = landuseBand.ReadAsArray(0,0,cols,rows)
landuseNoData = landuseBand.GetNoDataValue()


result = landuseData

for i in range(0,rows):
  for j in range(0,cols):
    if(abs(roadData[i,j] - 20) < 0.0001):
      result[i,j] = 20
    if((abs(landuseData[i,j] - landuseNoData)>0.0001) and (abs(roadData[i,j] - roadNoData) < 0.0001)):
      result[i,j] = landuseData[i,j]
    if((abs(landuseData[i,j] - landuseNoData)<0.0001) and (abs(roadData[i,j] - roadNoData) < 0.0001)):
      result[i,j] = landuseNoData
#write result to disk
resultPath = 'E:\\Exercise\\test\\grasstest\\result_landuse.tif'

format = "GTiff"  
driver = gdal.GetDriverByName(format)
ds = driver.Create(resultPath, cols, rows, 1, GDT_Float32)
ds.SetGeoTransform(geotransform)
ds.SetProjection(projection)
ds.GetRasterBand(1).SetNoDataValue(landuseNoData)
ds.GetRasterBand(1).WriteArray(result)  
ds = None

print 'ok---------'

以上这篇Python叠加两幅栅格图像的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
Django中Model的使用方法教程
Mar 07 Python
python代码过长的换行方法
Jul 19 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 #Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
Jul 05 #Python
Python 计算任意两向量之间的夹角方法
Jul 05 #Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 #Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 #Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 #Python
python读出当前时间精度到秒的代码
Jul 05 #Python
You might like
PHP在Web开发领域的优势
2006/10/09 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
php is_writable判断文件是否可写实例代码
2016/10/13 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
python实现红包裂变算法
2016/02/16 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python中拆分字符串的操作方法
2019/07/23 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
广州迈达威.net面试题目
2012/03/10 面试题
中华在我心中演讲稿
2014/09/13 职场文书
2014年局领导班子自身建设情况汇报
2014/11/21 职场文书
成事在人观后感
2015/06/16 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
Docker部署Mysql8的实现步骤
2022/07/07 Servers
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android