Python遥感开发之批量拼接

Python遥感开发之批量拼接

  • 1 遥感图像无交错的批量拼接
  • 2 遥感图像有交错的批量拼接

前言:主要借助python实现遥感影像的批量拼接,遥感影像的批量拼接主要分为两种情况,一种是遥感图像无交错,另一种情况是遥感图像相互有交错。具体实现请参考以下代码,如有问题请及时反馈。


1 遥感图像无交错的批量拼接

此方法是各个遥感文件是没有相互交错的拼接,如下图所示。个人可以使用Arcgis进行查看。
在这里插入图片描述
在这里插入图片描述

实现思路:通过每个遥感数据的经纬度进行拼接下一个遥感数据文件。

import os
from osgeo import gdal

def get_data_list(file_path, out = ""):
    list1 = []  # 文件的完整路径
    if os.path.isdir(file_path):
        fileList = os.listdir(file_path)
        if out != "":
            for f in fileList:
                out_data = out + "\\" + f
                out_data = out_data.replace(".HDF", "_ndvi.tif")
                list1.append(out_data)
        else:
            for f in fileList:
                pre_data = file_path + '\\' + f  # 文件的完整路径
                list1.append(pre_data)
        return list1

def get_same_list(image, infile_list):
    infile_list02 = []
    for data in infile_list:
        if image in data:
            # print("----", data)
            infile_list02.append(data)
    return infile_list02

def get_same_image_list(infile_list):
    image_list= []
    for file in infile_list:
        filename = file[-31:-23]
        if filename not in image_list:
            image_list.append(filename)
    return list(set(image_list))

def pinjie(infile_list,outfile):
    ds = gdal.Open(infile_list[0])
    cols = ds.RasterXSize
    rows = ds.RasterYSize
    ingeo = ds.GetGeoTransform()
    proj = ds.GetProjection()
    minx = ingeo[0]
    maxy = ingeo[3]
    maxx = ingeo[0] + ingeo[1] * cols
    miny = ingeo[3] + ingeo[5] * rows
    ds = None
    for file in infile_list[1:]:
        ds = gdal.Open(file)
        cols = ds.RasterXSize
        rows = ds.RasterYSize
        geo = ds.GetGeoTransform()
        minx_ = geo[0]
        maxy_ = geo[3]
        maxx_ = geo[0] + geo[1] * cols
        miny_ = geo[3] + geo[5] * rows
        minx = min(minx, minx_)
        maxy = max(maxy, maxy_)
        maxx = max(maxx, maxx_)
        miny = min(miny, miny_)
        geo = None
        ds = None
    newcols = int((maxx - minx) / abs(ingeo[1]))
    newrows = int((maxy - miny) / abs(ingeo[5]))
    driver = gdal.GetDriverByName("GTiff")
    outds = driver.Create(outfile, newcols, newrows, 1, gdal.GDT_Int16)
    outgeo = (minx, ingeo[1], 0, maxy, 0, ingeo[5])
    outds.SetGeoTransform(outgeo)
    outds.SetProjection(proj)
    outband = outds.GetRasterBand(1)
    for file in infile_list:
        ds = gdal.Open(file)
        data = ds.ReadAsArray()
        geo = ds.GetGeoTransform()
        x = int(abs((geo[0] - minx) / ingeo[1]))
        y = int(abs((geo[3] - maxy) / ingeo[5]))
        outband.WriteArray(data, x, y)
        ds = None
    outband.FlushCache()
    pass
if __name__ == '__main__':

    infile = r"C:\Users\Administrator\Desktop\01提取ndvi"
    outfile = r"C:\Users\Administrator\Desktop\02拼接"
    infile_list = get_data_list(infile)
    image_name_list = get_same_image_list(infile_list)
    print(image_name_list)
    for name in image_name_list:
        print(name)
        infile_list02 = get_same_list(name, infile_list)
        pinjie(infile_list02,outfile+"\\"+name+".tif")

2 遥感图像有交错的批量拼接

此方法是各个遥感文件是有相互交错的拼接,如下图所示,具体可以使用Arcgis进行查看。
在这里插入图片描述
在这里插入图片描述

实现思路:借助gdal中WarpOptions的方法实现,有点类似于镶嵌

import numpy as np
from osgeo import gdal, gdalconst
import os

