笔记之栅格批量裁剪

(1)

#-*- encoding:UTF-8 -*- 
   
# Name: 根据矢量边界批量裁剪栅格
# Script: ExtractByMask02.py
# Author: zengsk in HHU
# Created: 2019/7/22
import arcpy
import os
import arcpy.sa
from arcpy import env


env.overwriteOutput=True # 允许覆盖
env.workspace = r'I:\syan\TIFF'# 栅格数据集所在文件夹
rasters = arcpy.ListRasters()
spatialRef = arcpy.SpatialReference(4326) # 给定一个坐标系 WGS_1984
print(rasters)
mask_fea = r'I:\syan\eth2level_Project.shp' # 矢量边界文件
sc = arcpy.CheckOutExtension("Spatial")
print("Clip...Clip...Clip...")
for ras in rasters:
    ras_name = os.path.basename(ras).split('.')[0]
    o_ras_name = r'I:\syan\TIFF'+os.sep+ras_name+'_clip.tif' # 输出文件名定义
    arcpy.DefineProjection_management(ras, spatialRef) # 定义坐标系
    oras=arcpy.sa.ExtractByMask(ras, mask_fea)
    oras.save(o_ras_name)
    print(ras_name, "... is being processed")
print('works have done!')

(2)R语言

if (!requireNamespace("terra", quietly = TRUE)) install.packages("terra")
if (!requireNamespace("sf", quietly = TRUE)) install.packages("sf")

library(terra)
library(sf)
# 定义栅格数据文件夹路径
raster_directory <- "F:/00pet"

# 定义矢量区域文件路径
vector_path <- "E:/02data/njdsq1_level1_PBuffer2km.shp"

# 读取矢量区域
vector_area <- st_read(vector_path)

# 获取所有.tif文件的列表
raster_files <- list.files(raster_directory, pattern = "\\.tif$", full.names = TRUE)

# 设置输出目录
output_directory <- "E:/02data/05mean/pet"

# 遍历所有栅格文件并进行裁剪
for (raster_file in raster_files) {
  # 读取栅格文件
  raster_layer <- rast(raster_file)
  
  # 将sf对象转换为SpatVector,以便与terra兼容
  vector_area_terra <- vect(vector_area)
  
  # 检查并确保CRS匹配,如果不匹配,则将矢量边界转换为栅格数据的CRS
  if (!crs(raster_layer) %in% crs(vector_area_terra)) {
    vector_area_terra <- project(vector_area_terra, crs(raster_layer))
  }
  
  # 裁剪栅格数据
  cropped_raster <- crop(raster_layer, vector_area_terra)
  masked_raster <- mask(cropped_raster, vector_area_terra)
  
  # 构建输出文件名
  output_file_name <- file.path(output_directory, paste0(tools::file_path_sans_ext(basename(raster_file)), ".tif"))
  
  # 导出裁剪后的栅格文件
  writeRaster(masked_raster, filename=output_file_name, overwrite=TRUE)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值