利用ArcGIS与arcpy进行栅格属性信息的提取

您所在的位置:网站首页 矢量点提取栅格值 利用ArcGIS与arcpy进行栅格属性信息的提取

利用ArcGIS与arcpy进行栅格属性信息的提取

2024-03-06 14:35| 来源: 网络整理| 查看: 265

最近在做一个高分数据处理的项目时,需要对几千景高分影像数据进行处理,主要就是影像的预处理和地理配准。在对数据的不断处理过程中,就想着能不能把影像的基本信息提取出来,比如后缀名、分辨率、波段数、坐标系等等,这样既可以当作一种项目过程中的检查,也可以当作项目的资料提供给甲方。牵涉到大量的影像数据,采用人工逐条记录的方法明显不太合适,这时候自然而然的想到了利用ArcGIS软件和python语言。

和ArcGIS相关的Python语言自然就是arcpy了,查阅了ArcGIS的帮助,看看有没有能提取栅格信息的方法,发现有一个获取栅格的方法,可以返回很多基本的属性信息,方法如下: GetRasterProperties_management (in_raster, {property_type}, {band_index})

可以提取的属性信息有: 这里写图片描述 再然后就可以写具体的python代码实现自己的需要了,由于要经常性的使用,就采取了GP框架做一个工具箱: 这里写图片描述 这里考虑到尽可能一次到位,可以对多个文件夹下的栅格数据一次提取,而不是只能对一个文件夹下进行提取,结果直接保存成一个xls文件。(好像python2.7标准库不支持xlsx) 代码:

import arcpy import os,string inputfolders = string.split(arcpy.GetParameterAsText(0),";") savepath = arcpy.GetParameterAsText(1) savename = os.path.join(savepath+".xls")

这里图简便,直接给后面加了一个.xls,这样打开excel时会提示文件格式与拓展名不匹配,不过不影响打开。这里比较好的是用xlwt包创建一个excel,不会出现这个问题。

f=open(savename,"w") head=[u"影像名称",u"格式",u"分辨率(X)",u"分辨率(Y)",u"波段数",u"坐标系",u"文件大小",u"象元值类型"] for hea in head: f.write(hea.encode("gbk")+"\t") f.write("\n")

这里先写表头,用f.write这种方式写,\t换右格,\n换行似乎太低端了,如果用xlwt写的话应该ws.write(i,j,value),其中i是行,j是列,都从0开始算,value再写值,才显得比较高端一些。用f.write这种方式写的好处就是比较快,比较适合简单的脚本工具开发。 下面就可以获取属性信息了,由于我需要像元值类型VALUETYPE,而它有14种对应方式,因此在这里可以先建立一个字典:

dict={} dict["0"] = u"1位" dict["1"] = u"2位" dict["2"] = u"4位" dict["3"] = u"8位无符号整型" dict["4"] = u"8位有符号整型" dict["5"] = u"16位无符号整型"

等等。。。

然后开始对输入的每一个文件夹执行代码:

for inputfolder in inputfolders: arcpy.env.workspace= inputfolder imglist = arcpy.ListRasters("","")

这里获取了文件夹下的所有栅格影像,并把他们建立为一个列表,接下来就开始对这个列表循环了:

for img in imglist: imgpath= arcpy.Describe(img).CatalogPath geshi = os.path.splitext(img)[1] img_name = arcpy.Describe(img).baseName img_sizeX = arcpy.GetRasterProperties_management(img,"CELLSIZEX") img_sizeY = arcpy.GetRasterProperties_management(img,"CELLSIZEY") img_bandcount = arcpy.GetRasterProperties_management(img,"BANDCOUNT") img_SR = arcpy.Describe(img).spatialReference.name img_size = float(os.path.getsize(imgpath))/1024/1024/1024 img_valuetype =str(arcpy.GetRasterProperties_management(img,"VALUETYPE")) valuetype=dict[img_valuetype] ``` 这里获取了格式、文件名、分辨率X、分辨率Y、波段数、坐标系、文件大小和像元值类型。 再写入xls中: f.write("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\n".format(img_name,geshi,img_sizeX,img_sizeY,img_bandcount,img_SR,str(size)+"G",valuetype.encode("gbk")))

f.close() “`

然后执行工具: 这里写图片描述

就生成一个excel,打开发现已经写进去了: 这里写图片描述 当然,还可以把其他属性信息都写进去,这里就不赘述了。这种方式只适合比较简单的,如果想写的正式些还是建议把创建excel和给excel里写数据的过程都用xlwt实现。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3