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

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

ArcGIS 10.2 arcpy是一种用于Python编程语言的模块,可用于与ArcGIS软件交互和自动化地理信息系统(GIS)任务。通过arcpy,用户可以通过编写脚本来创建、编辑和分析GIS数据。 ArcGIS 10.2是Esri公司开发的一个GIS软件套件的版本,提供了一系列工具和功能,允许用户处理和分析地理空间数据。arcpyArcGIS的一部分,它为开发人员和用户提供了全面的GIS处理和分析能力。 利用arcpy,用户可以进行各种GIS操作,例如: 1. 数据管理:使用arcpy可以创建、复制、移动、删除和查找GIS数据。用户可以创建年度的地理数据库,将数据从一个地理数据库复制到另一个地理数据库,并且可以根据不同的条件查询数据。 2. 数据分析:arcpy提供了许多地理专题分析工具,如缓冲区分析、空间查询和地理加权回归等。用户可以编写脚本来操作数据,得所需的结果。 3. 地图生成:arcpy还提供了创建和编辑地图文档的功能。用户可以自动创建并操纵地图文档中的图层,设置符号、标注和样式等。 4. 地理处理:用户可以使用arcpy来执行各种地理处理任务,例如地图代数、栅格计算、空间插值等。对于大规模的地理处理任务,arcpy还支持多线程操作,提高处理速度。 总之,arcpyArcGIS 10.2中一种强大的工具,它提供了许多方便的功能和操作,使用户能够更高效地处理和分析GIS数据。通过使用Python编程语言,用户可以编写脚本来自动化GIS任务,并结合arcpy的功能来实现各种地理空间分析。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值