一、二次开发概述
TerraExplorePro提供了一整套的API,供二次开发使用,它提供了一些访问外部信息的方法,比如:数据库或矢量数据的。所有这些以COM协议为基础的界面都可以通过脚本语言管理,也可通过非脚本语言控制(如:C++或Visual Basic)来开发(c/s)。TerraExplorePro也可以设置ActiveX控件。它作为ActiveX控件通常被应用在可视化界面的3D窗口、信息树、导航图的操作。
二、TerraExplorePRO API的功能
用户接口API:是对标准TerraExplorer Pro API的扩充。利用其强大功能,开发人员可控制和激活大多数TerraExplorer Pro的工具和函数。如:
1、控制飞行和视景
2、对象的创建
3、信息树和管理
4、层和对象管理
5、事件处理
6、在网页和windows应用程序中添加ActiveX控件 另外,TerraExplorerPro的API还允许常用的一些操作,比如控制容器中的内容,查询地形高度信息,获取快照,查找对象等更多操作。
三、开发准备
1、开发环境(B/S)
本地开发环境(IIS,TEPro, 根据项目的要求具体选择服务器端的语言和客户端的脚本语言,如:asp,asp.net,jsp,php…..,使用的开发工具用: Microsoft Visual Studio .NET 2003/5, 客户端脚本语言:javascript/jscript,vbscript,使用的开发的工具:UltraEdit,Editplus等等,根据自己爱好) 网络开发环境:在服务器上进行开发和调试,但在服务器上必须安装internet lic+TerraGate的情况下,才能应用,本机只需安装TE即可; 客户端需要安装TE(TerraExplorer)+ IE60版本即可使用本系统。
2、 在网页中如何使用Activex控件
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>网页标题</title> </head> <body> / <!--定义TerraExplorer的信息窗口对象--> <object ID="TEInformationWindow" classid="CLSID:3a4f9193-65a8-11d5-85c1-0001023952c1" width="300" height="400"></object> <!--定义一个TerraExplorer 3D窗口对象--> <object ID="TE3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" width=650 height="400"></object> <!--定义TerraExplorer对象--> <object ID="TE" CLASSId="CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1"> </object> </html>
四、HelloWorld
下面先通过一个简单的例子介绍一下如何使用API加载一个三维地图。
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Skyline JS EX</title> <script type="text/javascript"> /** * *初始化页面,加载工程,监听工程加载完毕事件 * */ function Init() { try { //fly文件路径 var flyPath = "D:\\SkylineEX\\flys\\Ex.FLY"; //添加onloadFinished事件 SGWorld65.AttachEvent("OnLoadFinished", OnProjectLoadFinished); //打开工程 SGWorld65.Project.Open(flyPath); } catch (e) { alert("Error: " + e.description); } } /** * *onloadFinished事件方法 * */ function OnProjectLoadFinished() { //创建位置 var China = SGWorld65.Creator.CreatePosition(112.46212296451202,32.02717019165982,12946949.476816356,0,352,-90); //相机定位到声明的位置 SGWorld65.Navigate.FlyTo(China); } /** * *鼠标移动事件 * */ function OnMouseMoved(){ //获取相机当前位置信息 var current = SGWorld65.Navigate.GetPosition(); //在消息栏显示出相机相关信息 SGWorld65.Window.ShowMessageBarText("X:" + current.X +" Y:" + current.Y + " Z:" + current.Altitude + "Yaw:" + current.Yaw); } </script> </head> <body οnlοad="Init()"> <!--定义一个TerraExplorer 3D窗口对象--> <object id="TE" classid="clsid:3a4f9192-65a8-11d5-85c1-0001023952c1" οnmοusemοve="OnMouseMoved()" style="width: 100%;height: 100%"></object> <!--定义TerraExplorer对象SGWorld65--> <object id="SGWorld65" classid="CLSID:3a4f9197-65a8-11d5-85c1-0001023952c1" style="visibility: hidden;height: 0"></object> </body> </html>
以下是运行效果: