二三维联动是包括2个部分:
l 二维对三维的联动:鼠标在二维中浏览操作的时候,将影响三维中摄像机控制,即鼠标在二维中缩放或者漫游操作后所示的地理范围将修改三维中的摄像机的位置和方向,使三维中所看到的区域范围与二维一致。
l 三维对二维的联动:鼠标在三维中漫游、缩放、旋转操作后,所示的区域范围将传递给二维系统,使二维地图与三维视察所呈现的区域一致。
接口说明
eviaControl.ViewPoint.FlyToBox(DOUBLE East, DOUBLE West,DOUBLE South,DOUBLE North,DOUBLE duration)
说明:
该接口为二维系统调用,实现将三维中的摄像机飞行到指定的区域。
参数:
DOUBLE East, DOUBLE West,DOUBLE South,DOUBLE North
为经纬度坐标,输入的是东、西、南、北,即经度最大值、经度最小值、纬度最小值、纬度最大值,单位为度
DOUBLE duration
为指定摄像机飞行时间,单位为秒
二三维BS开发,实现二三维联动的代码参考
下面的代码采用Lua(易景地球直接支持的脚本语言)实现
--------------------------------------------------------
CameraChanged = 0 --摄像机是否发生了变化,=0表示没有变化,=1表示已经发生了变化
evControl:AddEvent("OnCameraChanged",function ()
CameraChanged = 1
end)
--从一个folder中提取所有图层
function traverseLocateLayer(n)
if(n == nil) then
return nil
end
folder = n:GetChild("image")
if folder == nil then
return nil
end
return folder:GetChild("CHN")
end
function OnTimer()
if CameraChanged == 0 then
return
end
local scene = evControl.Scene.EvEarthScene
if scene == nill then
return
end
local camera = scene.Camera
if camera.EyeshotChanged < 500 then
return
end
CameraChanged = 0
--查找CHN的影像图层
local image = traverseLocateLayer(scene.Doc.RootFolder)
if image == nil then
return
end
--取得当前影像的基本和摄像机对应的坐标位置
local level = image.MaxVisibleLevel
local lookat = camera:GetLookAt()
if lookat ~= nil then
zoom2DtoExtent(lookat.Longitude,lookat.Latitude,level)
end
end
evTimer.every(1,OnTimer) --启动计时器
----------------------------------------------------------------------------
在js脚本中要实现control.Object2Lua("zoom2DtoExtent",zoom2DtoExtent)
其中control为易景地球三维控件变量
以上代码实现可以适应于ie,firefox,chrom浏览器
补充:
lua脚本语言的使用方式可以参考易景地球帮助文档
具体可以从 “开始-所有程序-EIVA-EviaEarth-帮助-易景地球帮助文档“ 找到
启动帮助文档后lua说明的位置如下图所示:
红框为lua脚本语言的帮助说明
二三维BS开发,实现二三维联动的代码参考
下面的代码采用Lua(易景地球直接支持的脚本语言)实现
--------------------------------------------------------
CameraChanged = 0 --摄像机是否发生了变化,=0表示没有变化,=1表示已经发生了变化
evControl:AddEvent("OnCameraChanged",function ()
CameraChanged = 1
end)
--从一个folder中提取所有图层
function traverseLocateLayer(n)
if(n == nil) then
return nil
end
folder = n:GetChild("image")
if folder == nil then
return nil
end
return folder:GetChild("CHN")
end
function OnTimer()
if CameraChanged == 0 then
return
end
local scene = evControl.Scene.EvEarthScene
if scene == nill then
return
end
local camera = scene.Camera
if camera.EyeshotChanged < 500 then
return
end
CameraChanged = 0
--查找CHN的影像图层
local image = traverseLocateLayer(scene.Doc.RootFolder)
if image == nil then
return
end
--取得当前影像的基本和摄像机对应的坐标位置
local level = image.MaxVisibleLevel
local lookat = camera:GetLookAt()
if lookat ~= nil then
zoom2DtoExtent(lookat.Longitude,lookat.Latitude,level)
end
end
evTimer.every(1,OnTimer) --启动计时器
----------------------------------------------------------------------------
在js脚本中要实现control.Object2Lua("zoom2DtoExtent",zoom2DtoExtent)
其中control为易景地球三维控件变量
以上代码实现可以适应于ie,firefox,chrom浏览器
补充:
lua脚本语言的使用方式可以参考易景地球帮助文档
具体可以从 “开始-所有程序-EIVA-EviaEarth-帮助-易景地球帮助文档“ 找到
启动帮助文档后lua说明的位置如下图所示:
红框为lua脚本语言的帮助说明