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

作者:疯狂学习GIS 时间:2021-02-19 21:12:48 

  本文介绍基于PythonArcPy模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围统一其各自行数列数的方法。

  首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格影像之间的空间范围行数列数、像元的位置等都不完全一致;例如,某一景栅格影像会比其他栅格影像多出一行,而另一景栅格影像可能又会比其他栅格影像少一列等等。我们希望可以以其中某一景栅格影像为标准,将全部的栅格影像的具体范围、行数、列数等加以统一。

  本文所用到的具体代码如下。

# -*- coding: utf-8 -*-
"""
Created on Thu Dec 29 21:13:19 2022

@author: fkxxgis
"""

import arcpy

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

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

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

for tif_file in tif_file_list:
   key_name = tif_file.split(".tif")[0] + "S.tif"
   arcpy.Clip_management(tif_file,
                         "#",
                         result_file_path + key_name,
                         snap_file_name,
                         "#",
                         "#",
                         "MAINTAIN_EXTENT")

  其中,tif_file_path是保存有我们原有栅格图像的路径,result_file_path是裁剪后各个结果图像的保存路径(记得在这一路径后加一个正斜杠/,否则之后输出结果的路径会有问题),snap_file_name是裁剪其他栅格图像时,所用的模板栅格图像——因为我们要统一各个栅格图像的行号与列号,所以很显然,这里这个模板图像就需要找各个栅格图像中,行数与列数均为最少的那一景图像。这里需要注意,如果大家的各个栅格图像中,行数与列数最少的栅格不是同一个栅格,那么可以分别用行数最少、列数最少的这两个栅格分别作为模板,执行两次上述代码。

  代码整体思路也很简单:首先,我们基于arcpy.ListRasters()函数,获取tif_file_path路径下原有的全部.tif格式的图像文件,并以列表的形式存放于tif_file_list中;随后,逐一取出tif_file_list列表中的栅格文件,进行裁剪处理。这里的裁剪我们是通过arcpy.Clip_management()函数来实现的,其各项参数的具体含义大家可以参考官方帮助文档,我们这里就只对本文中需要修改的参数加以介绍。

  其中,第一个参数就是当前循环所用的栅格图像文件,第三个参数是结果文件的保存路径与文件名,第四个参数则是模板文件;最后一个参数"MAINTAIN_EXTENT"是为了保证得到的裁剪后结果图像严格与模板图像的行数、列数相匹配。除此之外,几个"#"表示我们对其他参数暂时不配置。

  此外,在代码开头的这句arcpy.env.snapRaster = snap_file_name,表明我们将以所选用的模板文件为标准,使得输出的结果文件的像元大小、图像范围等与模板文件保持一致。这里需要注意,这一句代码与前述的"MAINTAIN_EXTENT"参数缺一不可——只有二者同时出现,才可以保证输出结果与模板文件是严格一致的。

  另一方面,由于我们用到了ArcPy模块,因此如果大家的Python版本是3.0及以上,则需要在ArcMap软件中的Python运行框,或其对应的IDLE(如下图所示)中运行上述代码。

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

  运行结果后,可以发现所有输出结果文件就具有完全一致的行数与列数了,且其各自的像元位置也是完全一致的。

来源:https://www.cnblogs.com/fkxxgis/p/17150814.html

标签:Python,arcpy,栅格
0
投稿

猜你喜欢

  • Python使用jupyter notebook查看ipynb文件过程解析

    2021-07-25 20:26:30
  • python pip特殊用法之pip install -v -e .命令详解

    2022-07-02 09:56:43
  • 使用JavaScript获取地址栏参数的方法

    2024-04-28 10:18:25
  • pytorch中torch.topk()函数的快速理解

    2023-09-07 10:21:52
  • 一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的

    2024-01-17 22:31:24
  • Python面向对象程序设计之类的定义与继承简单示例

    2022-03-24 03:00:16
  • 利用python实现蝴蝶曲线

    2022-09-30 18:51:51
  • 使用IDEA回滚某次提交的代码步骤

    2023-06-21 03:15:28
  • vue router路由嵌套不显示问题的解决方法

    2024-04-09 10:58:18
  • Python常用工具之音频调整音量

    2023-10-29 03:15:33
  • Python装饰器(decorator)定义与用法详解

    2022-07-21 03:11:25
  • Python之ReportLab绘制条形码和二维码的实例

    2023-06-26 09:43:30
  • Selenium(Python web测试工具)基本用法详解

    2022-08-02 22:04:39
  • mysql单字段多值分割和合并的处理方法

    2024-01-16 23:49:00
  • Firebug 必须掌握的技巧

    2009-12-21 20:04:00
  • js判断数组key是否存在(不用循环)的简单实例

    2024-04-17 10:40:35
  • Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年

    2023-08-08 12:12:04
  • Python AI编程助手AICodeHelper使用示例

    2022-01-15 03:22:22
  • python实现清屏的方法

    2021-11-02 04:10:32
  • Django 使用Ajax进行前后台交互的示例讲解

    2023-08-03 03:57:47
  • asp之家 网络编程 m.aspxhome.com