python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

(1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错!

from osgeo import gdal

import numpy as np

def read_tiff(inpath):

ds=gdal.Open(inpath)

row=ds.RasterXSize

col=ds.RasterYSize

band=ds.RasterCount

geoTransform=ds.GetTransform()

proj=ds.GetTransform()

data=np.zeros([row,col,band])

for i in range(band):

dt=ds.GetRasterBand(1)

data[:,:,i]=dt.ReadAsArray(0,0,col,row)

return data,geoTransform,proj

def array2raster(outpath,array,geoTransform,proj):

cols=array.shape[1]

rows=array.shape[0]

driver=gdal.GetDriverByName('Gtiff')

outRaster=driver.Create(newRasterfn,cols,rows,1,gdal.GDT_Byte)

outRaster.SetGeoTransform(geoTransform)#参数2,6为水平垂直分辨率,参数3,5表示图片是指北的

outband=outRaster.GetRasterBand(1)

outband.WriteArray(array)

outRaster.SetProjection(proj)#将几何对象的数据导出为wkt格式

outRaster.FlushCache()

if __name__=="_main_":

data,geoTransform,proj=read_tiff('d:/a.tif')

array2raster("d:/b.tif",np.zeros[2400,2400],geoTransform,proj)

(2)具体细节参数

#1*************波段组成图像,波段指挥颜色************

import gdal  #导入库

dataset=gdal.open("filename")  #文件名,如*.tif

dir(dataset)     #可通过dir()来显示信息,或者某个函数的用法or  print(dataset)

#基本函数

dataset.GetDescription()   #获得栅格的描述信息

dataset.RasterCount        #获得栅格数据集的波段数

band=dataset.GetRasterBand(1)  #获得栅格数据集的波段

width=dataset.RasterXSize  #读取图像的宽度,x方向上的像素个数

height=dataset.RasterYSize  #读取图像的高度,y方向上的像素个数

#读取二进制

dataset.ReadRaster(xoff,yoff,xsize,ysize,buf_xsize=None,buf_ysize=None,buf_type=None,band_list=None)

#xoff,yoff指定想要读取的部分原点位置在整张图像中距离全图原点的位置

#xsize和ysize指定要读取部分图像的矩形大小

#buf_xsize,buf_ysize代表缩放大小,buf_type可设置读取的数据类型

#读取数组

dateset.ReadAsArray(xoff,yoff,xsize,ysize)

#举个例dataset.ReadRaster(230,270,10,10)#把图像中位于230,270,宽度为10高度为10的数据读取出来了

band.XSize

band.YSize  #波段图像的宽和高

band.DataType  #图像中实际数值的数据类型,具体的数据类型定义在gdalconst模块里,需import gdalconst

band.GetNoDataValue() #获取无意义值

band.GetMaximum()

band.GetMininum()  #由于是文件格式没有固有的最值,所以不会显示出来,用下面这个函数

band.ComputeRasterMinMax()#能算出排除了无意义值后的最值

band.GetRasterColorInterpretation()

gdalconst.GCI_PaletteIndex

colormap=band.GetRasterColorTable() #获得颜色表

colormap.GetCount()   #获得颜色的数量

colormap.GetPaletteInterpretation() #知道获得的颜色表是什么颜色表,比如是RGB颜色表

#比如GPI_GRAY,GPI_RGB,GPI_CYMP,GPI_HLS

gdal.GPI_RGB

for i in range(colormap.GetCount()):

print(colormap.GetColorEntry(i))  #获得颜色表中的值,有四个值,其中前三个有意义

#2**************细节**************

band.ReadAsArray(xoff,yoff,win_xsize,win_ysize,buf_xsize,buf_ysize)

#xoff,yoff是取值窗口的左上角在实际数据中所处象元的xy位置。

#win_xsize,win_ysize是取值窗口覆盖的区域大小

#buf_xsize,buf_ysize是取值窗口取出数组进行缩放后数组的大小,缩的时候是取周围点的平均值,如果不设置,则跟3、4参数一致

#例子1:横向读取和纵向读取的效率

import gdal

import time

dataset=gdal.Open("filename")

band=dataset.GetRasterBand(1)

width=dataset.RasterXSize

height=dataset.RasterYSize

bw=128

bh=128

bxsize=width/128

bysize=height/128

start=time.time()

band.ReadAsArray(0,0,width,height)

print(time.time()-start)

start2=time.time()

for i in range(bysize):

for j in range(bxsize):

band.ReadAsArray(bw*j,bh*i,bw,bh)

print(time.time()-start2)

#调换循环顺序

for j in range(bxsize):

for i in range(bysize):

band.ReadAsArray(bw*j,bh*i,bw,bh)

【参考】

点滴分享,福泽你我!Add oil!

转载本文请联系原作者获取授权,同时请注明本文来自张伟科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3428464-1250704.html

上一篇:Python代码调试错误集合(1)

下一篇:查询Anaconda安装路径、安装包位置及授予访问权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动拼图验证码操作步骤:_拼图项目:延期的后果

滑动拼图验证码操作步骤:Mark Reinhold先生于2012年7月宣布 ,他们计划从Java 8撤消Jigsaw项目 ,因为Jigsaw计划于2013年9月(从现在开始一年)推迟其发布。 这个日期是众所周知的,因为Oracle已决定实施Java的…

Vue页面骨架屏(一)

在开发webapp的时候总是会受到首屏加载时间过长的影响,主流的解决方法是在载入完成之前显示loading图效果,而一些大公司会配置一套服务端渲染的架构来解决这个问题。考虑到ssr所要解决的一系列问题,越来越多的APP采用了“骨架屏”的方式去提升…

mysql中数据定义和数据控制语言_MySQL 数据定义语言(DDL)

SQL 包含以下 4部分:1数据定义语言(DDL):DROP、CREATE、ALTER 等语句。2数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。3数据查询语言(DQL):SELECT 语句。4 数据控制语言(DCL): GRANT、REVOKE、COMMIT、ROLLB…

Page directive: illegal to have multiple occurrences of contentType with different values

org.apache.jasper.JasperException: /commons/meta.jsp(1,1) PWC5988: Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html; charsetutf-8, new: text/html;charsetUTF-8) 问题:contentType 有多个值 解…

