Skyline地图数据加载方法,这个是最基础的操作步骤,然后再进行拓展,通过API文档可以查询到所有Js的方法引用说明。
注意事项
在Skyline Web Js 二次开发中,凡是TerraExplorer里面的功能在API中都有对应的方法,可以根据TE里面的菜单名称找到对应的方法(如:Navigate菜单下的所有功能对应API中Navigate下的所有方法),可以方便快捷的进行二次开发,有些功能方法藏的比较深,需要自行理解和发掘。
需求分解
- 加载工程文件
- 添加事件信息
- 创建坐标点位
- 飞行到坐标点
- 每次移动屏幕相机画面,获取坐标点信息,并显示在消息栏中
方法说明
- SGWorld66.AttachEvent(bstrEventName,DispFunc);
- 添加事件,这里值得一提,Skyline的API文档实在是太烂了,因为在说明里,并没有明确指出具体事件的名称,其实它所指的事件名称就在API文档ISGWorld的列表里面,On打头的都是可使用的事件QAQ。
- SGWorld66.Project.Open();
- 打开工程文件
- SGWorld66.Creator.CreatePosition(X,Y,Altitude,AltitudeType,Yaw,Pitch,Roll,Distance);
- 创建坐标点,X和Y表示坐标值,Altitude为点位的高度值的可选参数,AltitudeType为高度类型的可选参数,Yaw为偏航(即左右旋转度数,范围0-360度,0为北,90为东,180为南,270为西),Pitch为俯仰角度(0为水平面,+90度为仰视最大角度,-90度为俯视最大角度,测试时建议先用俯视角度进行测试比较容易确定具体点位),Roll为翻滚(没用过。),Distance为距离(即离目标点位的距离,这个参数建议最好设置从50开始,否则从原点0进行测试,你会发现视角严重偏离),一般来说设置X,Y,Alititude这3个参数,即可显示出效果,其余的参数用于图片覆盖旋转角度、设置飞行路径等会用到,需要不断尝试
- SGWorld66.Navigate.FlyTo(target,Pattern);
- 飞行到目标位置,target有4种类型(1.对象ID字符串 2.对象ITerraExplorerObject66 3.工程目录树中的GroupID值ProjectTree GroupID 4.坐标点对象IPosition66 object);Pattern为可选参数,即飞行方式,详见API
- SGWorld66.Navigate.GetPosition(AltitudeType);
- 获取导航位置,AltitudeType类型为可选参数,详见API;返回值类型为IPosition66,坐标类型对象,对象属性值详见API
- SGWorld66.Window.ShowMessageBarText(Text,Alignment,Timeout);
- 在消息显示栏中显示信息,Text为文本信息,Alignment为显示的位置的可选参数(0-左 1-中 2-右),Timeout为显示时间的可选参数
Jsp源码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<script type="text/javascript" >
/**
* 初始化
*/
function Init() {
try {
var flyPath = "http://192.168.1.224:8090/default0505.fly";
//添加onloadFinished事件
SGWorld66.AttachEvent("OnLoadFinished", OnProjectLoadFinished);
//打开工程
SGWorld66.Project.Open(flyPath);
} catch (e) {
alert("Error: " + e.description);
}
}
/**
*onloadFinished事件方法
*/
function OnProjectLoadFinished() {
//创建位置
var China = SGWorld66.Creator.CreatePosition(116.38752366300,39.99765237460,15000,0,352,-90);
//相机定位到声明的位置
SGWorld66.Navigate.FlyTo(China);
}
/**
*鼠标移动事件
*/
function OnMouseMoved(){
//获取相机当前位置信息
var current = SGWorld66.Navigate.GetPosition();
//在消息栏显示出相机相关信息
SGWorld66.Window.ShowMessageBarText("X:" + current.X +" Y:" + current.Y + " Z:" + current.Altitude + " Yaw:" + current.Yaw);
}
</script>
<body onload = "Init();">
<!--定义一个TerraExplorer 3D窗口对象-->
<object id="TE" classid="clsid:3a4f9192-65a8-11d5-85c1-0001023952c1" onmousemove="OnMouseMoved()" style="width: 80%;height: 100%"></object>
<!--定义TerraExplorer对象SGWorld65-->
<object id="SGWorld66" classid="CLSID:3A4F9199-65A8-11D5-85C1-0001023952C1" style="visibility:hidden;height:0 "></object>
<!--定义一个TerraExplorer 信息窗口对象-->
<object id="TEInformationWindow" classid="CLSID:3a4f9193-65a8-11d5-85c1-0001023952c1" width="15%" height="100%">
</object>
</div>
</body>
</html>