使用Arcpy进行数据批处理-批量裁剪

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 使用Arcpy进行数据批处理-批量裁剪

时空大数据使我们面临前所未有的机遇和挑战,尤其在地学、遥感或空间技术等专业领域,无疑是一个全新的时代。


伴随着时空大数据的到来,海量数据的处理是一个所有科研工作者都无法忽视的重要问题。传统的数据(主要指空间数据)处理工具已无法满足大数据处理的要求,而且笨拙的传统工具数据处理方式无疑是科研道路上的绊脚石,使我们面对大数据处理需求时手忙脚乱。因此,数据批处理的方式很大程度上解决了这一问题,解放大量劳动力。


对于空间数据来说,常用的传统数据处理工具或软件包括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"

ifnot 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)

完成数据批处理!

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
存储 编解码 Cloud Native
音视频 fmpeg命令裁剪和合并视频
音视频 fmpeg命令裁剪和合并视频
|
6月前
|
计算机视觉
OpenCV通道分离、合并、混和
OpenCV通道分离、合并、混和
|
存储 缓存 定位技术
ArcGIS Pro栅格数据批量预处理工具
ArcGIS Pro栅格数据批量预处理工具
441 0
|
7月前
|
定位技术 Python
Python ArcPy将多个文件夹内大量遥感影像批量四等分裁剪或切割为N×M个部分
Python ArcPy将多个文件夹内大量遥感影像批量四等分裁剪或切割为N×M个部分
104 1
Python ArcPy将多个文件夹内大量遥感影像批量四等分裁剪或切割为N×M个部分
|
7月前
|
存储 定位技术 Python
Python中ArcPy实现Excel时序数据读取、反距离加权IDW插值与批量掩膜
Python中ArcPy实现Excel时序数据读取、反距离加权IDW插值与批量掩膜
|
7月前
|
算法 定位技术 数据处理
C++中GDAL批量创建多个栅格图像文件并批量写入数据
C++中GDAL批量创建多个栅格图像文件并批量写入数据
|
7月前
|
存储 数据格式 Python
Python中arcpy栅格创建与遥感影像多景数据批量拼接Mosaic
Python中arcpy栅格创建与遥感影像多景数据批量拼接Mosaic
116 1
|
7月前
|
存储 编解码 定位技术
Python中ArcPy实现栅格图像文件批量掩膜与批量重采样
Python中ArcPy实现栅格图像文件批量掩膜与批量重采样
167 1
|
7月前
|
Serverless 定位技术 C++
R语言raster包批量读取单一或大量栅格图像
R语言raster包批量读取单一或大量栅格图像
146 1
|
7月前
|
定位技术 Python
Python中ArcPy栅格裁剪栅格:批量对齐栅格图像范围并统一行数与列数
Python中ArcPy栅格裁剪栅格:批量对齐栅格图像范围并统一行数与列数
154 1