📄 regionlook.pro
字号:
;$
; NAME :
; regionlook
;
; PURPOSE :
; 快视查看影像数据所在区域
;
; CATEGORY:
; utility tools
;
; AUTHOR :
; QQz(Xinyuan QU)
; E-mail: qqzwind@gmail.com
; BLog : www.qqzwind.cn hi.baidu.blog/qqzwind
;
; CALLING SEQUENCE:
; regionlook
;
; MODIFICATION HISTORY:
; Written by: QQz, 2007-9-6
; 2007-9-9 envi标准 支持
; 2007-9-12 放大缩小
; 2007-9-13 hdf格式支持
; 2007-9-13 envisat格式支持
; 2007-9-18 radarsat格式支持
;$
Pro regionlook_cleanup,wtlb
widget_control,wtlb,get_uvalue = pstate
ptr_free, pstate
End
;*
;
; 缩放投影范围
;*
Pro regionlook_zoompoj,wtlb,zoom
;
compile_opt STRICTARR
;
if n_elements(zoom) eq 0 then return
widget_control,wtlb,get_uvalue=pstate
if (*pstate).filetype eq '' then return
ratio = 0.2*zoom
(*pstate).offsetx = (*pstate).offsetx*(1+ratio)
(*pstate).offsety = (*pstate).offsety*(1+ratio)
leftup = (*pstate).leftup
rightup = (*pstate).rightup
rightdown = (*pstate).rightdown
leftdown = (*pstate).leftdown
filetype = (*pstate).filetype
regionlook_drawmap,windowid =(*pstate).win,filetype=(*pstate).filetype,leftup,rightup,rightdown,leftdown,$
offsetx = (*pstate).offsetx,offsety=(*pstate).offsety
End
;*
;
;直接图形法绘制影像和投影
;*
Pro regionlook_drawmap,windowid = windowid,leftup,rightup,rightdown,leftdown,offsetx=offsetx,offsety=offsety,filetype=filetype
;
compile_opt STRICTARR
;
;
; leftup +--------+ rightup
; | |
; | |
; | |
; leftdown +--------+ rightdown
;
data = fltarr(2,5)
data[0,*] = [leftup[0],rightup[0],rightdown[0],leftdown[0],leftup[0]]
data[1,*] = [leftup[1],rightup[1],rightdown[1],leftdown[1],leftup[1]]
xcenter = (max(data[0,*]) + min(data[0,*]))/2
ycenter = (max(data[1,*]) + min(data[1,*]))/2
;
if n_elements(offsetx) eq 0 then offsetx= 10
if n_elements(offsety) eq 0 then offsety= 6
if n_elements(filetype) eq 0 then filetype= '--ENVI Standard'
offsetx = (offsetx+(max(data[0,*])-min(data[0,*]))/2)<180
offsety = (offsety+(max(data[1,*])-min(data[1,*]))/2)<90
;
wset,windowid
;
loadct, 40, /silent
;
;
titlecolor = 100
countriecolor = 206
coastcolor = 65
rivercolor = 80
arrowcolor = 254
;
; High resolution
!P.FONT=0
TITLE = '区域快视图' + '('+filetype+')'
MAP_SET, ycenter,xcenter ,$
; /STEREOGRAPHIC ,$
/TRANSVERSE_MERCATOR ,$
/ISOTROPIC, /HORIZON, E_HORIZON={FILL:1, COLOR:100},$
TITLE =TITLE ,$
COLOR=titlecolor ,$
/HIRES ,$
LIMIT=[ycenter-offsety,xcenter-offsetx,ycenter+offsety,xcenter+offsetx]
;
;绘制陆地
MAP_CONTINENTS, /COUNTRIES, COLOR=countriecolor, MLINETHICK=2, /HIRES, /fill
;
;绘制河流
if offsetx lt 25 then begin
HIRES=1
MAP_CONTINENTS, /RIVERS, COLOR=rivercolor, HIRES=HIRES
endif else begin
HIRES=0
endelse
;
;绘制海岸
MAP_CONTINENTS, /COASTS, COLOR=coastcolor, HIRES=HIRES
;
;绘制网格
map_grid,/LABEL, LATLAB=xcenter, LONLAB=ycenter,CHARSIZE=0.5
;
;arrow
p = convert_coord(xcenter+offsetx*0.85, [ycenter+offsety*0.70, ycenter+offsety*0.8], /TO_NORM)
ARROW, p[0,0], p[1,0], p[0,1], p[1,1], /NORMAL,color = arrowcolor,thick=2
XYOUTS,xcenter+offsetx*0.83, ycenter+offsety*0.85, 'North', ALIGNMENT=0.5,color = arrowcolor
;text
p = convert_coord([max(data[0,*])+offsetx*0.03,max(data[0,*])+offsetx*0.09], [max(data[1,*])+offsetx*0.03,max(data[1,*])+offsetx*0.09], /TO_NORM)
ARROW, p[0,1], p[1,1], p[0,0], p[1,0], /NORMAL
XYOUTS,max(data[0,*])+offsetx*0.11, max(data[1,*])+offsetx*0.1, '影像', ALIGNMENT=0
;
;image rectangle
plots,data,psym=0,symsize=1.5,color=180,thick=3
End
;*
;
; 主事件处理程序
;*
Pro regionlook_event,ev
;
compile_opt STRICTARR
;
uname = widget_info(ev.id,/uname)
case uname of
'wopenenvi' : begin
;
widget_control,ev.top,get_uvalue=pstate
filename = dialog_pickfile(group = ev.top,/read,title='选择带投影的ENVI数据',path=(*pstate).filepath)
if filename eq '' then return
result =envi_read_mapinfo(filename,startlonlat=startlonlat,finishlonlat=finishlonlat)
if result eq 1 then begin
(*pstate).leftup = startlonlat
(*pstate).rightup = [finishlonlat[0],startlonlat[1]]
(*pstate).rightdown = finishlonlat
(*pstate).leftdown = [startlonlat[0],finishlonlat[1]]
(*pstate).filetype = 'ENVI Standard'
regionlook_drawmap,windowid =(*pstate).win,startlonlat,[finishlonlat[0],startlonlat[1]],finishlonlat,[startlonlat[0],finishlonlat[1]]
endif
(*pstate).filepath=file_dirname(filename)
end
'wopenhdf' : begin
;
widget_control,ev.top,get_uvalue=pstate
filename = dialog_pickfile(group = ev.top,/read,title='选择MODIS数据',filter='*.HDF',path=(*pstate).filepath)
if filename eq '' then return
result = HDF_read_lonlat(filename,startlonlat=startlonlat,finishlonlat=finishlonlat)
if result eq 1 then begin
(*pstate).leftup = startlonlat
(*pstate).rightup = [finishlonlat[0],startlonlat[1]]
(*pstate).rightdown = finishlonlat
(*pstate).leftdown = [startlonlat[0],finishlonlat[1]]
(*pstate).filetype = '--MODIS hdf'
regionlook_drawmap,windowid =(*pstate).win,filetype=(*pstate).filetype, $
startlonlat,[finishlonlat[0],startlonlat[1]],finishlonlat,[startlonlat[0],finishlonlat[1]]
endif
;
(*pstate).filepath=file_dirname(filename)
end
'wopenensat' : begin
;
widget_control,ev.top,get_uvalue=pstate
filename = dialog_pickfile(group = ev.top,/read,title='选择ENVISAT数据',filter='*.N1*',path=(*pstate).filepath)
if filename eq '' then return
result = ENVIsat_read_lonlat(filename,leftup=leftup,rightup=rightup,leftdown=leftdown,rightdown=rightdown)
if result eq 1 then begin
(*pstate).leftup = leftup
(*pstate).rightup = rightup
(*pstate).rightdown = rightdown
(*pstate).leftdown = leftdown
(*pstate).filetype = '--ENVISAT'
regionlook_drawmap,windowid =(*pstate).win,filetype=(*pstate).filetype, $
leftup,rightup,rightdown,leftdown
endif
;
(*pstate).filepath=file_dirname(filename)
end
'wopenrdsat' : begin
;
widget_control,ev.top,get_uvalue=pstate
filename = dialog_pickfile(group = ev.top,/read,title='选择Radarsat数据',filter='*.self',path=(*pstate).filepath)
if filename eq '' then return
result = Radarsat_read_lonlat(filename,leftup=leftup,rightup=rightup,leftdown=leftdown,rightdown=rightdown)
if result eq 1 then begin
(*pstate).leftup = leftup
(*pstate).rightup = rightup
(*pstate).rightdown = rightdown
(*pstate).leftdown = leftdown
(*pstate).filetype = '--RadarSAT'
regionlook_drawmap,windowid =(*pstate).win,filetype=(*pstate).filetype, $
leftup,rightup,rightdown,leftdown
endif
;
(*pstate).filepath=file_dirname(filename)
end
'wsave' : begin
img = tvrd(TRUE =1)
filename = dialog_pickfile(/write,title='保存',filter='*.bmp')
if filename eq '' then return
name = file_basename(filename,'.bmpf')
path = file_dirname(filename)
filename = path+'\'+name+'.bmp'
write_bmp,filename,img ,/rgb
;widget_control,ev.top,/destroy
end
'zoomout' : begin
regionlook_zoompoj,ev.top, 1
end
'zoomin' : begin
regionlook_zoompoj,ev.top,-1
end
'wquit' : begin
widget_control,ev.top,/destroy
end
else :
endcase
End
;*
;
; 主程序-创建GUI , 保存系统差数
;*
Pro regionlook, xsize=xsize,ysize=ysize
;
screenxy = get_screen_size()
;
DEVICE, DECOMPOSED = 0
;
if ~n_elements(xsize) then xsize = 650
if ~n_elements(ysize) then ysize = 480
;
; 创建界面
;
wregion = widget_base(title='区域快视',$
;/floating ,$
/toolbar ,$
mbar = mbar ,$
/column ,$
map = 0 ,$
TLB_FRAME_ATTR=1)
wtoolbar = widget_base(wregion,/row)
wfile = widget_button(wtoolbar,value = '文件',/menu)
wopenenvi = widget_button(wfile,value='打开ENVI标准格式',uname='wopenenvi')
wopenhdf = widget_button(wfile,value='打开HDF格式',uname='wopenhdf')
wopenensat = widget_button(wfile,value='打开ENVISAT格式',uname='wopenensat')
wopenrdsat = widget_button(wfile,value='打开RADARSAT格式',uname='wopenrdsat')
wsave = widget_button(wfile,value='保存',uname='wsave')
wquit = widget_button(wfile,value='退出',uname='wquit')
wproj = widget_button(wtoolbar,value = '投影方式',/menu)
wzoomin = widget_button(wtoolbar,value='放大',uname='zoomin')
wzoomout = widget_button(wtoolbar,value='缩小',uname='zoomout')
;
regiondraw = widget_draw(wregion,xsize=xsize,ysize=ysize)
widget_control,wregion,/realize
widget_control,regiondraw,get_value = owindow
;
;界面适应到合适的位置
;
basegeo = widget_info(wregion,/geo)
offset = (screenxy-[basegeo.xsize,basegeo.ysize])/2
widget_control,wregion,xoffset= offset[0],yoffset = offset[1]-50
widget_control,wregion,/map
;
;保存参数
;
temp = {wregion :wregion ,$ ; 系统 tlb
win :owindow ,$ ; 窗口 ID
filepath :'' ,$ ; 文件路径
leftup :[-999.,0.] ,$ ; 左上点坐标
rightup :[0.,0.] ,$ ; 右上点坐标
rightdown :[0.,0.] ,$ ; 右下点坐标
leftdown :[0.,0.] ,$ ; 左下点坐标
offsetx :10. ,$ ; x方向显示投影范围
offsety :6. ,$ ; y方向显示投影范围
filetype :'' ,$ ; 数据格式
proj :'' $ ;
}
widget_control,wregion,set_uvalue = ptr_new(temp)
;
;启动事件循环
xmanager,'regionlook',wregion,/no_block,cleanup='regionlook_cleanup'
End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -