用惯了ArcGIS Engine再用SuperMap的组件还是需要稍微适应一下的。按照最近使用SuperMap的体验可以得到这样的结论,SuperMap将一个完整的方案包装成一个Workspace(工作空间),Workspace中包括DataSource(数据集)、Map(地图)、Scene(场景)、Layout(排版)、还有用于存储符号的资源。数据都是以DataSet为集合存在DataSource中的,Map Scene Layout中存储的是对数据进行处理加工后的结果。如果以画画打个比方,那DataSource中就是画画用到的颜色,Map Scene Layout 就是绘制后得到的画,空间分析、叠加分析、专题图渲染就相当于画笔、工具。
那如果我们想新画一幅画应该怎么做呢?比如我想新建一个平面场景。我最初的想法是让Workspace中的Scenes新建一个Scene,不过发现它需要的参数是这样的:
public int Add( string name, string xml )让我们自己写xml,这不是搞笑呢么
问过超图的技术支持才知道,新建场景还需要重要的一步。我们需要新建一个SceneControl,获取里面的Scene,将其转为Xml,这个来作为参数。这就相当于,想要画画得先搞一个画布。那接下来就好办了,SceneControl的构造函数有一个重载可以选择场景类型,创建的时候就可以选好。
Private Sub SimpleButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton1.Click
Me.TabControl1.TabPages.Add("平面场景")
Dim count As Integer = Me.TabControl1.TabPages.Count
Dim page As TabPage = Me.TabControl1.TabPages(count - 1)
Dim scneControl As SuperMap.UI.SceneControl = New SuperMap.UI.SceneControl(SuperMap.Realspace.SceneType.NonEarthFlat)
page.Controls.Add(scneControl)
scneControl.Dock = DockStyle.Fill
End Sub
Private Sub SimpleButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpleButton2.Click
Me.TabControl1.TabPages.Add("球面场景")
Dim count As Integer = Me.TabControl1.TabPages.Count
Dim page As TabPage = Me.TabControl1.TabPages(count - 1)
Dim scneControl As SuperMap.UI.SceneControl = New SuperMap.UI.SceneControl(SuperMap.Realspace.SceneType.Globe)
page.Controls.Add(scneControl)
scneControl.Dock = DockStyle.Fill<pre name="code" class="vb"> End Sub
接下来就可以把里面的内容存入Workspace了
Dim xml As String = m_SceneControl.Scene.ToXML()
m_Workspace.Scenes.Add("newScene", xml)