使用ENVI读取Earth Engine下载的图像波段名的方法
引言
Google旗下Earth Engine平台的用户越来越多,高效云计算赢得了众多学术科研人员的青睐。熟悉这个平台的读者应该都知道,如果使用代码var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI')
得到一个图像,并将其下载到本地,使用常用的遥感软件ENVI是无法读取到rename修改后的波段名的。
简介
基于以上原因,我使用Python3+GDAL写了一段简单的代码,可以通过输入tif图像,输出其对应的hdr头文件,这样就可以使用ENVI读取出它的波段名了。
代码
包括两个函数,getInfo
实现读取波段数和波段名,wHDR
实现写入相应的hdr头文件。
# -*- coding:utf-8 -*-
import os.path as path
import sys
from osgeo import gdal
from gdalconst import *#获取波段数和波段名的函数
#参数ifn:输入TIFF文件名
#返回包括波段数和波段名的list
def getInfo(ifn):info = []ds = gdal.Open(ifn, GA_ReadOnly)if ds is None:print("Unable to open this file.")return -1else:n_band = ds.RasterCountinfo.append(n_band)for idx in range(n_band):band_idx = ds.GetRasterBand(idx + 1)name_idx = band_idx.GetDescription()if name_idx == "":name_idx = "Band " + str(idx + 1) info.append(name_idx)return info#写入ENVI头文件的函数
#参数ofn:写入的头文件名,与ifn对应
#参数info:getInfo获取的数据
#返回1
def wHDR(ofn, info):line_1 = "ENVI\n"line_2 = "bands = " + str(info[0]) + "\n"line_3 = "band names = {"for idx in range(info[0]):if idx < info[0] - 1:line_3 += info[idx + 1] + ", "elif idx == info[0] - 1:line_3 += info[idx + 1]line_3 += "}"hdrText = line_1 + line_2 + line_3with open(ofn, "w") as f_txt:f_txt.write(hdrText)return 1#主函数
if __name__ == "__main__":ifn = sys.argv[-1]info = getInfo(ifn)ofn = path.splitext(ifn)[0]ofn += ".hdr"if wHDR(ofn, info) == 1:print("Done!")"""
deserts Tsung, CUIT
2019-09-28
"""
使用
- 如果计算机有Python3+GDAL,可以将代码保存为py文件,通过拖曳tif到py文件完成。
- 如果计算机没有Python3+GDAL,可以下载打包的exe文件,然后还是通过拖曳tif到exe程序完成。
示例
下图是通过Earth Engine下载的原始tif,ENVI无法读取波段名。
下图是通过添加头文件后使用ENVI打开的截图,可以识别波段名(为了测试,我只修改了B2和B5的波段名,其他均为默认的波段名)。
参考博客
GDAL读写多光谱影像的波段名称
使用ENVI读取Earth Engine下载的图像波段名的方法相关推荐
- Google Earth Engine 下载遥感影像——以Landsat 8数据为例
目录 1.Google Earth Engine(GEE)简介 1.1 开发环境 1.2 说明书 2.GEE账号注册 3.GEE 查询库内卫星影像以及调用 3.1 数据集Datasets 3.2 加载 ...
- Google Earth Engine(GEE)一键RUN的方法
在批量下载数据的时候,会有很多run的按钮,需要一个一个去点,很麻烦:类似于下图: 之前有大佬写的关于利用控制台直接批量导出的代码,需要在GEE上按"F12",复制代码,但是还是有 ...
- Google Earth Engine(GEE)——用两种方法计算NDWI水域面积提取(Landsat 8)
使用 Landsat 8 使用指标 NDWI 使用两种方法计算水域面积 ,这次我们随便选择了陕西附近的一个部分作为我们的研究区, 我们所需用到的函数: ee.Image(args) An object ...
- Google earth engine 下载哨兵二号数据
文章目录 上传ROI 加载ROI 运行任务 导入到谷歌云盘 上传ROI 加载ROI var district = ee.FeatureCollection("users/hammesbrid ...
- Google Earth Engine——NICFI 卫星图像开放的免费的高分辨率卫星图像
现在我们使用用于环境监测的分辨率(4.7 米)数据.从 2015 年提供双年度复合卫星影像,从 2020 年 9 月到至少 2022 年 9 月提供月度数据,太棒了!现在我们使用高分辨率(4.7 米) ...
- GEE_API Docs_Tutorials_1.编程基础和Earth Engine API入门
API Docs_Tutorials_1.编程基础和Earth Engine API入门 一.Introduction to JavaScript for Earth Engine(JavaScrip ...
- Google Earth Engine APP(GEE)——利物浦大学免费下载影像的软件Google Earth Engine Digitisation Tool (GEEDiT)
Google 地球引擎数字化工具 (GEEDiT) 旨在让任何研究人员能够快速访问卫星图像并将边缘直接数字化为线或多边形. GEEDiT 具有简单的用户界面,无需下载大量图像,利用 Earth Eng ...
- 使用Google Earth Engine (GEE)实现MODIS数据批量下载
使用Google Earth Engine GEE实现MODIS数据批量下载 前言 下载数据代码 批量执行run任务 关注公众号,分享GIS知识.ArcGIS教程.SCI论文与科研日常等 前言 上图是 ...
- 基于google earth engine(GEE)下载研究区域影像
基于google earth engine(GEE)下载研究区域影像 当研究需要Landsat数据时,我们可以通过USGS官网或者地理空间数据云平台下载.由于地理空间数据云目前无法下载到较新的数据,可 ...
最新文章
- 用iframe实现局部刷新的各种跳转方法(网上总结)
- ionic 获取input的值
- rust实战入门到进阶(3)
- 电子邮箱里面的服务器,搭建电子邮件服务器
- 如何反映两条曲线的拟合精度_你知道850加工中心定位精度的检测有哪些吗?
- 足不出户带你体验专业实验室,技术实现不在话下
- 这些大学,推迟返校!
- AIDA64 Extreme v5.80.4000
- 好用的文献论文管理软件 EndNote X 9.3.3 Mac版
- GP数据库获取指定时段的所有天数
- 阿里云商标注册查询入口(支持图形检索/45分类注册风险)
- 创业36条军规值得一读
- vue实现店铺装修h5用户端实现
- Python 重载向量加法运算符 +
- Promise is a promise
- (一)c#Winform自定义控件-基类控件-HZHControls
- Linux 笔记 - 第十一章 正则表达式
- 【每日笔记】:layui表单checkbox设为必选
- python读-Python之文件读写
- Python数据分析笔记:聚类算法之K均值
热门文章
- 广告行业有必要考PMP吗?
- fanuc机器人码垛和拆垛仿真
- FCPX插件电视信号故障转场效果
- 5.5. SURF (Speeded-Up Robust Features)简介
- 基于Tcl/Tk的HyperView后处理二次开发实例
- Nodejs 发送邮件 示例
- JavaScript 中的函数式编程:函数,组合和柯里化
- _nullable、nullable、nonnull区别
- (六)大白话MySQL是如何基于冷热数据分离的方案,来优化LRU算法?
- js阶段知识点总结测试题100道(做会这些题,js基础算是学明白了....)