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中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
简单实现python画圆功能
Jan 25 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python使用post及get方式提交数据的实例
Jan 24 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
tensorflow 限制显存大小的实现
Feb 03 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
python为什么会环境变量设置不成功
Jun 23 Python
python 详解turtle画爱心代码
Feb 15 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+mysql实现数据库随机重排实例
2014/10/17 PHP
thinkPHP查询方式小结
2016/01/09 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python实现二叉查找树实例代码
2018/02/08 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
python except异常处理之后不退出,解决异常继续执行的实现
2020/04/25 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
详解如何修改python中字典的键和值
2020/09/29 Python
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
村委会主任先进事迹
2014/01/15 职场文书
初级会计求职信范文
2014/02/15 职场文书
活动总结怎么写啊
2014/05/07 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
经典毕业生求职信
2014/07/12 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
Python中的datetime包与time包包和模块详情
2022/02/28 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis