Python遥感开发之批量掩膜和裁剪

news2025/8/3 23:50:19

Python遥感开发之批量掩膜和裁剪

  • 1.使用arcpy进行批量掩膜
    • 1.1 批量掩膜代码
    • 1.2 单个掩膜代码
  • 2.使用GDAL进行批量掩膜
  • 3.使用rasterio进行批量裁剪

前言:主要介绍了使用arcpy、gdal、rasterio对遥感影像进行批量掩膜和裁剪。


1.使用arcpy进行批量掩膜

注意:arcpy是基于python2.7版本的,也就是arcgis里面自带的,使用的时候添加arcgis的python2.7,即可使用arcpy。
环境如图所示:
在这里插入图片描述

1.1 批量掩膜代码

  • filepath:需要掩膜的tif文件夹
  • outfile :掩膜好的tif保存的文件夹
  • inMaskData :可以是shp,可以是tif
  • unicode:因为python2.7下直接支持中文路径,使用unicode可以支持中文路径
# coding=UTF-8
import arcpy,os,glob
from arcpy import env

if __name__ == '__main__':
    filepath = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI", "utf-8")
    outfile = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI", "utf-8")
    inMaskData = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp", "utf-8") #shp文件可以换成tif文件
    arcpy.CheckOutExtension("Spatial")
    env.workspace = filepath
    os.chdir(filepath)
    names = glob.glob("*.tif")
    for name in names:
        arcpy.gp.ExtractByMask_sa(name, inMaskData, outfile + "\\" + name.split(".")[0] + ".tif")
        print(name + '-----掩膜成功')
    #删除多余的文件
    for file_i in glob.glob(os.path.join(outfile, '*.xml')):
        os.remove(file_i)
    for file_i in glob.glob(os.path.join(outfile, '*.tfw')):
        os.remove(file_i)

在这里插入图片描述

1.2 单个掩膜代码

# coding=UTF-8
import arcpy

if __name__ == '__main__':
    filepath = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI\modis_ndvi_2019_10_08.tif", "utf-8")
    outfile = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI\new_modis_ndvi_2019_10_08.tif", "utf-8")
    inMaskData = unicode(r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp", "utf-8") #shp文件可以换成tif文件
    arcpy.CheckOutExtension("Spatial")
    arcpy.gp.ExtractByMask_sa(filepath, inMaskData, outfile)

在这里插入图片描述

2.使用GDAL进行批量掩膜

注意:GDAL是基于Python3.x系列的,需要自己安装GDAL,使用的时候arcpy使用的时候一定要区分开。

from osgeo import gdal
import os
import glob

def mask_gdal(inMaskData,filepath,outfile):
    """
    GDAL掩膜提取
    :param inMaskData: 圈选范围的路径  shp文件可以换成tif文件
    :param filepath: 要掩膜的tif文件
    :param outfile: 掩膜好的tif文件
    :return:
    """
    dataset = gdal.Open(filepath)  # 打开遥感影像
    gdal.Warp(outfile, dataset, cutlineDSName=inMaskData, cropToCutline=True)  # 按掩膜提取
    print(filepath + '-----掩膜成功')

if __name__ == '__main__':
    filepath = r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI"  # 要裁剪的tif文件所在的文件夹
    outfile = r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI"
    inMaskData = r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp"  # 圈选范围的路径  shp文件可以换成tif文件
    os.chdir(filepath)
    names = glob.glob("*.tif")  # 读取文件
    for name in names:
        out = outfile + "\\" + name.split(".")[0] + ".tif"  # 按照圈选范围提取出的影像所存放的路径
        mask_gdal(inMaskData,name,out)

在这里插入图片描述

3.使用rasterio进行批量裁剪

注意:rasterio也是基于python3.x系列的,需要自己安装rasterio包

import os
import glob
import rasterio as rio
import rasterio.mask
import numpy as np
from geopandas import GeoDataFrame


def clip_raster(inMaskData,filepath,outfile):
    """
    raster裁剪提取
    :param inMaskData:圈选范围的路径  shp文件可以换成tif文件
    :param filepath:要裁剪的tif文件
    :param outfile:裁剪好的tif文件
    :return:
    """
    #shp转geojson
    shpdata = GeoDataFrame.from_file(inMaskData)
    geo = shpdata.geometry[0]
    feature = [geo.__geo_interface__]
    #裁剪
    src = rio.open(filepath)
    out_image, out_transform = rio.mask.mask(src, feature, crop=True, nodata=np.nan)
    out_meta = src.meta.copy()
    out_meta.update({"driver": "GTiff","height": out_image.shape[1],"width": out_image.shape[2],"transform": out_transform})
    band_mask = rasterio.open(outfile, "w", **out_meta)
    band_mask.write(out_image)
    print(filepath + '-----裁剪成功')

if __name__ == '__main__':

    filepath = r"D:\0000Desktop\AAAAAwork\研究方向\data\河南NDVI"  # 要裁剪的tif文件所在的文件夹
    outfile = r"D:\0000Desktop\AAAAAwork\研究方向\data\鹿邑NDVI"
    inMaskData = r"D:\0000Desktop\AAAAAwork\研究方向\矢量图\鹿邑县\luyixian.shp"  # 圈选范围的路径  shp文件可以换成tif文件
    os.chdir(filepath)
    names = glob.glob("*.tif")  # 读取文件
    for name in names:
        out = outfile + "\\" + name.split(".")[0] + ".tif"  # 按照圈选范围提取出的影像所存放的路径
        clip_raster(inMaskData,name,out)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot——日志文件

文章目录1.日志的作用2.日志的用法3.自定义日志打印日志格式的说明4.日志级别5.在配置文件中设置日志级别5.1设置全局的日志级别和局部文件夹的日志级别6. 日志持久化7. 更简单的日志输出-lombok1.日志的作用 日志的作用:用来排除和定位问题 通过日志还可以具有以…

Greenplum数据库故障排查及修复

场景一:gp服务正常,存在部分segment实例丢失 1、异常现象 主节点切换gpadmin用户输入gpstate查看状态 如果红色框内有指向左边的箭头则说明存在部分segment实例丢失。 2、排查思路 首先查看主节点日志,重点关注发生segment丢失那段时间的…

【ML特征工程】第 3 章 :文本数据:扁平化、过滤和分块

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

关于SD-WAN的十问十答(最强攻略戳这里)

1. WAN和SD-WAN之间的区别? 从底层来看,相较基于硬件物理设施的WAN,SD-WAN是一种覆盖现有网络的软件技术,是部署在物理基础设施下层的流量管理网络。 和常规WAN相比,SD-WAN具有虚拟WAN体系结构和软件驱动技术&#xff…

[附源码]java毕业设计圆梦山区贫困学生助学系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

EasyRecovery适用于Windows和Mac的专业硬盘恢复软件

电脑中的数据文件对很多的小伙伴来说都是非常重要的,在下载安装新的软件设备时都需要非常谨慎,一旦碰到一些问题就可能会导致文件丢失,想要恢复这些文件并不是很容易,需要使用专业的数据恢复工具才可以对其进行恢复,那…

考研数据结构填空题整合_做题版

考研数据结构填空题整合 目录考研数据结构填空题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八二、TJP组TJP组一TJP组二TJP组三三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组六LZH 组七四、LB组LB组一LB组二LB组三LB组四LB组五LB组六LB组…

2022年戈登·贝尔奖授予等离子体加速器突破研究

ACM 总裁Cherri Pancake(图片来源:网络) 11月17日,在达拉斯举行的SC22颁奖典礼上,ACM将2022年戈登贝尔奖(Gordon Bell Prize)授予了一组研究人员,他们利用四台超级计算机&#xff08…

kill-9 用时一时爽,悔恨火葬场!!!

目录 前言 kill -9 和kill -15的区别 常见的信号值有: 信号值9和15的区别: 总结 前言 相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌…

Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)

