二维地图与三维场景的同步主要就是视图的同步。原理很简单,Scene去同步Map的过程就是获得Map的视图范围,然后让Scene显示这个范围,Map去同步Scene的过程就是获得Scene的视图范围,然后让Map显示这个范围。实际也是这个过程,但是Scene的视图范围不是那么好获得的,需要按照高度和视角去计算。另外,根据场景的类型不同(平面还是球面),计算过程也稍有不同。详细代码如下
找个地方先把事件和用于捕捉的函数绑定:
AddHandler m_MapControl.Map.Drawn, AddressOf MapDrawnHandler
AddHandler m_SceneControl.Scene.Timer.Tick, AddressOf SceneTimerTickHandler
Scene同步Map:
Private Sub MapDrawnHandler(ByVal sender As Object, ByVal e As MapDrawnEventArgs)
'投影坐标转为地理坐标(如果本来就是地理坐标则不发生变化)
Dim centerPoint As Point2D = New Point2D(m_MapControl.Map.Center.X, m_MapControl.Map.Center.Y)
Dim left As Double = m_MapControl.Map.ViewBounds.Left
Dim right As Double = m_MapControl.Map.ViewBounds.Right
Dim top As Double = m_MapControl.Map.ViewBounds.Top
Dim bottom As Double = m_MapControl.Map.ViewBounds.Bottom
Dim lbPoint As Point2D = New Point2D(left, bottom)
Dim rtPoint As Point2D = New Point2D(right, top)
Dim points As Point2Ds = New Point2Ds(New Point2D() {centerPoint, lbPoint, rtPoint})
Dim prjCoordS