翼度科技»论坛 编程开发 python 查看内容

Python中ArcPy栅格裁剪栅格(批量对齐栅格图像范围并统一行数与列数)

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
  本文介绍基于Python
  1. ArcPy
复制代码
模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围统一其各自行数列数的方法。
  首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格影像之间的空间范围行数列数、像元的位置等都不完全一致;例如,某一景栅格影像会比其他栅格影像多出一行,而另一景栅格影像可能又会比其他栅格影像少一列等等。我们希望可以以其中某一景栅格影像为标准,将全部的栅格影像的具体范围、行数、列数等加以统一。
  本文所用到的具体代码如下。
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Dec 29 21:13:19 2022

  4. @author: fkxxgis
  5. """

  6. import arcpy

  7. tif_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Original"
  8. result_file_path = r"E:\02_Project\01_Chlorophyll\ClimateZone\Original_Snap/"
  9. snap_file_name = r"E:\02_Project\01_Chlorophyll\ClimateZone\Original\F_LC.tif"

  10. arcpy.env.workspace = tif_file_path
  11. arcpy.env.snapRaster = snap_file_name

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

  13. for tif_file in tif_file_list:
  14.     key_name = tif_file.split(".tif")[0] + "S.tif"
  15.     arcpy.Clip_management(tif_file,
  16.                           "#",
  17.                           result_file_path + key_name,
  18.                           snap_file_name,
  19.                           "#",
  20.                           "#",
  21.                           "MAINTAIN_EXTENT")
复制代码
  其中,
  1. tif_file_path
复制代码
是保存有我们原有栅格图像的路径,
  1. result_file_path
复制代码
是裁剪后各个结果图像的保存路径(记得在这一路径后加一个正斜杠
  1. /
复制代码
,否则之后输出结果的路径会有问题),
  1. snap_file_name
复制代码
是裁剪其他栅格图像时,所用的模板栅格图像——因为我们要统一各个栅格图像的行号与列号,所以很显然,这里这个模板图像就需要找各个栅格图像中,行数与列数均为最少的那一景图像。这里需要注意,如果大家的各个栅格图像中,行数与列数最少的栅格不是同一个栅格,那么可以分别用行数最少、列数最少的这两个栅格分别作为模板,执行两次上述代码。
  代码整体思路也很简单:首先,我们基于
  1. arcpy.ListRasters()
复制代码
函数,获取
  1. tif_file_path
复制代码
路径下原有的全部
  1. .tif
复制代码
格式的图像文件,并以列表的形式存放于
  1. tif_file_list
复制代码
中;随后,逐一取出
  1. tif_file_list
复制代码
列表中的栅格文件,进行裁剪处理。这里的裁剪我们是通过
  1. arcpy.Clip_management()
复制代码
函数来实现的,其各项参数的具体含义大家可以参考官方帮助文档,我们这里就只对本文中需要修改的参数加以介绍。
  其中,第一个参数就是当前循环所用的栅格图像文件,第三个参数是结果文件的保存路径与文件名,第四个参数则是模板文件;最后一个参数
  1. "MAINTAIN_EXTENT"
复制代码
是为了保证得到的裁剪后结果图像严格与模板图像的行数、列数相匹配。除此之外,几个
  1. "#"
复制代码
表示我们对其他参数暂时不配置。
  此外,在代码开头的这句
  1. arcpy.env.snapRaster = snap_file_name
复制代码
,表明我们将以所选用的模板文件为标准,使得输出的结果文件的像元大小、图像范围等与模板文件保持一致。这里需要注意,这一句代码与前述的
  1. "MAINTAIN_EXTENT"
复制代码
参数缺一不可——只有二者同时出现,才可以保证输出结果与模板文件是严格一致的。
  另一方面,由于我们用到了ArcPy模块,因此如果大家的Python版本是
  1. 3.0
复制代码
及以上,则需要在ArcMap软件中的Python运行框,或其对应的IDLE(如下图所示)中运行上述代码。

  运行结果后,可以发现所有输出结果文件就具有完全一致的行数与列数了,且其各自的像元位置也是完全一致的。
到此这篇关于Python中ArcPy栅格裁剪栅格(批量对齐栅格图像范围并统一行数与列数)的文章就介绍到这了,更多相关Python arcpy栅格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/276372.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具