需要源码请点赞关注收藏后评论区留下QQ~~~ 一、拖动条和滑动条 拖动条SeekBar继承自进度条ProgressBar,它与进度条的不同之处在于,进度条只能在代码中修改进度值,不能由用户改变进度值,拖动条不仅可以在代码中修改进度值&#xf…

ONE 2.0应用场景解读 | 如何通过时序拓扑直观还原故障传导链路?

近年来,随着数字化转型的不断推进,电子商务发展迅速,推动人们的购物行为随之发生转变,在线购物已成为人们的主要购物方式之一。相关数据表明,超过九成的中国网民使用过在线购物平台。 面对庞大的在线用户流量&#xf…

KMP算法——通俗易懂讲好KMP算法:实例图解分析+详细代码注解 --》你的所有疑惑在本文都能得到解答

1.kmp算法基本介绍 KMP 是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法。Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP 算法”,常用于在一个文本串 S 内查找一个模式串 P 的出现位置,这…

使用koa框架部署项目

将打包好的代码打包上线,并在nodejs中代理跨域 前端工程师完成开发流程,按照常规的做法,此时,运维会将我们的代码部署到阿里云的ngix服务上,对于我们而言,我们可以将其部署到本机的nodejs环境中 企业代码部…

AI产业沙龙【语音之家】—京东在AI语音方向的技术探索与实践

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟(AIIA)评估组、京东科技、语音之家、希尔贝壳共同主办的【语音之家】AI产业沙龙—京东在AI语音方向的技术探索与实践,将于2022年11月29日19:30-21:30线上直播。 沙龙简介 如今人机对话…

【构建ML驱动的应用程序】第 10 章 :为模型构建安全措施

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

MYSQL进阶(3)

SQL语句的优化: 1)Insert语句的优化:我们如果说向数据库中插入数据,可以从下面几个方面来进行优化: 1.1)批量插入数据,values后面加上多个括号 1.2)手动控制事务,关闭自动提交,避免大量用到事务 1.3)按照主键顺序插入 2)大批量插入…

unity和C#的多线程 Thread的IsBackground属性,详解

Thread的IsBackground = true;//主程序结束后,线程随之结束 【日常要用到的】 Thread的IsBackground = false;//主程序结束后,线程不会随之结束 案例1、 using System; using System.Threading; namespace ConsoleApp1 { class Program { static void Main(st…

【数据结构】顺序表—纯C实现顺序表

顺序表文章目录定义特点缺陷静态顺序表动态顺序表接口实现顺序表初始化顺序表销毁顺序表增容头部的插入删除头插头删尾部的插入删除尾插尾删中间的插入删除中间插入中间删除顺序表查找顺序表打印定义 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xf…

sklearn.metrics模块重要API总结(持续更新)

目录前言各类指标分类指标(Classification metrics)sklearn.metrics.accuracy_scoresklearn.metrics.aucaverage_precision_score (AP)回归指标(Regression metrics)多标签排序指标(Multilabel ranking metrics&#x…

JUC05-AQS、ReentrantLock原理

一、AQS 全称是 AbstractQueuedSynchronizer,是同步器的相关框架,juc中很多锁的实现类依赖同步器(AQS的子类)完成核心操作 要点 内部维护state变量资源状态,state0表示当前无线程占用,state!0代表该锁正在被线程占用提供FIFO的等待队列&…