源码:

       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 = 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]区间。<是求小运算符,>是求大运算符

TM3、4波段GeoTiff数据计算NDVI的更多相关文章

  1. 【270】IDL处理GeoTIFF数据

    参考:将原GeoTIFF数据的投影坐标信息赋值到新创建的文件上 pro tiff_projection ;启动ENVI e = ENVI(/HEADLESS) ;打开文件 file = 'D:\01- ...

  2. 大数据计算平台Spark内核解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着 Spark在大数据计算领域的暂露头角,越来越多 ...

  3. 大数据计算:如何仅用1.5KB内存为十亿对象计数

    大数据计算:如何仅用1.5KB内存为十亿对象计数  Big Data Counting: How To Count A Billion Distinct Objects Using Only 1.5K ...

  4. Octave Tutorial(《Machine Learning》)之第三课《数据计算》

    第三课 Culculating Data 数据计算 矩阵计算 1.简单的四则运算 2.相乘除,乘方运算(元素位运算) ".*"为对应元素的相乘计算 "./"为对 ...

  5. 阿里云大数据计算服务 - MaxCompute (原名 ODPS)

    MaxCompute 是阿里EB级计算平台,经过十年磨砺,它成为阿里巴巴集团数据中台的计算核心和阿里云大数据的基础服务.去年MaxCompute 做了哪些工作,这些工作背后的原因是什么?大数据市场进入 ...

  6. 大数据计算框架Hadoop, Spark和MPI

    转自:https://www.cnblogs.com/reed/p/7730338.html 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什 ...

  7. 高分一号计算NDVI

    1.准备工作 如果想要ENVI友好一点,请下载ENVI5.3,并且安装China satellites 补丁(参考博客:ENVI扩展工具:中国国产卫星支持工具) App Store for ENVI下 ...

  8. 流式大数据计算实践(1)----Hadoop单机模式

    一.前言 1.从今天开始进行流式大数据计算的实践之路,需要完成一个车辆实时热力图 2.技术选型:HBase作为数据仓库,Storm作为流式计算框架,ECharts作为热力图的展示 3.计划使用两台虚拟 ...

  9. 大数据计算平台Spark内核全面解读

    1.Spark介绍 Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是Apache软件基金会的顶级项目.随着Spark在大数据计算领域的暂露头角,越来越多的 ...

随机推荐

  1. chapter9_3 协同程序实现迭代器

    将循环迭代器视为"生产者-消费者"模式的一种特例:迭代器产生的数据供循环体消费. 因此,用协同程序写迭代器就理所当然了.因为协同程序可以一改传统调用者与被调用者之间的关系. 有了这 ...

  2. NOIP2011-普及组复赛模拟试题-第一题-NBA总冠军

    题目背景 Background 一年两度的期末考要到来了!!  题目描述 Description   又要到考试了,Ljw决定放松一下,就打开电视,看见了篮球赛,他立即想到了每年的NBA总冠军队伍.由 ...

  3. B题 Before an Exam

    Description Tomorrow Peter has a Biology exam. He does not like this subject much, but d days ago he ...

  4. qsort函数辅助函数compare函数的编写

    qsort的第四个参数,辅助函数compare的关于不同排序对象的不同写法: 一.对int类型数组排序 ]; int compare(const void *a, const void *b) { r ...

  5. nginx启动,重启,关闭

    1.nginx启动: a.     /usr/path/sbin/nginx -c [/etc/path/nginx.conf] 中括号中为指定加载的配置文件,不指定则加载默认配置文件 b.     ...

  6. poll机制分析[转]

    所有的系统调用,基于都可以在它的名字前加上"sys_"前缀,这就是它在内核中对应的函数.比如系统调用open.read.write.poll,与之对应的内核函数为:sys_open ...

  7. CSS3秘笈:第十一章

    表格和表单的格式化 1.表格的各种标签提供了许多有用的“钩子”,可以再上面挂CSS样式.如果创建了<th>标签样式,那么每一个列的标题——<th>标签——看起来就有可能与其他的 ...

  8. A Bit Fun

    A Bit Fun Time Limit : 5000/2500ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  9. IT人为什么难以拿到高薪?【转帖】

    最近在论坛里看到很多人发牢骚,说薪水少,可在我看来,你们这样的人拿得到高薪才怪! 我先问一句:这里有多少人是本科的?有多少人是正规本科的(不算自考,成考和专升本)?有多少人是有学位的?有多少有学位的是 ...

  10. bingo 跨action异步获取参数

    html(定时器模拟异步) <script> setTimeout(function(){ window.teacInfo = {a:1,b:2}; },2000);</script ...