TM3、4波段GeoTiff数据计算NDVI
2013-11-18 14:58
169 查看
源码:
PRO TIFF_NDVI,F1,F2,FOUT
[code]F1 = DIALOG_PICKFILE(TITLE = 'B4 TIFF',FILTER='*.TIF',/READ)
F2 = DIALOG_PICKFILE(TITLE = 'B3 TIFF',FILTER='*.TIF',/READ)
FOUT =DIALOG_PICKFILE(TITLE = 'RESULT PATH',FILTER='*.TIF',/WRITE)
IF(FILE_TEST(F1) GT 0 AND FILE_TEST(F2) GT 0) THEN BEGIN
B1 = READ_TIFF(F1,GEOTIFF=GE1)
B2 = READ_TIFF(F2,GEOTIFF=GE2)
HELP,B1,B2
C = 0.001
WRITE_TIFF,FOUT,-1.0>( (FLOAT(B1)-FLOAT(B2))/(FLOAT(B1)+FLOAT(B2) + C) )<1.0,/FLOAT,GEOTIFF=GE2
PRINT,'OK
ENDIF
END
[/code]
.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 = 2
print,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,a
0
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) 计算ndvi
x = -1.0> x<1.0,将x与-1.0比较取大值,接着与1.0比较取小值,换句话说,就是将ndvi限定在[-1,1]区间。<是求小运算符,>是求大运算符
相关文章推荐
- SPOT5数据说明及其NDVI的计算方法
- SPOT5数据说明及其NDVI的计算方法
- 大数据和云计算究竟有什么关系?
- 关于数据溢出的计算
- 阿里云数加大数据计算服务MaxCompute学习路线图 (持续更新中)
- 大数据计算框架与平台
- 大数据(十四)Hadoop-MR编程 -- 【使用hadoop计算网页之间的PageRank值----概念】
- 大规模IM在线用户的计算和数据存储方案
- caffe学习系列:计算图片数据的均值
- MATLAB中存储中间数据以避免重复计算
- casio计算器计算统计数据
- java编程之计算球体体积(从对话窗体输入数据)
- NSDecimalNumber 金额数据的精确计算
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 云计算下---数据中心数据布局
- C++实现统计学数据计算
- 浅谈.Net并行计算之数据并行
- 1. 大数据实时计算介绍
- Mysql必知必会(笔记)【创建计算字段、使用数据处理函数、汇总数据】
- 2017中国云计算与大数据产业发展大会落幕