765 0

[数据挖掘理论与案例] 使用Arcpy进行数据批处理-批量裁剪 [推广有奖]

  • 0关注
  • 4粉丝

硕士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0.0117
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2772 点
帖子
74
精华
0
在线时间
39 小时
注册时间
2022-2-26
最后登录
2025-9-5

楼主
地理遥感生态网 企业认证  发表于 2022-3-17 23:15:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
        时空大数据使我们面临前所未有的机遇和挑战,尤其在地学、遥感或空间技术等专业领域,无疑是一个全新的时代。
        伴随着时空大数据的到来,海量数据的处理是一个所有科研工作者都无法忽视的重要问题。传统的数据(主要指空间数据)处理工具已无法满足大数据处理的要求,而且笨拙的传统工具数据处理方式无疑是科研道路上的绊脚石,使我们面对大数据处理需求时手忙脚乱。因此,数据批处理的方式很大程度上解决了这一问题,解放大量劳动力。
        对于空间数据来说,常用的传统数据处理工具或软件包括ArcGIS、ENVI等,而且现已拥有对应的批处理平台或工具,如Arcpy、ENVI_IDL。此外许多第三方工具包如GDAL,也很好的支持多种开发语言和环境,以便于编程使用。在此,以Arcpy为例,在Python语言开发环境下,通过实际的编程应用,简单介绍空间数据批处理的实现方法。

1 Python基础

" Life is short, you need Python——Bruce Eckel",人生苦短,我用Python。
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。
Python的设计哲学:
  • 优雅
  • 简单
  • 明确
对于大多数程序语言,第一个入门编程代码便是"Hello World!",以下代码为使用Python输出"Hello World!":
实例(Python 2.0+)
print "Hello World!"实例(Python 3.0+)
print("Hello World!")OK,YOU GOT IT!

2 Arcpy介绍

什么是Arcpy?
在这里简单介绍一下Arcpy,详细说明参见ArcGIS相关帮助文档。ArcGIS采用ArcPy为用户提供了使用Python语言操作所有地理处理工具(包括ArcGIS扩展模块)的方法,并提供了多种有用的函数和类。目的是为以实用高效的方式通过Python执行数据处理分析、数据转换、数据管理和地图自动化创建基础。因此,使用Python和ArcPy,可以实现地理或遥感大数据的批量处理。
Arcpy的安装和使用
Arcpy无法单独安装使用,其底层实现是完全依托在Arcgiscripting上的,并且由于历史的原因,所有的Arcpy模块都会依赖Geoprocessing模块中的部分函数来实现对Arcgisscripting的访问。
ArcGIS Desktop安装后,在安装目录下会出现Arcpy文件夹,其中包含有Python函数、类和模块。用户可以使用Python语言调用ArcObject的相关类。
Arcpy提供的功能:
  • 访问所有地理处理工具
  • 数据转换和数据处理
  • 数据分析
  • 自动化制图等
使用Python和Arcpy,可以开发出大量用于空间数据批处理的实用程序。

3 数据批处理实现案例

当我们下载了大量遥感影像数据(如风云卫星数据产品,为国产数据打call),一般不可能直接就可以使用,需要进行一定的预数据处理,才能达到我们的使用标准。在这个过程中,一般情况下可能涉及到的数据处理有“定义投影”、“投影变换”、“地图配置”、“数据裁剪”、“重采样”等等。下面具体介绍程序编写实现方法。
以栅格数据裁剪为例。
首先,引入Arcpy包,
import arcpy

调用Arcpy的栅格裁剪函数,
# function: RasterClip
def RasterClip(datadir, in_raster, extent_feature, out_raster):
    '''
    :param datadir: data direction
    :param in_raster: raster data to be clip
    :param extent_feature: cutting boundary
    :param file_name: output
    '''
    try:
        arcpy.Clip_management(in_raster, "#", out_raster, extent_feature, "#", "ClippingGeometry")
        print(arcpy.GetMessages(0))
        print "Clip completed!\nSave as '%s'\n" % (clipForld + os.sep + tifNameList[j] + "_clip.tif")
    except:
        print arcpy.GetMessages()
        print "Process failed."


以上函数可以进行一幅影像的裁剪,接下来便可以实现批处理功能,获取待裁剪栅格数据文件路径及文件名函数如下,
# function: getFileList
def getFileList(datadir, ftype):
    '''
    :param dataDir: forld path
    :param ftype: file suffix(.*)
    :return: full path, file name(without suffix)
    '''
    fileFullPathList = []
    fileNameList = []
    filenameList = os.listdir(datadir)
    for fn in filenameList:
        file_name, file_ext = os.path.splitext(fn)
        if file_ext == ftype:
            fileFullPathList.append(datadir + os.sep + fn)
            fileNameList.append(file_name)
    return fileFullPathList, fileNameList

最后,遍历所有要裁剪的数据,实现数据批量裁剪,
# Define data direction and vector data of boundary
datadir = r'D:\data...'
extentFeature = r'D:\...\*.shp'

# Get data
fType = '.tif'
print "Get %s file......" % fType
fileList = getFileList(datadir, fType)

# Create forld
clipForld = datadir + os.sep + "clip"
if not os.path.isdir(clipForld):
    os.makedirs(clipForld)

for i in range(len(fileList[0])):
out_raster = datadir + os.sep + file_name +"_clip.tif"
    RasterClip(clipForld, fileList[0][i], extentFeature, out_raster)

完成数据批处理!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ARC 批处理 Hello World Processing Management

地理遥感生态网官方平台

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 14:46