posts - 41,  comments - 20,  trackbacks - 1
AE开发中经常遇到需要将Map、Scene、Globe中的当前场景导出为图片,下面是我总结的导出方法,其中二维的可以导出到内存或硬盘上,还可以导出图片的空间数据文件,三维中只可以导出到硬盘上,附上源码(VB.Net),用法在Summary中写的很详细了,^_^
  ''' <summary>
  ''' 二维导出当前场景为图片对象(内存中)
  ''' </summary>
  ''' <param name="pActiveView">当前的Activeview</param>
  ''' <returns>Image对象</returns>
  ''' <remarks></remarks>
  Public Shared Function ExportToBMP(ByVal pActiveView As IActiveView) As System.Drawing.Image
    Dim pResolution As Double = pActiveView.ScreenDisplay.DisplayTransformation.Resolution
    Dim pExport As IExport = New ExportBMP
    pExport.Resolution = pResolution
    Dim deviceRECT As tagRECT = pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame
    Dim pDriverBounds As IEnvelope = New Envelope
    pDriverBounds.PutCoords(deviceRECT.left, deviceRECT.bottom, deviceRECT.right, deviceRECT.top)
    pExport.PixelBounds = pDriverBounds
    Dim pCancel As ITrackCancel = New CancelTracker
    pActiveView.Output(pExport.StartExporting, pResolution, deviceRECT, pActiveView.Extent, pCancel)
    pExport.FinishExporting()
    Dim pExportBmp As IExportBMP = pExport
    Dim pImage As System.Drawing.Image = System.Drawing.Image.FromHbitmap(pExportBmp.Bitmap)
    pExport.Cleanup()
    Return pImage
  End Function
  ''' <summary>
  ''' 二维导出当前场景为图片文件(硬盘上)
  ''' </summary>
  ''' <param name="pFilePath">图片全路径</param>
  ''' <param name="pExportPic">图片格式的对象(形如IExportBMP)</param>
  ''' <param name="pActiveView">当前的视图</param>
  ''' <param name="pCheckWorldfile">是否导出图片的空间数据文件(Worldfile)</param>
  ''' <param name="pResolution">图片分别率,默认值为96</param>
  ''' <remarks></remarks>
  Private Sub ExporttoPIC(ByVal pFilePath As String, ByVal pExportPic As IExport, ByVal pActiveView As IActiveView, Optional ByVal pCheckWorldfile As Boolean = False, Optional ByVal pResolution As Double = 0)
    If pResolution = 0 Then pResolution = pActiveView.ScreenDisplay.DisplayTransformation.Resolution
    Dim pExport As IExport = pExportPic
    pExport.ExportFileName = pFilePath
    pExport.Resolution = pResolution
    Dim deviceRECT As tagRECT = pActiveView.ScreenDisplay.DisplayTransformation.DeviceFrame
    Dim pDriverBounds As IEnvelope = New Envelope
    pDriverBounds.PutCoords(deviceRECT.left, deviceRECT.bottom, deviceRECT.right, deviceRECT.top)
    pExport.PixelBounds = pDriverBounds
    Dim pCancel As ITrackCancel = New CancelTracker
    pActiveView.Output(pExport.StartExporting, pResolution, deviceRECT, pActiveView.Extent, pCancel)
    ''导出数据空间文件的语句必须放在StartExporting和FinishExporting之间,否则无效
    If TypeOf pExport Is IExportImage Then
      If pCheckWorldfile Then
        Dim pWorldFile As IWorldFileSettings = pExport
        pWorldFile.OutputWorldFile = True
        pWorldFile.MapExtent = pActiveView.Extent
        Dim pWorldFile2 As IWorldFileSettings2 = pExport
        pWorldFile2.MapRotation = pActiveView.ScreenDisplay.DisplayTransformation.Rotation
      End If
    End If
    pExport.FinishExporting()
    pExport.Cleanup()
  End Sub
  ''' <summary>
  ''' 三维导出当前场景为图片文件(硬盘上)
  ''' </summary>
  ''' <param name="pFilePath">图片全路径</param>
  ''' <param name="ExportType">自定义的一个枚举,表示是Scene还是Globe</param>
  ''' <param name="ImageType">导出图片的类型BMP或JPEG</param>
  ''' <remarks></remarks>
  Private Sub ExporttoPIC(ByVal pFilePath As String, ByVal ExportType As wsExportControlType, ByVal ImageType As esri3DOutputImageType)
    Select Case ExportType
      Case wsExportControlType.wsExportScene
        m_SceneHookhelper.ActiveViewer.GetScreenShot(ImageType, pFilePath)
      Case wsExportControlType.wsExportGlobe
        m_GlobeHookhelper.ActiveViewer.GetScreenShot(ImageType, pFilePath)
    End Select
  End Sub