我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

97%的记录错误是由10个唯一错误引起的 在2016年,一件事已经30年没有改变了。 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除。 由于某些未知原因,我们隐式地信任日志文件,因为我们认为事实隐藏在其中。 如果您足够努力…

洛谷 P1939 【模板】矩阵加速(数列)

题目描述 a[1]a[2]a[3]1 a[x]a[x-3]a[x-1] (x>3) 求a数列的第n项对1000000007(10^97)取余的值。 输入输出格式 输入格式: 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 输出格式: 每行输出…

Java中Map的使用

Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。 Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值…

java获取10位随机数_Java基础:JAVA中BitSet使用详解

适用场景:整数,无重复;Bitset 基础Bitset,也就是位图,由于可以用非常紧凑的格式来表示给定范围的连续数据而经常出现在各种算法设计中。上面的图来自c库中bitset的一张图。基本原理是,用1位来表示一个数据是…

使用shiro框架,注销问题的解决

在使用shiro框架的时候,有时候会因为登录问题找不到注销的controller。所以会报404的错误,下面是解决办法: 1.首先写一个类SystemLogoutFilter继承LogoutFilter类,具体代码如下,注意要贴Service标签: impor…

介绍“又一个” Cloud Foundry Gradle插件

在与两个同事(感谢Mark Alston , Dave Malone !)一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中,我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 介绍带有…

卓金武——从数学建模到MATLAB

卓金武——从数学建模到MATLAB 2013-9-4 09:48| 发布者: ilovematlab| 查看: 9647| 评论: 40 摘要: 人物简介——卓金武(Steven),MathWorks公司中国区应用工程师。在科学计算、定量优化、数学建模和数据挖掘领域拥有8年经验。曾3次获全国大学…

[Java开发]打印当前路径到控制台

开发时候,遇到了系统找不到配置文件的情况,定位到文件路径的问题之后,选择将当前路径打印到控制台。 File directory new File("");//设定为当前文件夹 try{ System.out.println(directory.getCanonicalPath());//获取标准的路径 …

latex中report目录_LaTeX目录格式控制

章节结构控制章节层次一个文档的最高层章节可以是part,也可以没有part直接是chapter/section。除了part以外,只有在上一层章节存在时,才可以使用下一层章节。章节层次示意图如下,方框代表文档类型,圆圈代表章节层次。对…

诸葛亮给子书

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。   夫学须静也,才须学也;非学无以广才,非志无以成学。   怠慢则不能励精,险躁则不能冶性。   年与时驰&…

conda 安装mysql_centos7安装mysql

一、安装YUM Repo1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。官方网址:https://dev.mysql.com/downloads/repo/yum/下载命令:wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm2、…

智能批处理

我们都有多少次听说“分批处理”会增加延迟? 作为对低延迟系统充满热情的人,这让我感到惊讶。 以我的经验,正确完成批处理不仅可以提高吞吐量,还可以减少平均延迟并保持一致。 那么,批处理如何神奇地减少延迟呢&#x…

cogs 76. [NOIP2007] 统计数字

【问题描述】 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 【输入格式】 输入文件pcount.in包…

javaweb之Filter详解

一、概念:Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些…

pause容器作用_Kubernetes学习之pause容器

根据代码看到,pause容器运行着一个非常简单的进程,它不执行任何功能,一启动就永远把自己阻塞住了,它的作用就是扮演PID1的角色,并在子进程称为"孤儿进程"的时候,通过调用wait()收割这个子进程,这样就不用担心我们的Pod的PID namespace里会堆满僵尸进程了,这也是为什么…

Spring Integration –轮询文件的创建和修改

1引言 文件支持是Spring Integration与外部系统通信的另一个端点。 在这种情况下,它提供了几个组件来读取,写入和转换文件。 在这篇文章中,我们将编写一个监视目录的应用程序,以便读取其中的所有文件。 具体而言,它执行…