电影新少林寺剧情介绍:IDL下实现ENVI的波段运算表达式语句合理性检测
来源:百度文库 编辑:偶看新闻 时间:2024/04/28 10:48:55
Learning ENVI&IDL
学习、研究ENVI&IDL+ArcGIS 外加些转载的^_^ 转帖请注明出自本博客! http://bbs.esrichina-bj.cn/ESRI/?fromuid=9806
主页博客相册|个人档案 |好友 |i贴吧
查看文章
IDL下实现ENVI的波段运算表达式语句合理性检测
2011年10月21日 星期五 20:20
ENVI的波段运算功能很强大,若输入表达式中有错误则无法add。这个检测是怎么实现的呢?如果在IDL下进行ENVI二次开发的时候,如何实现这个功能。
首先启动ENVI+IDL,进行波段运算,输入b1*a,然后点击Add。
IDL的控制台上会输出如下信息:
% Variable is undefined: A.
ENVI>
由此,联想到ENVI是否进行了一个测试调用,根据调用的返回值来判断该表达式是否合法。在IDL下进行测试:
ENVI> str1 ='b1*a'
ENVI> varname = Var_Extract(str1)
ENVI> isWrite = Execute(varName+"=indgen(5,5)")
ENVI> print,isWrite
1
ENVI> isWrite = Execute(varName+"=" + Str1)
% Variable is undefined: A.
ENVI> print,isWrite
0
该错误提示与ENVI的波段运算错误提示是对应的。应该就是用的这个Execute返回值来判断表达式是否正确。
其中调用到的函数来自YangHS,如下:
Function VarFind,Str
Compile_opt strictarr
Len = StrLen(Str)
RetValue = 'b'
RefArr = Strtrim(Indgen(10),2)
if Len eq 1 then Return,RetValue
for i=1,Len-1 do begin
Char = StrMid(Str,i,1)
if (Where(RefArr eq Char))[0] eq -1 then break
RetValue = RetValue+Char
endfor
;
Return,RetValue
End
Function Var_Extract,ExpStr
Compile_opt strictarr
ExpStr = STRLOWCASE(ExpStr)
StrArray = StrSplit(ExpStr,'b',/extract)
StrArray = 'b'+StrArray
;
for i=0,N_Elements(StrArray)-1 do begin
StrArray[i] = VarFind(StrArray[i])
endfor
;
LenArr = StrLen(StrArray)
index = Where(LenArr ne 1,count)
if count gt 0 then RetArr=StrArray[index] else RetArr=''
;
uniqIndex = Uniq(RetArr)
RetArr = RetArr[uniqIndex]
Return,RetArr
End
那么继续探讨下表达式变量的初值设置,编写一简单的波段运算函数test_bandmathVar。
function test_bandmathVar,inVar
help,inVar,out = outD
print,outD
print,inVar
return,inVar
end
编译后在波段运算中输入test_bandmathVar(b1):
控制台输出如下:
学习、研究ENVI&IDL+ArcGIS 外加些转载的^_^ 转帖请注明出自本博客! http://bbs.esrichina-bj.cn/ESRI/?fromuid=9806
主页博客相册|个人档案 |好友 |i贴吧
查看文章
IDL下实现ENVI的波段运算表达式语句合理性检测
2011年10月21日 星期五 20:20
ENVI的波段运算功能很强大,若输入表达式中有错误则无法add。这个检测是怎么实现的呢?如果在IDL下进行ENVI二次开发的时候,如何实现这个功能。
首先启动ENVI+IDL,进行波段运算,输入b1*a,然后点击Add。
IDL的控制台上会输出如下信息:
% Variable is undefined: A.
ENVI>
由此,联想到ENVI是否进行了一个测试调用,根据调用的返回值来判断该表达式是否合法。在IDL下进行测试:
ENVI> str1 ='b1*a'
ENVI> varname = Var_Extract(str1)
ENVI> isWrite = Execute(varName+"=indgen(5,5)")
ENVI> print,isWrite
1
ENVI> isWrite = Execute(varName+"=" + Str1)
% Variable is undefined: A.
ENVI> print,isWrite
0
该错误提示与ENVI的波段运算错误提示是对应的。应该就是用的这个Execute返回值来判断表达式是否正确。
其中调用到的函数来自YangHS,如下:
Function VarFind,Str
Compile_opt strictarr
Len = StrLen(Str)
RetValue = 'b'
RefArr = Strtrim(Indgen(10),2)
if Len eq 1 then Return,RetValue
for i=1,Len-1 do begin
Char = StrMid(Str,i,1)
if (Where(RefArr eq Char))[0] eq -1 then break
RetValue = RetValue+Char
endfor
;
Return,RetValue
End
Function Var_Extract,ExpStr
Compile_opt strictarr
ExpStr = STRLOWCASE(ExpStr)
StrArray = StrSplit(ExpStr,'b',/extract)
StrArray = 'b'+StrArray
;
for i=0,N_Elements(StrArray)-1 do begin
StrArray[i] = VarFind(StrArray[i])
endfor
;
LenArr = StrLen(StrArray)
index = Where(LenArr ne 1,count)
if count gt 0 then RetArr=StrArray[index] else RetArr=''
;
uniqIndex = Uniq(RetArr)
RetArr = RetArr[uniqIndex]
Return,RetArr
End
那么继续探讨下表达式变量的初值设置,编写一简单的波段运算函数test_bandmathVar。
function test_bandmathVar,inVar
help,inVar,out = outD
print,outD
print,inVar
return,inVar
end
编译后在波段运算中输入test_bandmathVar(b1):
控制台输出如下:
envi如何打开遥感波段dat文件?
javascript中正则表达式的运算
赋值语句与赋值表达式的区别
接受用户屏幕输入的加减乘除表达式,给出运算结果
怎样用栈来实现表达式的值
表达式求值(用vb实现的)
三目运算符:表达式1?表达式2:表达式3。
c语言表达式与表达式语句
大数取余运算的C++实现
用C++实现复数运算的源程序
CPU是怎样实现加法运算的
CPU是怎样实现加法运算的
用C++实现复数运算的源程序
怎么用gis的软件ENVI?谁会?
试写出下来程序各语句的运算结果:
linux下grep的正则表达式问题
请问下面的语句怎么实现?
lingo如何实现语句的循环?
编写一个 C程序表达式:data1 op data2 的值,其中OP是运算符号+,-,*,/
14、BASICA表达式SQR(x*y)^5/A的运算顺序为
如何让string中的表达式运算?
英语广播的波段
大港区广播电台的波段?
用数据结构实现表达式求值