gdal.Warp进行矢量裁剪

gdal.Warp工具可以用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等方面,关键的参数在于options,可参考文档gdal.Warp的说明,通过文档中osgeo.gdal.Warp、osgeo.gdal.WarpOptions这两个模块的说明,可以了解到gdal.Warp的具体应用方式,本文主要是针对矢量裁剪的功能进行说明。

options的主要参数如下:

WarpOptions(options=None, format=None, 
outputBounds=None, outputBoundsSRS=None, xRes=None, yRes=None, 
targetAlignedPixels=False, width=0, height=0, srcSRS=None, 
dstSRS=None, coordinateOperation=None, srcAlpha=False, 
dstAlpha=False, warpOptions=None, errorThreshold=None, 
warpMemoryLimit=None, creationOptions=None, 
outputType=gdalconst.GDT_Unknown, 
workingType=gdalconst.GDT_Unknown, resampleAlg=None, 
srcNodata=None, dstNodata=None, multithread=False, 
tps=False, rpc=False, geoloc=False, polynomialOrder=None, 
transformerOptions=None, cutlineDSName=None, 
cutlineLayer=None, cutlineWhere=None, cutlineSQL=None, 
cutlineBlend=None, cropToCutline=False, copyMetadata=True, 
metadataConflictValue=None, setColorInterpretation=False, 
overviewLevel='AUTO', callback=None, callback_data=None)

矢量裁剪中,主要用到的是cutlineDSName、cutlineLayer、cutlineWhere、cutlineSQL、cutlineBlend、cropToCutline这几项,参考文章使用GDAL(Python)对遥感影像进行裁剪完成批量裁剪任务

代码如下:

import numpy as np
# gdal用来处理栅格数据
from osgeo import gdal
# ogr用来处理矢量数据
from osgeo import ogr
import os
from os.path import join
import shapefile
from boxplot import boxplot
import pandas as pd
from pandas import DataFrame

# 矢量以及栅格保存路径
shp_root = r'D:\...\厂区UTM50.shp'
path_root = r'D:\...\T'
save_root = r'D:\...\TG'

if not os.path.exists(save_root):
    os.makedirs(save_root)

# 定义栅格的读取
gdal.AllRegister()
def ImgOpen(dir):
    data = gdal.Open(dir, gdal.GA_ReadOnly)
    if data == 'None':
        print('图像无法加载')
    return data
# 根据路径判断尾缀
path_names = sorted(os.listdir(path_root))
# 设置矢量及栅格数据的保存位置
img_path = []
# 判断文件尾缀,保存到对应的矢量或栅格列表中
for path_name in path_names:
    path_namefor = os.path.splitext(path_name)[0]
    path_nameend = os.path.splitext(path_name)[1]
    if (path_nameend.lower() == '.tif'):
        img_path.append(path_name)
# 开始读取矢量以及对应的栅格数据进行处理

for i in range(len(img_path)):
    img_file = ImgOpen(join(path_root, img_path[i]))
    out_name = img_path[i].split('.')[0] + 'shpcut.tif'
    out_root = join(save_root, out_name)
    # r = shapefile.Reader(shp_root)
    ds = gdal.Warp(out_root, # 裁剪图像保存完整路径(包括文件名)
                   img_file, # 待裁剪的影像
                   format='GTiff', # 保存图像的格式
                   cutlineDSName=shp_root, # 矢量文件的完整路径
                   cropToCutline=True, # 保证裁剪后影像大小跟矢量文件的图框大小一致(设置为False时,结果图像大小会跟待裁剪影像大小一样,则会出现大量的空值区域)
                   # cutlineWhere="FIELD = 'whatever'",
                   dstNodata=0)

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 `gdal.Warp()` 方法进行图像裁剪时,将非背景区域的零值替换为1,您可以按照以下步骤进行调整: 1. 确保您已经导入了 `gdal` 模块: ```python from osgeo import gdal ``` 2. 定义裁剪后输出图像的路径和文件名: ```python output_raster = 'output_image.tif' ``` 3. 打开输入图像和裁剪范围: ```python input_raster = gdal.Open('input_image.tif', gdal.GA_ReadOnly) input_shape = gdal.Open('clip_shape.shp', gdal.GA_ReadOnly) ``` 4. 设置裁剪参数,包括输出格式、裁剪范围和是否裁剪裁剪范围: ```python cutline_options = gdal.WarpOptions(cutlineDSName=input_shape, cropToCutline=True) ``` 5. 定义要替换的零值和替换的值: ```python background_value = 0 replacement_value = 1 ``` 6. 执行图像裁剪并替换零值: ```python gdal.Warp(output_raster, input_raster, options=cutline_options, dstNodata=replacement_value, srcNodata=background_value) ``` 在上述代码中,我们使用 `gdal.Warp()` 方法执行图像裁剪,通过设置 `options` 参数为 `cutline_options` 来指定裁剪范围。同时,我们使用 `dstNodata` 参数将非背景区域的零值替换为 `replacement_value`。通过设置 `srcNodata` 参数,可以确保仅替换非背景区域的零值。 请注意,这只是一个基本示例,您可能需要根据您的实际需求对代码进行修改和调整。此外,您还需要确保已正确安装 GDAL 库,并具有适当的读写权限来操作图像和矢量文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值