TM3、4波段GeoTiff数据计算NDVI
源码:
- 1: PRO TIFF_NDVI,F1,F2,FOUT
- 2: F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ)
- 3: F2 = DIALOG_PICKFILE(TITLE = 'B3 TIFF',FILTER='*.TIF',/READ)
- 4: FOUT =DIALOG_PICKFILE(TITLE = 'RESULT PATH',FILTER='*.TIF',/WRITE)
- 5: IF(FILE_TEST(F1) GT 0 AND FILE_TEST(F2) GT 0) THEN BEGIN
- 6: B1 = READ_TIFF(F1,GEOTIFF=GE1)
- 7: B2 = READ_TIFF(F2,GEOTIFF=GE2)
- 8: HELP,B1,B2
- 9: C = 0.001
- 10: WRITE_TIFF,FOUT,-1.0>( (FLOAT(B1)-FLOAT(B2))/(FLOAT(B1)+FLOAT(B2) + C) )<1.0,/FLOAT,GEOTIFF=GE2
- 11: PRINT,'OK
- 12: ENDIF
- 13: END
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
解释:
1> IDL是解释型语言,声明一个函数可以用“Pro或Function空格函数名,参数”的形式,函数块以End结束;如“PRO TIFF_NDVI,F1,F2,FOUT”,其中pro是声明符,TIFF_NDVI是函数名,f1,f2,fout是函数的参数。pro和function暂且都称为函数,除了声明符不同,在调用时也要注意。如下
pro test ,a
a = 2print,a
end
functiontest,a
a = 4
print,a
return,a
end
IDL> a = 0
IDL> print,a
0
IDL> test,a
2
IDL> g = test(a)
4
IDL> print,g
4
即function函数会return值,在调用function时函数参数都要用小括号括起来,同时需要有一个变量接收返回值
注意:IDL虽然对大小写不敏感,但建议将变量名小写,函数和参数名大写
2> IDL的函数调用完毕,会改变传入参数的值,类似于“传址调用”,上面代码:
IDL> a = 0
IDL> print,a0
IDL> test,a
2
可以发现a在调用test函数后,值发生了改变,这个很值得注意。
3> F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ) 这一句就是调用 DIALOG_PICKFILE函数返回tiff文件的路径,下两句也是获取tiff文件路径
4> IF(FILE_TEST(F1) GT 0 AND FILE_TEST(F2) GT 0) THEN BEGIN
选择分支if语句一般形式为
if statement then begin....
endif else begin
....
endelse
FILE_TEST(F1) GT0 ,FILE_TEST是一个function,用来检测文件是否已存在,存在返回1,否则返回0值
5> B1 = READ_TIFF(F1,GEOTIFF=GE1): 一句用READ_TIFF 这一function来读取tiff文件中的数据,geotiff参数用来提取tiff文件的地理信息,下一句作用类似;
6> HELP,B1,B2用来查询变量的维数信息,print函数用来输出变量值,如果变量不是数组,那么用help可直接输出变量的值。注意help一个结构体变量需加参数“/struct”
7> WRITE_TIFF,FOUT,-1.0>( (FLOAT(B1)-FLOAT(B2))/(FLOAT(B1)+FLOAT(B2) + C) )<1.0,/FLOAT,GEOTIFF=GE2这一句用来计算ndvi并保存为geotiff文件
WRITE_TIFF函数是一个pro,需要至少2个顺序参数,第一位是保存路径,第二位是数据变量;其他用“=”相连的参数顺序可随意,/float表示输出浮点型数据,geotiff用来追加地理信息。
-1.0>( (FLOAT(B1)-FLOAT(B2))/(FLOAT(B1)+FLOAT(B2) + C) )<1.0是计算ndvi的算式,可理解2步运算
x = (float(b1) – float(b2) )/ (float(b1) + float(b2) + c) 计算ndvix = -1.0> x<1.0,将x与-1.0比较取大值,接着与1.0比较取小值,换句话说,就是将ndvi限定在[-1,1]区间。<是求小运算符,>是求大运算符
TM3、4波段GeoTiff数据计算NDVI的更多相关文章
- 【270】IDL处理GeoTIFF数据
参考:将原GeoTIFF数据的投影坐标信息赋值到新创建的文件上 pro tiff_projection ;启动ENVI e = ENVI(/HEADLESS) ;打开文件 file = 'D:\01- ...
- 大数据计算平台Spark内核解读
1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...
- 大数据计算:如何仅用1.5KB内存为十亿对象计数
大数据计算:如何仅用1.5KB内存为十亿对象计数 Big Data Counting: How To Count A Billion Distinct Objects Using Only 1.5K ...
- Octave Tutorial(《Machine Learning》)之第三课《数据计算》
第三课 Culculating Data 数据计算 矩阵计算 1.简单的四则运算 2.相乘除,乘方运算(元素位运算) ".*"为对应元素的相乘计算 "./"为对 ...
- 阿里云大数据计算服务 - MaxCompute (原名 ODPS)
MaxCompute 是阿里EB级计算平台,经过十年磨砺,它成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务.去年MaxCompute 做了哪些工作,这些工作背后的原因是什么?大数据市场进入 ...
- 大数据计算框架Hadoop, Spark和MPI
转自:https://www.cnblogs.com/reed/p/7730338.html 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什 ...
- 高分一号计算NDVI
1.准备工作 如果想要ENVI友好一点,请下载ENVI5.3,并且安装China satellites 补丁(参考博客:ENVI扩展工具:中国国产卫星支持工具) App Store for ENVI下 ...
- 流式大数据计算实践(1)----Hadoop单机模式
一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...
- 大数据计算平台Spark内核全面解读
1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...
随机推荐
- HTTP SOAP Request
public string SoapRequest(string url, string message, string type, Encoding encoding) { string resul ...
- Hibernate查询、连接池、二级缓存
Hibernate第三天: 1. 对象状态 2. session缓存 3. lazy懒加载 4. 映射 一对一对映射 组件/继承映射 目标: 一.hibernate查询 二.hibernate对连接池 ...
- Jquery EasyUI datagrid后台数据表格生成及分页详解
由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...
- wordpress 修改过程
chown -R www /home/www/wordpress,把所有者修改成www. 如果不行 则 解决"要执行请求的操作,WordPress需要访问您网页服务器的权限"方法: ...
- webform在页面生成的代码与事件回传
<script type="text/javascript"> //<![CDATA[ var theForm = document.forms['form1'] ...
- Android系统手机端抓包方法(tcpdump)
抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root, ...
- 在命令提示符下,怎么查看windows开启了哪些服务?
net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...
- PHP运行模式(cgi,fast-cgi,cli, ISAPI ,web模块模式)【转载】
PHP运行模式有5钟: 1)cgi 通用网关接口(Common Gateway Interface))2)fast-cgi 常驻 (long-live) 型的 CGI3)cli 命令行运行 (C ...
- 关于IP在MySQL中的存储
对于很多新手而言,他们总会纠结,怎样才能更好的设计MySQL数据库呢:作为一个从菜鸟走过来的人,深有体会,刚开始我也不知道什么是外键.什么是事务处理.怎样合理的定义一个字段,说到字段,今天我就带领大家 ...
- 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
题目大意:给你一个n*m的矩阵,再给你一个小球,从(0,0)以sqrt(2)/s的速度向右上角出发,遇到边框会反弹,遇到角落就直接停止,给你一些点,问小球第一次经过这些点所需要的时间. 思路:模拟一下 ...