肯特沙发:IDL开发专题-IDL下的坐标系及示例
来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 03:57:35
资源共享] IDL开发专题-IDL下的坐标系及示例 本帖最后由 lianyi_dyq 于 2009-12-23 11:27 编辑
IDL下常用的坐标系有下面三种:
%设备坐标体系(显示屏幕、打印机纸张)
%规一化坐标体系
%数据坐标体系
无论采用任何的坐标系,显示对象的坐标都要统一到当前坐标范围内,只有统一了坐标才能正确的显示数据。
下面的例子源码说明了如何应用这三个坐标系。
下载 (95.18 KB)
2009-7-18 15:59
下载 (250.5 KB)
2009-7-18 15:59
下载 (245.77 KB)
2009-7-18 15:59
PRO test_idlcoord
;
oWindow = OBJ_NEW('IDLgrWindow', $
retain =2, $
DIMENSIONS = [800,400])
;显示体系结构
oView = OBJ_NEW('IDLgrView')
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;读取数据
file = filepath( 'day.jpg', SUBDIRECTORY=['examples','data'] )
READ_JPEG, file,imageData
; Resize the image data
imageData = congrid(imageData,3,360,180)
oImage = OBJ_NEW('IDLgrImage', $
imageData)
imageModel->add,oImage
;读取矢量文件
shpFilename = filepath( 'shape\continents.shp', SUBDIRECTORY=['resource','maps'] )
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts[j]:cuts[j+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;转换到当前图像坐标下
tempLon = (REFORM(tempLon) -(-180))
tempLat = (REFORM(tempLat) -(-90))
;
num = N_ELEMENTS(tempLon)
polylines = LINDGEN(num+1)-1
polylines[0] = num
tempPlot = OBJ_NEW('IDLgrPolyline', $
tempLon, $
tempLat, $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 图像坐标显示
oView->setproperty, viewPlane_Rect = [0,0,800,400]
oWindow->SetProperty, title ='图像坐标显示'
oWindow->draw,oView
;停顿两秒
wait,2
;归一化坐标显示
;销毁原来的
OBJ_DESTROY,oTopModel
;建立新的
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;
oImage = OBJ_NEW('IDLgrImage', $
imageData)
imageModel->add,oImage
;获取当前图像对象的X、Y方向的范围
oImage->getproperty, xRange = xRange,yRange = yRange
;求出归一化系数
xr = norm_coord(xRange)
;解析:xrange =[0,360],xr是两个参数,[-0.00000000 ,0.0027777778],通过设置该参数,
;那么转换后x方向的原数据坐标为xr[0]+xr[1]*xrange[0]= -0+0.002777*0 = 0
; xr[0]+xr[1]*xRange[1]= -0+0.002777*360 =1
; 可测试 Norm_Coord([-100,100]) = [0.500000 , 0.00500000]
;
yr = norm_coord(yRange)
oImage->setproperty, xCoord_conv = xr, $
yCoord_conv = yr
;
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts:cuts[i+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;
;转换到归一化的坐标系下显示
tempLon = FLOAT((REFORM(tempLon) -(-180))) /360.
tempLat = FLOAT((REFORM(tempLat) -(-90)))/180.
;
num = N_ELEMENTS(tempLon)
polylines = LINDGEN(num+1)-1
polylines[0] = num
tempPlot = OBJ_NEW('IDLgrPolyline', $
tempLon, $
tempLat, $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 设置显示区域坐标
oView->setproperty, viewPlane_Rect = [0,0,1,1]
oWindow->SetProperty, title ='归一化坐标显示'
oWindow->draw,oView
;停顿两秒
wait,2
;地理坐标显示
;销毁原来的
OBJ_DESTROY,oTopModel
;建立新的
sMap = map_proj_init('Interrupted Goode')
; 或用下面的投影
; ;全球的“等距圆柱投影”
; sMap = Map_Proj_Init('Equirectangular' , $
; Limit = [-90,-180,90,180] , $
; Center_Longitude = 0 )
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;
;对图像进行纠正
;
red= REFORM(imageData[0,*,*])
green= REFORM(imageData[1,*,*])
blue= REFORM(imageData[2,*,*])
red1 = map_proj_image( red, MAP_STRUCTURE=sMap, MASK=mask, $
UVRANGE=uvrange, XINDEX=xindex, YINDEX=yindex )
green1 = map_proj_image( green, XINDEX=xindex, YINDEX=yindex )
blue1 = map_proj_image( blue, XINDEX=xindex, YINDEX=yindex )
imageData = BYTARR(4,360,180)
imageData[0,*,*] = red1
imageData[1,*,*] = green
imageData[2,*,*] = blue
;设置掩膜
imageData[3,*,*] = mask*255b
;
uRange = uvRange[2]-uvRange[0]
vRange = uvRange[3]-uvRange[1]
oImage = OBJ_NEW('IDLgrImage', $
imageData, $
BLEND_FUNCTION = [3, 4], $
dimensions=[uRange,vRange], $ ;维数--大地坐标
location=uvRange[0:1] ) ;位置--大地坐标
imageModel->add,oImage
; ;
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts[j]:cuts[j+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;
;转换到m制坐标系下显示
vert = MAP_PROJ_FORWARD([tempLon,tempLat], $
Map_Structure = sMap, $
Polylines = polyLines)
;
tempPlot = OBJ_NEW('IDLgrPolyline', $
vert[0,*], $
vert[1,*], $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 设置显示区域坐标
oView->setproperty, viewPlane_Rect = [uvrange[0],uvrange[1],uRange,vRange]
oWindow->SetProperty, title ='Interrupted Goode 投影下m制坐标显示'
oWindow->draw,oView
IDL下常用的坐标系有下面三种:
%设备坐标体系(显示屏幕、打印机纸张)
%规一化坐标体系
%数据坐标体系
无论采用任何的坐标系,显示对象的坐标都要统一到当前坐标范围内,只有统一了坐标才能正确的显示数据。
下面的例子源码说明了如何应用这三个坐标系。
下载 (95.18 KB)
2009-7-18 15:59
下载 (250.5 KB)
2009-7-18 15:59
下载 (245.77 KB)
2009-7-18 15:59
PRO test_idlcoord
;
oWindow = OBJ_NEW('IDLgrWindow', $
retain =2, $
DIMENSIONS = [800,400])
;显示体系结构
oView = OBJ_NEW('IDLgrView')
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;读取数据
file = filepath( 'day.jpg', SUBDIRECTORY=['examples','data'] )
READ_JPEG, file,imageData
; Resize the image data
imageData = congrid(imageData,3,360,180)
oImage = OBJ_NEW('IDLgrImage', $
imageData)
imageModel->add,oImage
;读取矢量文件
shpFilename = filepath( 'shape\continents.shp', SUBDIRECTORY=['resource','maps'] )
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts[j]:cuts[j+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;转换到当前图像坐标下
tempLon = (REFORM(tempLon) -(-180))
tempLat = (REFORM(tempLat) -(-90))
;
num = N_ELEMENTS(tempLon)
polylines = LINDGEN(num+1)-1
polylines[0] = num
tempPlot = OBJ_NEW('IDLgrPolyline', $
tempLon, $
tempLat, $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 图像坐标显示
oView->setproperty, viewPlane_Rect = [0,0,800,400]
oWindow->SetProperty, title ='图像坐标显示'
oWindow->draw,oView
;停顿两秒
wait,2
;归一化坐标显示
;销毁原来的
OBJ_DESTROY,oTopModel
;建立新的
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;
oImage = OBJ_NEW('IDLgrImage', $
imageData)
imageModel->add,oImage
;获取当前图像对象的X、Y方向的范围
oImage->getproperty, xRange = xRange,yRange = yRange
;求出归一化系数
xr = norm_coord(xRange)
;解析:xrange =[0,360],xr是两个参数,[-0.00000000 ,0.0027777778],通过设置该参数,
;那么转换后x方向的原数据坐标为xr[0]+xr[1]*xrange[0]= -0+0.002777*0 = 0
; xr[0]+xr[1]*xRange[1]= -0+0.002777*360 =1
; 可测试 Norm_Coord([-100,100]) = [0.500000 , 0.00500000]
;
yr = norm_coord(yRange)
oImage->setproperty, xCoord_conv = xr, $
yCoord_conv = yr
;
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts:cuts[i+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;
;转换到归一化的坐标系下显示
tempLon = FLOAT((REFORM(tempLon) -(-180))) /360.
tempLat = FLOAT((REFORM(tempLat) -(-90)))/180.
;
num = N_ELEMENTS(tempLon)
polylines = LINDGEN(num+1)-1
polylines[0] = num
tempPlot = OBJ_NEW('IDLgrPolyline', $
tempLon, $
tempLat, $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 设置显示区域坐标
oView->setproperty, viewPlane_Rect = [0,0,1,1]
oWindow->SetProperty, title ='归一化坐标显示'
oWindow->draw,oView
;停顿两秒
wait,2
;地理坐标显示
;销毁原来的
OBJ_DESTROY,oTopModel
;建立新的
sMap = map_proj_init('Interrupted Goode')
; 或用下面的投影
; ;全球的“等距圆柱投影”
; sMap = Map_Proj_Init('Equirectangular' , $
; Limit = [-90,-180,90,180] , $
; Center_Longitude = 0 )
shapeModel = OBJ_NEW('IDLgrModel')
imageModel= OBJ_NEW('IDLgrModel')
oTopModel= OBJ_NEW('IDLgrModel')
oTopModel->add,[imageModel,shapeModel]
oView->add,oTopModel
;
;对图像进行纠正
;
red= REFORM(imageData[0,*,*])
green= REFORM(imageData[1,*,*])
blue= REFORM(imageData[2,*,*])
red1 = map_proj_image( red, MAP_STRUCTURE=sMap, MASK=mask, $
UVRANGE=uvrange, XINDEX=xindex, YINDEX=yindex )
green1 = map_proj_image( green, XINDEX=xindex, YINDEX=yindex )
blue1 = map_proj_image( blue, XINDEX=xindex, YINDEX=yindex )
imageData = BYTARR(4,360,180)
imageData[0,*,*] = red1
imageData[1,*,*] = green
imageData[2,*,*] = blue
;设置掩膜
imageData[3,*,*] = mask*255b
;
uRange = uvRange[2]-uvRange[0]
vRange = uvRange[3]-uvRange[1]
oImage = OBJ_NEW('IDLgrImage', $
imageData, $
BLEND_FUNCTION = [3, 4], $
dimensions=[uRange,vRange], $ ;维数--大地坐标
location=uvRange[0:1] ) ;位置--大地坐标
imageModel->add,oImage
; ;
shapeFile = OBJ_NEW('IDLffShape', shpFileName)
shapeFile->getproperty, N_Entities = nEntities
FOR i=0, nEntities-1 DO BEGIN
entitie = shapeFile->getentity(i)
IF PTR_VALID(entitie.parts) NE 0 THEN BEGIN
cuts = [*entitie.parts, entitie.n_vertices]
FOR j=0, entitie.n_parts-1 DO BEGIN
tempLon = (*entitie.vertices)[0,cuts[j]:cuts[j+1] - 1]
tempLat = (*entitie.vertices)[1,cuts[j]:cuts[j+1] - 1]
;
;转换到m制坐标系下显示
vert = MAP_PROJ_FORWARD([tempLon,tempLat], $
Map_Structure = sMap, $
Polylines = polyLines)
;
tempPlot = OBJ_NEW('IDLgrPolyline', $
vert[0,*], $
vert[1,*], $
Polylines = polyLines , $
Alpha_Channel = 1, $
color = [255,0,0])
shapeModel->add,tempPlot
ENDFOR
ENDIF
shapeFile->destroyentity, entitie
ENDFOR
;
; 设置显示区域坐标
oView->setproperty, viewPlane_Rect = [uvrange[0],uvrange[1],uRange,vRange]
oWindow->SetProperty, title ='Interrupted Goode 投影下m制坐标显示'
oWindow->draw,oView
IDL开发专题-IDL下的坐标系及示例
IDL开发专题
编写高效率的IDL程序
遥感专题——定量遥感(二、传感器定标)(页 1) - ENVI/IDL技术版 - Esri...
IDL 连接sql server 2005 数据库心得
WIST下载的modis温度产品怎只有比辐射率?(页 1) - ENVI/IDL技术版 -...
免费数据共享网(免费下载数据) - ENVI/IDL技术版 - Esri中国社区 GIS论...
VB+mapx实现各种专题图的示例
linux下播放器设计和开发 - 音频专题 -
专题三:“应用题”教学及学生解决问题能力的培养 2 第二讲(下)
【专题】小儿下腹痛及盆腔痛的超声评价1
【专题】小儿下腹痛及盆腔痛的超声评价2
【专题】小儿下腹痛及盆腔痛的超声评价3
虚词用法及示例
的写法指导及9篇范文示例
浙江卷创意仿写题的出处及解题示例
VC中坐标系的建立 zz -
Linux 下 socket 编程示例
web报表开发技术专题六:尴尬的Web打印
linux下的触摸屏驱动开发
蛙泳口诀及示例2
蛙泳口诀及示例1
Cayenne,开源 ORM 盛宴中的另道佳肴,第 1 部分: 初尝小辣椒 - Apache Cayenne 基本功能介绍Cayenne 开发环境搭建及应用示例
外贸开发信的问题及注意事项