Python 按照shp行政边界切割tif的两种方式

news/2024/7/5 2:58:13

介绍两种按照shp行政边界切割tif文件的方式

1. gdal.Warp


from osgeo import gdal

shp_path="shp文件路径"
path="tif数据路径"

#读取shp
shp_dataset = gdal.OpenEx(shp_path, gdal.OF_VECTOR)
shp_layer = shp_dataset.GetLayer()
shp_srs = shp_layer.GetSpatialRef().ExportToWkt()
# 读取tif
driver = gdal.GetDriverByName("GTiff")
dataset = driver.Create(path, len(new_im_data[0]), len(new_im_data), 1, gdal.GDT_Float32)
# 我的shp文件中有多个城市  所以我这里是循环切割每个城市
for city_layer in shp_layer:
        print(city_layer.name)
        # 执行裁剪 output_dataset裁剪后的数据  获取数据第一个参数写'',需要保存到文件直接写保存路径format可不写
        output_dataset = gdal.Warp('',
        									# 原始数据
                                             dataset,
                                             # 保存到内存
                                             format='MEM',
                                             cropToCutline=True,
                                             # srs可以自定义或者使用shp文件中srs
                                             # dstSRS='EPSG:4326',
                                             dstSRS=shp_srs,
                                             #shp文件地址
                                             cutlineDSName=shp_path,
                                             # 查询条件 Name是shp文件中的字段  查询Name=XXX   shp中只有一个city可以不使用这个参数
                                             cutlineWhere=f'"Name"=\'{city_layer.name}\'',
                                             #指定重采样的方法 
                                             resampleAlg='bilinear',
                                             # 原始数据无效值
                                             srcNodata=-99,
                                             # 新数据设置无效值
                                             dstNodata=np.nan
                                             )
        output_data = output_dataset.ReadAsArray()

2. rasterio.mask

import rasterio
from rasterio.mask import mask
import geopandas as gpd

# 打开 shapefile 文件
shapefile_path = 'path/to/shapefile.shp'
shapefile = gpd.read_file(shapefile_path)

# 打开要裁剪的 GeoTIFF 文件
tiff_path = 'path/to/input.tif'
with rasterio.open(tiff_path) as src:
    # 使用 mask 函数进行裁剪
    out_image, out_transform = mask(src, gpd.read_file(city_shp_path + '.shp').geometry, crop=True)
    out_meta = src.meta.copy()

# 更新裁剪后图像的元数据
out_meta.update({"driver": "GTiff",
                 "height": out_image.shape[1],
                 "width": out_image.shape[2],
                 "transform": out_transform})

# 将裁剪后的图像保存到新文件中
output_path = 'path/to/output.tif'
with rasterio.open(output_path, "w", **out_meta) as dest:
    dest.write(out_image)

http://lihuaxi.xjx100.cn/news/1288464.html

相关文章

态路小课堂丨关于单纤双向CWDM波分复用的简介

TARLUZ态路 随着数据中心规模的增长和传输距离的增加,单模光纤传输技术被引入数据中心,同时被引入的还有WDM技术。由于数据中心对其成本较为敏感,因此,CWDM传输技术成为了其更好的选择。在CWDM系统中,主要有双纤单向CW…

linux-2.6.22.6内核总线设备驱动模型

开发一个驱动程序时,不免涉及到对硬件的相关操作,例如读取寄存器和引脚,在不利用任何框架的基础上,硬件代码总是和其他操作耦合到一块,这样做的坏处是代码耦合性太强,例如有三盏led灯,驱动程序每…

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值)

Python中的for循环语句及其应用举例(等差数列求和、阶乘、寻找最大值) 在学习任何编程语言的时候,不熟悉判断选择结构和循环结构,就难以发挥计算机优秀的计算能力和提高学习工作效率。本文将重点讲解Python中的for循环语句,并举例等差数列求…

easyConnect 报本地环境异常错误

一、检查任务管理器中发现ecagent.exe进程是禁用状态。如图: 二、在异常客户端上,找到easyconnect的安装目录(默认路径:C:\Program Files (x86)\Sangfor\SSL\ECAgent),找到ecagent.exe应用程序尝试手动执行…

H3C交换机在地址池下如何进行IP和MAC地址绑定

环境: H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述: H3C交换机在地址池下如何进行IP和MAC地址绑定 将MAC地址为0000-e03f-0305的PC机与IP地址10.1.1.1绑定,掩码为255.255.255.0 解决方案: 1.进入地址池视图 …

C# async await使用方法

运行界面: 代码部分: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using …

北上广深共享办公室市场概览

在北上广深这四个城市,共享办公室已经成为一种日益流行的办公模式。随着经济的快速发展和科技创新的不断推进,越来越多的企业开始青睐共享办公室,以适应灵活办公和协作办公的需求。那么,2023年共享办公室市场的前景如何呢&#xf…

DDR5这么快,为啥还能那么稳?

高速先生成员--姜杰 大家都在关注DDR5跑的有多快,高速先生却在关心它为什么能够跑的稳…… 内存的稳定性,离不开RAS功能。提起RAS,熟悉DDR的小伙伴们一定记得行地址选通信号(Row Address Strobe, RAS),不…