首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

依据矢量要素批量分割栅格为多部分:ArcPy

  本文介绍基于Python中ArcPy模块,基于具有多个面要素的要素类,批量分割大量栅格图像的方法。

  首先明确一下我们的需求。现在需要基于一个面要素类,对一个栅格遥感影像加以分割;如下图所示。这个面要素类中有3个部分,我们希望将背景的这个遥感影像也依据这3个要素的划分方式,进行切割,从而得到3个小区域对应的栅格数据。同时,我们有很多张同一空间范围的栅格遥感影像,都希望通过这一方式对其加以分割,即需要批量进行上述操作。

  其中,如果大家想基于ArcMap软件,不用代码从而实现这一操作,可以基于文章ArcMap栅格分割工具Split Raster得不到结果怎么办?中提到的分割栅格Split Raster)工具加以实现。本文就介绍基于代码来实现这一操作的具体步骤。

  本文需要用到的代码如下。

1# -*- coding: utf-8 -*-

2"""

3Created on Tue Dec 27 17:19:07 2022

4

5@author: fkxxgis

6"""

7

8import arcpy

9

10tif_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Original"

11result_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Split"

12shp_file_name = r"E:\02_Project\01_Chlorophyll\ClimateZone\SCClimateP.shp"

13arcpy.env.workspace = tif_file_path

14arcpy.env.parallelProcessingFactor = 0

15

16tif_file_list = arcpy.ListRasters("*", "tif")

17

18for tif_file in tif_file_list:

19    arcpy.SplitRaster_management(tif_file,

20                                 result_file_path,

21                                 tif_file.split(".tif")[0],

22                                 "POLYGON_FEATURES",

23                                 "TIFF",

24                                 "BILINEAR",

25                                 "#",

26                                 "#",

27                                 "#",

28                                 "#",

29                                 "#",

30                                 "#",

31                                 shp_file_name,

32                                 "#",

33                                 "#",

34                                 "0")

  其中,tif_file_path是保存有我们待分割的栅格图像的路径,result_file_path是分割后各个结果图像的保存路径,shp_file_name是分割栅格图像所用矢量面要素的文件路径与名称。

  代码整体思路也很简单:首先,我们基于arcpy.ListRasters()函数,获取tif_file_path路径下原有的全部.tif格式的图像文件,并以列表的形式存放于tif_file_list中;随后,逐一取出tif_file_list列表中的栅格文件,进行分割处理。

  在这里,我们的分割操作是基于arcpy.SplitRaster_management()函数来实现的。这一函数有很多参数,具体各个参数的含义大家直接参考ArcMap软件软件官网即可,这里就仅对本文中需要用到的参数加以介绍。其中,前两个参数就分别是我们待处理数据和结果数据的保存路径,第三个参数是每一个大的栅格图像(也就是待分割的图像)在被分为多个小图像后,每一个小图像的命名前缀。在这里,我们通过.split()函数,直接将原有每一个大的栅格图像的名称作为小图像的命名前缀;后面得到多个小图像结果后,程序会自动在这个命名前缀的后面加上对应的数字编号,从而区分每一个小图像

  接下来,第四个参数"POLYGON_FEATURES"表示我们将通过矢量要素来确定图像分割的范围,第五个参数"TIFF"表明我们结果图像的格式为.tif文件,第六个参数"BILINEAR"表明我们将用双线性插值法来实现切割后图像的重采样;关于不同重采样方法的选择,大家可以参考文章ArcGIS栅格重采样的算法选择与具体操作。此外,接下来的几个"#"表示我们对这些参数暂时不配置;再靠后一个参数就是我们分割栅格图像所用的矢量要素数据。

  随后,依然是两个"#",表示我们对这些参数暂时不配置;最后一个参数"0",表明在大的栅格图像中所有值为0的像元,在分割后都将作为无效值(NoData值)的像元。

  此外,还有一点需要注意的是,上述代码中我们通过arcpy.env.parallelProcessingFactor参数,将“Parallel Processing”选项设置为0;如果我们不这么设置的话,大概率这段代码是无法成功运行的;具体为什么要这么设置,大家可以参考文章ArcMap栅格分割工具Split Raster得不到结果怎么办?,这里就不再赘述。

  运行上述代码,我们即可在结果保存路径result_file_path中看到各个栅格图像被分割后所得到的各个结果。

  至此,大功告成。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/Otnl0NORnByMEBdkQwjZT69g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券