⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 envi_read_mapinfo.pro

📁 用idl开发的实现显示卫星图片在地球上位置的程序
💻 PRO
字号:

;$
; NAME    :
;   ENVI_read_mapinfo
;
; PURPOSE :
;   解析头文件获取envi格式影像文件的坐标范围
;
; CATEGORY:
;   read data
; AUTHOR  :
;   QQz(Xinyuan QU)
;   E-mail: qqzwind@gmail.com
;   BLog  : www.qqzwind.cn / hi.baidu.blog/qqzwind
;
; CALLING SEQUENCE:
;    result = ENVI_read_mapinfo(filename,startlonlat=startlonlat,finishlonlat=finishlonlat)
;
; MODIFICATION HISTORY:
;   Written by: QQz, 2007-9-10
;$
Function ENVI_read_mapinfo,filename,startlonlat=startlonlat,finishlonlat=finishlonlat
	;
	compile_opt STRICTARR
	;
	Catch, error
	IF error NE 0 THEN BEGIN
	   Catch, /Cancel
	   ;ok = Dialog_Message(!Error_State.Msg)
	   print,'Read ENVI lonlat error!'
	   RETURN,0
	ENDIF
	;
	if ~file_test(filename) then return,0
	;
	path = file_dirname(filename)
	name = file_basename(filename,'.img')
	name = file_basename(name,'.hdr')
	;
	hdrpath = path+'\'+name+'.hdr'
	if file_test(hdrpath) then begin
	   Openr ,lun,hdrpath,/get_lun
	   typefile = ''
	   readf,lun,typefile
	   if STRUPCASE(typefile) eq 'ENVI' then begin
	   		;
	   		;读取map 信息
	   		;
			infostring = ''
			WHILE ~EOF(lun) do begin
				readF,lun,infostring
				infoarr = strsplit(infostring,'=',/extract)
				typename = strcompress(strlowcase(infoarr[0]),/REMOVE_ALL)
				CASE typename of
					'mapinfo' : begin
						f_bracket = StrPos(infostring, '{')
						r_bracket = StrPos(infostring, '}')
						mapinfo = StrMid(infostring, f_bracket+1, r_bracket-f_bracket-1)
					 	break
					 end
					 'samples': begin
					 	samples = float(infoarr[1])
					 end
					 'lines' : begin
					 	lines =  float(infoarr[1])
					 end
					ELSE :break
				ENDCASE
			ENDWHILE
			;
			;
			if n_elements(mapinfo) ne 0 then begin
				mapstr = strsplit(mapinfo,',',/extract)
				mapname = strcompress(strupcase(mapstr[0]),/REMOVE_ALL)
				;print,mapname
				case mapname of
					'GEOGRAPHICLAT/LON' : begin
						startlonlat = [mapstr[3],mapstr[4]]
						finishlonlat= float([mapstr[3],mapstr[4]]) + [samples,-lines]* float([mapstr[5],mapstr[6]])
						datum = mapstr[7]
						unit = (strsplit(mapstr[8],'=',/extract))[1]
						RETURN,1
					end
					'UTM' : begin
						startmap  = [mapstr[3],mapstr[4]]
						finishmap = float([mapstr[3],mapstr[4]]) + [samples,-lines]* float([mapstr[5],mapstr[6]])
						RETURN,1
					end
					else :
				endcase
			endif else begin
				print,'没有投影信息'
				RETURN,0
			endelse
	   endif else begin
	   		print,'非ENVI影像头文件'
	   		RETURN,0
	   endelse
	   free_lun,lun
	endif else begin
		print,'找不到影像头文件'
		RETURN,0
	endelse


End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -