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中threading超线程用法实例分析
May 16 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
python获取元素在数组中索引号的方法
Jul 15 Python
Python中断言Assertion的一些改进方案
Oct 27 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
Django与JS交互的示例代码
Aug 23 Python
python web基础之加载静态文件实例
Mar 20 Python
python pandas dataframe 按列或者按行合并的方法
Apr 12 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
python实现操作文件(文件夹)
Oct 31 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
Python实现照片卡通化
Dec 06 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
详细介绍:Apache+PHP+MySQL配置攻略
2006/09/05 PHP
PHP警告Cannot use a scalar value as an array的解决方法
2012/01/11 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
js QQ客服悬浮效果实现代码
2014/12/12 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JS实现密码框效果
2020/09/10 Javascript
python实现将文本转换成语音的方法
2015/05/28 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python中的pack和unpack的使用
2018/03/12 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
技校教师求职简历的自我评价
2013/10/20 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
学校四风对照检查材料
2014/08/28 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android