def RasterMosaic(firstinputfilePath, inputfileList, outputfilePath):
    inputrasfile1 = gdal.Open(firstinputfilePath, gdal.GA_ReadOnly)  # 第一幅影像
    inputProj1 = inputrasfile1.GetProjection()
    options = gdal.WarpOptions(srcSRS=inputProj1, dstSRS=inputProj1, format='GTiff')
    gdal.Warp(outputfilePath, inputfileList, options=options)

def get_data_list(file_path, out=""):
    list1 = []  # 文件的完整路径
    if os.path.isdir(file_path):
        fileList = os.listdir(file_path)
        if out != "":
            for f in fileList:
                out_data = out + "\\" + f
                out_data = out_data.replace(".HDF", "_ndvi.tif")
                list1.append(out_data)
        else:
            for f in fileList:
                pre_data = file_path + '\\' + f  # 文件的完整路径
                list1.append(pre_data)
        return list1


def get_same_image_list(infile_list):
    image_list = []
    for file in infile_list:
        filename = file[-20:-12]
        if filename not in image_list:
            image_list.append(filename)
    return list(set(image_list))

def get_infile(image,infile_list):
    for data in infile_list:
        if image in data:
            return data

def get_same_list(image, infile_list):
    infile_list02 = []
    for data in infile_list:
        if image in data:
            infile_list02.append(data)
    return infile_list02

if __name__ == '__main__':
    inputfile_path = r"D:\风云数据\MERSI-II陆表反射比1KM段产品\b1\01原始"
    outfile = r"D:\风云数据\MERSI-II陆表反射比1KM段产品\b1\02拼接"
    infile_list = get_data_list(inputfile_path)
    image_list = get_same_image_list(infile_list)
    print(image_list)
    for image in image_list:
        firstinputfilePath = get_infile(image,infile_list)
        infile_list02 = get_same_list(image, infile_list)
        print(image)
        print(firstinputfilePath)
        print(infile_list02)
        RasterMosaic(firstinputfilePath, infile_list02, outfile+"\\"+image+"_b1.tif")
        print("-------")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【送书活动三期】解决docker服务假死问题

工作中使用docker-compose部署容器,有时候会出现使用docker-compose stop或docker-compose down命令想停掉容器,但是依然无法停止或者一直卡顿在停止中的阶段,这种问题很让人头疼啊! 目录 问题描述问题排查问题解决终极杀招-最粗暴…

c语言调用free,提示已触发了一个断点。

在用c语言写数据结构的链表的时候,执行也没有什么大错,逻辑也是对的,但是一道free函数会自动触发一个断点。如图: 这个断点产生的原因是由于分配的内存太小了在使用的时候没有任何问题,但是在执行程序的时候&#xff0…

【并发编程】volatile实现原理解析

📫作者简介:小明Java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于…

【嵌入式-51单片机】常见位运算和数据类型以及sbit使用

51单片机中 数据类型如下&#xff1a; 位运算符如下&#xff1a; 按位左移<<&#xff1a;低位补零&#xff0c;高位移出 按位右移>>&#xff1a;高位补零&#xff0c;低位移出 按位与&&#xff1a;对应位上的值必须同时为1才为1&#xff0c;可以用来对指定位…

uniapp实现文件预览过程

H5实现预览 <template><iframe :src"_url" style"width:100vw; height: 100vh;" frameborder"0"></iframe> </template> <script lang"ts"> export default {data() {return {_url: ,}},onLoad(option…

【SQLite3】约束总结

前面学习了SQLite数据库的常见使用方法&#xff0c;其中包含许多约束&#xff0c;常见的如NOT NULL、DEFAULT、UNIQUE、PRIMARY KEY&#xff08;主键&#xff09;、CHECK等 本篇文章主要介绍这些约束在SQLite中的使用 目录 什么是约束NOT NULL 约束DEFAULT约束UNIQUE约束PRIMA…

CAP BASE理论

CAP & BASE理论详解 CAP 理论 简介 CAP 也就是 Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition Tolerance&#xff08;分区容错性&#xff09; 这三个单词首字母组合。 CAP 理论的提出者布鲁尔在提出 CAP 猜想的时…

yolov8模型 onnxruntime推理及可视化

参考:https://github.com/ultralytics/ultralytics/blob/main/examples/YOLOv8-ONNXRuntime/main.py 1、yolov8 onnxruntime推理代码 1)导出参考:https://blog.csdn.net/weixin_42357472/article/details/131412851 2)查看保存的模型onnx的输入格式等信息 登录https://n…

关于微信公众号授权的几件事

背景 项目需要使用微信公众号发消息&#xff0c;然后就来接入这个微信授权啦&#xff0c;微信公众号发消息前提是还需要用户先关注公众号~ 微信授权是有点恶心的&#xff0c;真的真的需要先配置好环境&#xff0c;开发的话目前是可以使用测试号申请公众号使用测试号的appid~ …

(C语言)逆序输出字符串

#include<stdio.h> #include<string.h> int main() {int i;char s[100];scanf("%s",&s);int count strlen(s);for(int i count -1;i > 0; i --)printf("%c",s[i]);return 0;} 代码运行截图&#xff1a; 注&#xff1a;侵权可删

web:very_easy_sql(sql、ssrf、gopher协议sql注入)

题目 页面显示如下 显示不是内部用户&#xff0c;无法识别信息 查看源码&#xff0c;找到一个use.php 访问之后显示如下 随便输入了一个&#xff0c;发现url有参数显示 试一下靶机的网址&#xff0c;返回nonono 联系之前原始页面写的“不是内网用户&#xff0c;无法别识身份”…

「C++」哈希表的实现(unordered系底层)

&#x1f4bb;文章目录 &#x1f4c4;前言哈希表概念哈希函数 哈希冲突闭散列开散列 &#x1f4d3;总结 &#x1f4c4;前言 unordered系列的关联式容器之所以效率比较高,是因为其底层使用了哈希结构&#xff0c;使其在查找上的时间复杂度几乎减低到了 O ( 1 ) O(1) O(1)。 哈希…

一文了解工业互联网是什么,和传统互联网的区别有哪些

几个问题 工业互联网和传统互联网有什么区别 1 业务方面&#xff0c;传统的互联网企业更多是toC的业务&#xff0c;直接面对的是一个个的个体&#xff0c;而工业互联网离消费者更远一点&#xff0c;往往是toB或者toG的&#xff1b; 个人认为这也是最根本的区别&#xff0c;由…

Innodb数据空间占用探索

了解数据存储空间占用&#xff0c;可以更方便我们再企业中对于数据库相关优化做评估。 一、查看当前数据表空间占用信息 首先这里准备一张数据库表约2.3w数据量&#xff1a; CREATE TABLE project (tenantsid bigint(20) NOT NULL DEFAULT 0 COMMENT 租户ID,project_id bigi…

09-命令者模式-C语言实现

命令者模式是一个高内聚的模式&#xff0c; 其定义为&#xff1a; Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.&#xff08;将一个请求封装成一个对象&…

almalinux centos8系统zlmediakit编译安装

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题&#xff0c; cmake需要在线安装 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64 cmake mkdir -p /home/zenglg cd /home/zenglg git clon…

【开箱即用】前后端同时开源!周末和AI用Go语言共同研发了一款笔记留言小程序!

大家好&#xff0c;我是豆小匠。 真的是当你在怀疑AI会不会取代人类的时候&#xff0c;别人已经用AI工具加速几倍的生产速度了… 周末体验了和AI共同开发的感受&#xff0c;小项目真的可以一人全干了… 本次实验使用的AI工具有两个&#xff1a;1. GitHub Copilot&#xff08;…

JVM运行时数据区域

文章目录 内存结构程序计数器&#xff08;寄存器&#xff09;虚拟机栈局部变量表两类异常状况 线程运行诊断 本地方法栈堆方法区运行时常量池串池&#xff08;StringTable&#xff09;字符串的拼接串池的位置StringTable垃圾回收StringTable性能调优 直接内存 内存结构 程序计…

blue beacon rssi 指纹室内定位数据集

数据集是开展实验的基础&#xff0c;搜集并分享。如果你有关于室内定位的问题&#xff0c;请联系博主。 namedatesetpapercommentBLEBeacon: A Real-Subject Trial Dataset from Mobile Bluetooth Low Energy Beaconshttps://github.com/dimisik/BLEBeacon-Datasethttps://arxi…

【云备份】业务处理

文章目录 1. 业务处理作用功能 2. 代码框架编写构造函数UpLoad ——文件上传请求ListShow —— 展示页面请求处理实现Download —— 下载请求的处理实现断点续传实现 1. 业务处理 作用 业务处理模块是对客户端的业务请求进行处理 功能 1.文件上传请求&#xff1a;备份客户端…