附上空间数据格式的说明:

  第一种格式:
1、X-Scale(一个像元的大小)
2、旋转项
3、旋转项
4、负的Y-Scale(一个像元的大小)
5、转换项,即左上角X坐标
6、转换项,即左上角Y坐标
  第二种格式:
1、地图单元中的一个象素在X方向上的X分辨率尺度
2、平移量
3、旋转量
4、地图单元中的一个象素在Y方向上的Y分辨率尺度的负值
5、象素1,1(左上方)的X地坐标
6、象素1,1(左上方)的Y地坐标
  第三种格式(EN):
1、pixel X size
2、rotation about the Y axis (usually 0.0)
3、rotation about the X axis (usually 0.0)
4、negative pixel Y size
5、X coordinate of upper left pixel center
6、Y coordinate of upper left pixel center
  第四种格式:
1、行方向每一个删格点多少米
2、X方向旋转角度
3、Y方向旋转角度
4、列方向每一个删格点多少米
5、左上点x坐标
6、左上点y坐标

第一种和第三种基本上一样的,第一种说的有点简单了!
一个jgw文件的例子:
0.05410594      A
0.0000  D
0.0000   B
-0.05410594     E
25.023009 C
102.766439 F
A=X-Scale(一个像元的大小)
E=负的Y-Scale(一个像元的大小)
B,D=旋转项
C,F=转换项,即左上角X坐标与Y坐标
通常用四点来进行影像校正,假设影像没有扭转,即旋转项为0
说明:这个例子所用的坐标系统是WGS84
对于A、B、C和F的计算在网络上有许多说法。有点混乱!
这里简单的说明一下,我采用的计算方法:
1、确定影像的两个角的坐标:
需要确定影像地图文件的左下角坐标和右上角坐标
这里我没有带如具体的数据,以变量来说明问题了
左下角坐标:(x1,y1)
右上角坐标:(x2,y2)
影像地图的像元行数:col
影像地图的像元列数:row
2、确定影像文件的左上角的坐标:
左上角坐标:(x1,y2)
3、确定旋转项:
旋转项一般取0.000000
4、计算x方向与y方向的像元大小:
x方向的像元大小:(x2-x1)/col
y方向的像元大小:(y2-y1)/row*(-1)
5、最后jgw文件的数据就为:
(x2-x1)/col
0.000000
0.000000
(y2-y1)/row*(-1)
x1
y2
注意:本例是基于WGS84坐标系统的!

Tag标签: GIS
posted on 2008-05-28 14:06 王者之魂 阅读(569) 评论(0)  编辑 收藏

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-28 14:43 编辑过
 
 

众 万
志 众
成 一
城 心

诚 心
祝 愿
中 震
国 区
人 百
民 姓
幸 安
福 康

QQ:13945133
MSN:yangguanjunmeteor@hotmail.com


<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

与我联系

搜索

 

常用链接

留言簿(1)

我参与的团队

我的标签

随笔档案(41)

友情链接

最新评论

阅读排行榜

评论排行榜

60天内阅读排行