生活麻辣烫所有歌曲:IDL开发专题-IDL下的坐标系及示例 - ENVI/IDL技术版 - Esri中国社区 ...
来源:百度文库 编辑:中财网 时间:2024/05/03 21:04:46
资源共享] 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是什么东西?
我的delphi7中设计IDL时没有corba object
求:idl绘图软件下载
JAVA IDL 服务器工具 是什么?
IDL接口和CORBA对象系统是什么来的????请详细点.谢谢
用联众下棋总出"“windows”不能打开此文件 idl.swf"的对话框怎么办?
用C++实现CORBA的话用什么软件来编译IDL啊?
论文的写法及一篇论文的示例稿
请问陆相油气勘探开发专题数据库的网址?
字体名称及样本示例
请教下与历史有关的专题
新型材料的开发及前景
数学哈密尔顿▽算符在直角坐标系形式和拄坐标系下的形式是怎么变换的啊!
天球坐标系与地球坐标系的区别
伽利略坐标系和笛卡儿坐标系的区别?
photoshop的示例
统战责任状的示例
长恨歌的改写示例
销售的示例
常用的坐标系有几种?
坐标系的数学题
坐标系的由来
点吧的下个专题是什么/
在哪能下到电台专题的音乐