Python中ArcPy栅格裁剪栅格(批量对齐栅格图像范围并统一行数与列数)
作者:疯狂学习GIS 发布时间:2021-02-19 21:12:48
  本文介绍基于Python中ArcPy
模块,实现基于栅格图像批量裁剪栅格图像,同时对齐各个栅格图像的空间范围,统一其各自行数与列数的方法。
  首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格影像之间的空间范围、行数与列数、像元的位置等都不完全一致;例如,某一景栅格影像会比其他栅格影像多出一行,而另一景栅格影像可能又会比其他栅格影像少一列等等。我们希望可以以其中某一景栅格影像为标准,将全部的栅格影像的具体范围、行数、列数等加以统一。
  本文所用到的具体代码如下。
# -*- 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(如下图所示)中运行上述代码。
  运行结果后,可以发现所有输出结果文件就具有完全一致的行数与列数了,且其各自的像元位置也是完全一致的。
来源:https://www.cnblogs.com/fkxxgis/p/17150814.html


猜你喜欢
- iframe的防插与强插(一)中介绍了“市面上”能见到的两种防御被第三方网站iframe的方法,以及相应的变态突破方法。貌似把“受害人”逼上
- 本文实例为大家分享了Python tkinter实现计算器功能的具体代码,供大家参考,具体内容如下python版本:3.5一.计算器的功能描
- 废话不多说,直接上代码!# coding:utf-8from multiprocessing import Poolimport timed
- 用户习惯大家都经常在提,习惯源于何出?回答可以是软件的用户习惯源于其不断使用过程中的印象积累。如果是这个软件刚诞生的时候呢?于是就得参考同类
- 笔者在运行 import tensorflow as tf时出现下面的错误,但在运行import tensorflow时没有出错。>&
- SpringBoot环境启动项目创建数据库表使用环境windows+eclipse+mysql+navicat步骤1.创建SpringBoo
- 下面我挑选出的这几个技巧常常会被人们忽略,但它们在日常编程中能真正的给我们带来不少帮助。 1. 字典推导(Dictionary compre
- SQL2000版本用JOB企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业
- redis是一个key-value存储结构。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、lis
- $server->connections//server−>connections遍历所有websocket连接用户的fd,给所
- 一.一维数组的转置描述一维数组的重塑就是将一行或一列的数组转换为多行多列的数组重塑之后的数组应于原有数组形状兼容(数组元素应该相等)用法和参
- Vigenere 加密算法该密码由意大利密码学家 Giovan Battista Bellaso 于 1553 年发明,但几个世纪以来一直归
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助。内容由海娃整理,不正确与不完整之处还请提出,谢谢
- 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。__slots__我们已经知道
- 在深度学习中,如果我们想获得某一个层上的feature map,就像下面的图这样,怎么做呢?我们的代码是使用keras写的VGG16网络,网
- function toBreakWord(intLen, id){ var obj=document.getElementById(id);
- Python中的字典一、字典的特点二、创建字典创建字典用大括号表示dict1={'a':3,'b':4,
- 前言今晚就是新年夜啦,为了 刷一波存在感 送出我的祝福,同时让它看起来不像群发消息,我们简单地用三步来实现定制QQ祝福~
- 处理下拉列表需要使用selenium中的工具类Select,常用方法如下:示例网站:http://sahitest.com/demo示例场景
- 一,cookie和session的区别cookie在客户的浏览器上,session存在服务器上cookie是不安全的,且有失效时间sessi