1. 开发环境(B/S)
本地开发环境(IIS,TEPro, TEDEV,根据项目的要求具体选择服务器端的语言和客户端的脚本语言,如:asp,asp.net,jsp,php…..,使用的开发工具用: Microsoft Visual Studio .NET 2003/5, 客户端脚本语言:javascript/jscript,vbscript,使用的开发的工具:UltraEdit,Editplus等等,根据自己爱好)
网络开发环境:在服务器上进行开发和调试,但在服务器上必须安装internet lic+TerraGate的情况下,才能应用,本机只需安装TE即可;
2. 服务器的配置
服务器端必须要安装TerraGate3.0/3.5,的主要作用是进行mpt的网络发布,在TerraGate 可以设置多个mpt,供fly工程文件调用。(调用文档)
3. 客户端浏览
客户端需要安装TE(TerraExplorer)+ IE60版本即可使用本系统。
4. 二次开发的概述
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还允许常用的一些操作,比如控制容器中的内容,查询地形高度信息,获取快照,查找对象等更多操作。
5. 开发前的准备
在网页中如何使用Activex控件
/
6. 接口的概述
当前的版本号:TerraExplorer Pro version 5.0.0.f47
ITerraExplorer5 (Partial)
IPlane5
ITerrain4
IContainer2
IRender4
ISnapShot2
IStartPosition
_ITerraExplorerEvents5
IInformationTree5 (Partial)
IObjectManager5 (Partial)
ITENavigationMap
_ITENavigationMapEvents
IMenu
7. 接口的介绍:
ITerraExplorer5(第21章)
告诉你关于用户接口的细节,例如怎样加载一个工程文件,对加载的工程文件进行加密,设定3d窗口的模式(cpu是否处理),获得用户当前使用的版本的信息,单位的设置,还可以对当前的工程文件进行保存,也可以把服务器上的工程文件保存到本地中。
属性:
Type:获取版本
FlyName:工程的文件名
DisplayErrorMessages:错误的设置模式
布尔型:当设置为false/0时,TerraExplorer错误信息在com方法调用的时候不显示给用户,如果设置为true时,则显示,系统默认设置为true; 错误处理在IErrorInfo接口中,目前没有公开。
方法:
Load([in] BSTR URL):加载工程文件:
可以导入本地的工程文件或mpt文件,也可以导入网络的工程文件或地形文件,地形文件导入的方式:文件名.mpt@ip:端口
SetCPUSavingMode([in bSavingMode]):设置cpu的工作模式
如果设置为1:工作,0不工作
GetUserUnits(
[out] VARIANT* shortAltitude, 海拔
[out] VARIANT* shortAltitudeType, 海拔的类型
[out] VARIANT* shortLatLongType) 经纬度类型
)
GetTEVersion:获得当前TE的版本号;
LoadEx:加载加密的工程文件,同步或异步打开(MPT有关系)
[in] BSTR URL,
[in] BSTR User,
[in] BSTR Password,
[in, defaultvalue(0)] long Asynchronous) 1为异步,0 为同步
Save:保存工程文件
SaveAs:另存为工程文件
具体实现如下:
1 定义对象
2 初始化对象
3 加载Activex
4 浏览网页
代码如下:
html>
var ITerraExplorer = null;
var IPlane = null;
var IMenu = null;
var IObjectManager = null;
//---------------------------------------------------------------
function Init()
{
var temp;
ITerraExplorer = TE.interface("ITerraExplorer5");
ITerraExplorer.load("D:\\Job\\test.fly");
temp = ITerraExplorer.Type;
alert(temp);
}
IPlane5
IPlane5接口是对飞行方式、观看位置进行控制,能操作浏览对象的观察角度,方向、速度、放大,偏航,斜度,旋转 …..,来产生复杂的移动。
属性:
Speed:速度以米/秒为单位,在3dwindow上运行,根据设置的大小决定对象运行的快慢;
FieldOfView:观看3dwindow的区域,在观看的程度上,对于球体,它的角度设置的范围在1-180度中间,1为放到最大程度,180为放到最小程度,对偏航的设置,此值必须设置为5 -90度之间,默认的是53度。
方法:
FlyTo:此方法是飞行的动作,根据得到x坐标,z坐标,,视景的高度设定,设置不同运动方式(偏航(Yaw),斜度(Pitch),运动的方式)的设置,飞到并定位到目的地,还可以对目的地进行距离的设置。
[in] double X,
地形上的x坐标的位置
[in] double Z,
地形上的z坐标的位置
[in] double Height,
飞行对象与地形的高度
[in] double Distance,
距离的远进,就像摄像机拉镜头一样。
[in] double Yaw,
偏航的设定,对飞行对象偏航的角度进行控制。
[in] double Pitch,
对斜度进行控制
[in] BSTR Pattern)运动的模式
对飞行动作模式进行控制
共有7个参数
1、 FlyToLocation
2、 JumpToLocation
3、 FlyToTerrain
4、 Circle(圆)
5、 Oval(椭圆)
6、 Line(线形)
7、 Arc(圆弧)
代码:
SetPosition
设定当前3dwindow的视角的位置,不同于MovePosition,此方法直接“jump“到某个位置。
用户可以从一个城市直接跳到另一个城市
[in] double X,
X坐标
[in] double Y,
Y坐标
[in] double Height,
高度
[in] double Yaw,
偏航
[in] double Pitch,
斜度
[in] double Roll,
滚动
[in] double CameraDeltaYaw,
视角的偏航,与飞行到某个对象的偏航相同
[in] double CameraDeltaPitch,
视角的斜度。。。。。。
[in, defaultvalue(0)] long Flags)
Flag共有13个参数,默认为0,每个参数都对应上面一个参数,使某个参数无效。
MovePosition
与setPosition相同。
GetPosition
这个方法重新得到setPosition的参数,来定义3dwindow的位置和方向
[out] VARIANT* doubleX,
[out] VARIANT* doubleY,
[out] VARIANT* doubleHeight,
[out] VARIANT* doubleYaw,
[out] VARIANT* doublePitch,
[out] VARIANT* doubleRoll,
[out] VARIANT* doubleCameraDeltaYaw,
[out] VARIANT* doubleCameraDeltaPitch)
应用:自定义坐标转换 IPlane.GetPosition CurrX, CurrY, CurrH, CurrDirection, CurrPitch , CurrRoll, CurrDeltaYaw, CurrDeltaPitch
FlyToObject
飞到具体的某个地形上的对象
[in] BSTR ObjectID,
Dim ItemID = IInformationTree.FindItem("浏览路径\2006北京国际马拉松赛")
'msgbox ItemI
if ItemID <> 0 then
ObjID = IInformationTree.GetTerraObjectID(ItemID)
IPlane.FlyToObject ObjID, 18
els
alert "Item not found: "&ItemName
End If
[in] ActionCode Code)
动作代码:
o AC_FLYTO = 0 //飞行到对象
o AC_CIRCLEPATTERN = 1 //圆形
o AC_OVALPATTERN = 2//椭圆
o AC_LINEPATTERN = 3 //线形
o AC_ARCPATTERN = 4 //弧形
o AC_FOLLOWBEHIND = 5 //后边
o AC_FOLLOWABOVE = 6 //上方
o AC_FOLLOWBELOW = 7下方
o AC_FOLLOWRIGHT = 8 //右边
o AC_FOLLOWLEFT = 9 //左边
o AC_FOLLOWBEHINDANDABOVE = 10 //后上方
o AC_FOLLOWCOCKPIT = 11 //坐在机舱
o AC_JUMP = 14 //跳转
o AC_PLAY = 18 //跳转并播放
SetSpeed
([in] double Speed)
此方法设置视角的速度,以此设置的速度靠近某个对象
GetSpeed
[out, retval] double* Speed)
获得以速度的值
Zoom
此方法执行飞行到某个对象的时候进行放大
[in] double Distance,
在某个距离段执行的操作
GetPositionEx
重新获得setPosition的参数,定义视角的位置和方向,此方法多了一个
Flag,可以重新找到海拔高度的方法到地形数据上。
用于像地面剖析等。
例子:
IObjectManage5
这个对象负责在工程文件里创建对象,它的方法完成不同的对象,所有的对象都继承ITerraExplorerObject5接口,当创建对象后就可已获得这个接口的属性和方法。
CreatePolyline,
在3d窗口中创建线条
[in, defaultvalue(0)] VARIANT SafeArrayVertices,
需要输入得是一个数组序列,两两出现,如:第一个值为x坐标,第二个值为y坐标…….
在这里一般使用鼠标点击画线结合使用(作个案例);
[in, defaultvalue(0x0000ff00)] long LineColor,
定义一个线形得颜色,用10进制得形式表示
[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,
设定高度得样式,
有3个选项
每个线的置高点都与地形有关系
[in, defaultvalue(0)] long GroupID,
所划得线条放在那个组里。
[in, defaultvalue("")] BSTR Description,
对所划得线进行相关得描述。
[out, retval] ITerrainPolyline5** pITerrainPolyline5)
返回一个pITerrainPolyline5对象可以调用pITerrainPolyline5里面得对象和方法。
Create2DPolygon,
创建2的多边形,
HRESULT Create2DPolygon (
[in, defaultvalue(0)] VARIANT SafeArrayVertices,
需要输入得是一个数组序列,两两出现,如:第一个值为x坐标,第二个值为y坐标…….
[in, defaultvalue(0x0000ff00)] long LineColor,
线形得颜色,用10进制得形式表示
[in, defaultvalue(FT_NONE)] double FillOpacity,
对多边形的填充的颜色透明度的属性值进行控制。
0 - 100%
[in, defaultvalue(0x00646464)] long FillColor,
对多边形的颜色填充。
[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode
HeightStyle,
在地形上的高度的呈现的形式;
[in, defaultvalue(0)] long GroupID,
所划得多边形放在那个组里。
[in, defaultvalue("")] BSTR Description,
对所划得线进行相关得描述。返回一个字符串
[out, retval] ITerrainPolyline5** pITerrainPolyline5)
返回pITerrainPolyline5对象,可以使用pITerrainPolyline5的所有属性和对象。
CreateRectangle,
在窗口中创建一个矩形;
[in] double X,
地形的X坐标
[in] double Y,
地形的y坐标
[in] double Elevation,
地形的海拔或高度。
[in] double ObjectWidth,
矩形对象的宽度
[in] double ObjectDepth,
矩形对象的深度。
[in, defaultvalue(0x0000ff00)] long LineColor,
线形的颜色设置
[in, defaultvalue(FT_NONE)] double FillOpacity,
对象填充颜色的透明度;
[in, defaultvalue(0x00646464)] long FillColor,
对象填充颜色的颜色;
[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,
在地形高度的显示的高度样式
[in, defaultvalue(0)] long GroupID,
存入到那个组
[in, defaultvalue("")] BSTR Description,
对当前对象的描述
[out, retval] ITerrainRectangle5** pITerrainRectangle5)
返回ITerrainRectangle5对象,即可使用ITerrainRectangle5的所有对象和属性。
CreateRegularPolygon,
创建正多边形
[in] double X,
当前的地形的x坐标
[in] double Y,
当前的地形的Y坐标
[in] double Elevation,
当前对象在地形中的海拔的属性值
[in] double Radius,
多边形的半径属性值
[in] int NumOfSegments,
设定多边形边数。
[in, defaultvalue(0x0000ff00)] long LineColor,
设定线的颜色
[in, defaultvalue(FT_NONE)] double FillOpacity,
设定填充的颜色的透明度
[in, defaultvalue(0x00646464)] long FillColor,
设定填充的颜色
[in, defaultvalue(HSC_TERRAIN_RELATIVE)] HeightStyleCode HeightStyle,
对高度样式的设定
o HSC_TERRAIN_RELATIVE = 0
Each of the polygon’s vertices has the same height above the terrain (determined by the Elevation parameter).
o HSC_PIVOT_RELATIVE = 1
The height of the polygon’s pivot (the center of the regular polygon) is determined by the Elevation parameter. Each of the polygon’s vertices lies on the same plane as the polygon’s pivot.
o HSC_ON_TERRAIN = 2
The polygon’s vertices are placed on the terrain.
o HSC_TERRAIN_ABSOLUTE = 3
[in, defaultvalue(0)] long GroupID,
当前对象的组
[in, defaultvalue("")] BSTR Description,
描述
[out, retval] ITerrainRegularPolygon5** pITerrainRegPolygon2)
返回ITerrainRegularPolygon5对象,可以使用ITerrainRegularPolygon5里的所有对象和属性
CreateCircle,
//创建圆形对象
Create3DPolygon,
创建3d多边形
CreateBuilding,
//创建建筑物
CreateBox,
//创建box
CreatePyramid,
//创建椎体(底部有规则)
CreateCylinder,
//创建圆柱
CreateCone,
//创建椎体(底部是圆形)
CreateEllipse,
//创建椭圆
CreateArc,
//创建弧形
CreateArrow,
//创建箭头
Create3DArrow,
//创建3d箭头
CreateSphere,
//创建球体
CreateModel, (用例子说明)
创建模型
CreateLabel,
[in] VARIANT LabelInfo,
[in] double X,
[in] double Y,
[in] double Elevation,
[in, defaultvalue(0)] HeightStyleCode HeightStyle,
指的是从地面算的高度,比如一栋楼高30米像海拔高度,从海平面算起的(大地水准面)
[in, defaultvalue(0)] long GroupID,
[in, defaultvalue("")] BSTR Description,
[out, retval] ITerrainLabel5** pITerrainLabel5)
文本标签
CreateLabelEx,
文本标签
CreateLocation,
创建本地区域
CreateTreeHotlink,
//电击出东西
CreateRoute,
//绘制动态路径,可以对他进行播放、录制保存成avi等视频文件的操作(实例讲解)
CreateMessage,
创建对话框与IContainer结合使用
GetObject,
获取该对象
[in] BSTR ObjectID,(对象的ObjectID如何获取),实例讲解
[out, retval] ITerraExplorerObject5** pITerraExplorerObject5)
CreateImageLabel,
//创建图片标签
CreateImageLabelEx,
//创建图片标签
CreateDynamicObject (用实例讲解)
//创建动态对象
CreateImageryLayer,
//创建图片层,贴在地形上
CreateElevationLayer,
//创建海拔层,贴在地形上
CreateVideoOnTerrain,
//创建视频到地形上
CreatePointCloudModel,
//创建云点模型
可以导入*.CPT(point Cloud Files)
说明:点云就是是无数个空间点构成的集合;就是它每个点都坐标;
GetInfoTreeItemID,
获取被创建的对象在信息树的ItemID,
IObjectManage5 讲解的实例:
1 创建飞行对象,飞到某个位置时在创建文本对象调用第22章的ITerrainLabel5对象,
2 创建3d模型,
IInformationTree5
此接口主要实现的功能够显示和管理所有对象,可以创建组,修改组,删除组,重命名组,可以实现组的排序,供创件对象使用。 提供的方法有:
CreateGroup,
在信息窗口中创建一个组
in] BSTR GroupName,
[in, defaultvalue(0)] long ParentGroupID,
[out, retval] long *pVal)
CreateLockedGroup,
//创建一个锁定的组
[in] BSTR GroupName,
[in, defaultvalue(0)] long ParentGroupID,
[out, retval] long *pVal)
RenameGroup,
对组进行重命名
[in] long GroupID,
[in] BSTR GroupName)
ExpandGroup,
展开一个组
[in] long GroupID,
[in] BOOL bExpand)
GetItemName,
获取列表的名字
[in] long ItemID, //ItemID的infotree. FindItem(“对象”);
[out, retval] BSTR *ItemText) //输出列表文本
DeleteItem,
//删除列表
SetParent,
//移动列表到不同的组,就象数据库关系数据库一样,设置它的关联属性,这里的关联属性就是:ParentGroupID
GetNextItem,
这个方法很有用,可以遍历出信息树里的组的 ID 和 组里对象的ItemID,
[in] long ItemID,
[in] ItemCode Code,
o SELECTED – 10
获取当前选中的对象
o CHILD – 11
返回第一个组下对象的ItemID
o NEXT – 13
返回下一个兄弟节点
o ROOT – 18
获得根节点
[out, retval] long *pVal)
FindItem,
查找信息树中的对象
[in] BSTR PathName, //输出对象的ItemID
[out, retval] long *pVal)
GetTerraObjectID,
//获得地形的对象的ID
HRESULT GetTerraObjectID (
[in] long ItemID,
[out, retval] BSTR *pVal)
通过它和ItemID,可以获取对象的ObejctID,可以实现FlyToObject的操作。
SetGroupColor,
in] long GroupID,
[in, defaultvalue(0x00ffffff)] long GroupColor)
//设置组的颜色
GetGroupColor,
[in] long GroupID,
[out, retval] long *pVal)
获得组的颜色
EnableRedraw,
IsGroup,
判断是否有没有某个组 ,就象IsEmpty函数样的功能
SetGroupVisibility,
设置组是否显示:组前复选框是否显示,
IsGroup, SetGroupVisibility,可以控制组的一些操作,如:对加载进来的组进行改名,显示和隐藏的操作
SortGroup,
对组进行排序
SetGroupLocation,
[in] long GroupID,
[in] double X,
[in] double Y,
[in] double Height,
[in] double Distance,
[in, defaultvalue(0)] double Yaw,
[in, defaultvalue(-50)] double Pitch,
[in, defaultvalue(0)] long Flags)
设置组为Location组,此组是特殊的组,可以定位到地形的某个地方。
GetGroupLocation,
获取Location组的信息,供其他地方地方的调用
CreateLockedGroupEx,
与CreateLockedGroup实现的功能类似,增加了组的索引。
如图:
SetActivationCode,
[in] long GroupID,
[in] ActionCode ACode,
[in, defaultvalue(-1)] int ActivationParam); //当前不能使用
设定一个组的运动状态,如, GroupID=“111“的组运动状态为:JumpToLocalion
GetActivationCode,
获取上面的信息
SetClientData,
设置一个对象的属性信息,这个字符串可以是外部的xml格式字符串,
如:
GetClientData,
获得一个对象的属性信息,返回一个xml格式文档(DOM)去解析它。
GetObjectX,
获得一个对象,可以得到对象的相关信息:如:ID, ObjectType, ClientData
Set TEObject = IObjectManager.GetObject(ObjectID)
SetParentEx,
//移动列表到不同的组,就象数据库关系数据库一样,设置它的关联属性,这里的关联属性就是:ParentGroupID
EditItem,
[in] long ItemID)
打开属性框对对象进行编辑
EditItems,
[in] VARIANT SafeArrayItems) //所有对象的ItemID列表
打开编辑属性去修改组里所有的列表对象
LoadFlyLayer,
[in] BSTR FlyFile,
//工程文件的地址
[in, defaultvalue(0)] long ParentGroupID)
// ParentGroupID很重要,用它可以把工程文件分类
此方法非常有用, 可以加载一个fly工程文件,可以往主工程文件里叠加子工程文件,具体实现的方法是:把已做好的工程文件放到某个位置(或其他机器上),然后用LoadFlyLayer就可以把工程文件加载进来,实现了层叠加的功能。
IsGroupEx,
[in] long ItemID,
[out] VARIANT* boolLocked,
[out, retval] BOOL* pVal)
判断是否有没有某个组 ,就象IsEmpty函数样的功能
boolLocked 判定这个组是锁定的组,或没有的组
GetGroupVisibility,
[in] long GroupID,
[out, retval] int *pVal)
返回的是信息树中的可视的组
SaveFlyLayer,
[in] BSTR FlyFile, :工程文件名
[in] long GroupID) //当前要保存的GroupID
这个功能可以实现本地信息库的功能
CreateLayer,
自定义创建一个层到信息窗口中,创建好后可以向层里添加文本,3d模型等。
1 这个方法可以直接读取shape 图层的数据信息;(实例讲解)
2 可以读wfs(WFS的全称是网络要素服务接口规范,其提出目的是为了规范对OpenGIS简单要素的数据编辑操作,从而使得服务器端和客户端能够在要素层面进行“通讯”。 可以到http://www.gisforum.net查看)
3 可以连接Oracle 空间数据库,
这些功能可以用写程序的方式实现,也可以通过在TE Pro 里加载,保存即可,建议选择后一中方式。
EditItemEx,
[in] long ItemID,
[in] EditItemFlags Flags,
[in] VARIANT ParentWindow)
编辑列表对象
EndEdit,
这个方法结束编辑模式
SetClientDataEx,
增加了:Namespace – The identifier of the text string. You can store several text strings in the group by using different GetClientDataEx,
GetLayer,
[in] long GroupId,
[out, retval] ILayer5** pILayer);
获得一个层
SetVisibility,
HRESULT SetVisibility(
[in] long ItemID,
[in] bool bShow)
设置信息树里的具体对象显示和隐藏
GetVisibility,
[in] long ItemID,
[out, retval] int* pVal)
返回信息树中的对象在地形中显示的状态;
GetObjectEx,
LockGroup
锁定一个组,是它变为不可用
SelectItem
[in] long ItemID,
[in, optional, defaultvalue(0)] long Flags,
//这个方法是选中某个对象
ITerrain4
此接口主要控制mpt相关信息,当前正在使用的mpt文件名,mpt的坐标系统,显示mpt的坐标系统的信息和高程信息
属性:
MptName
GroupKey
SystemKey
DatumKey
UnitKey
EPSG
Description
方法:
GetGroundHeight(没明白)
在地形文件中,利用该方法,使用被给定的精确的水准面,得到被给定的坐标的高程信息。
[in] double X,
[in] double Y,
[in] AccuracyLevel Level,
[out, retval] double* TerrainHeight)
GetGroundHeightEx
与上相似
GetExtent(没有测通)
返回mpt的坐标的范围(矩形),这个坐标的范围平行与x和y轴。
[out] VARIANT* doubleLeft,
[out] VARIANT* doubleTop,
[out] VARIANT* doubleRight,
[out] VARIANT* doubleBottom)
IObjectManager5
这个接口负责在项目里创建所有terraExplorer Pro里对象,如:创建文本,创建贴图,创建3d模型……
IInformationTree5
IContainer2
对容器的操作,主要应用在脚本语言中。可以与TerraExplorer内在的容器进行交互,在一个确定的容器中,它允许增加、移除和改变容器中的URL。如画线:把定义线形的各个属性放在一个网页里,然后加载到容器里,当启动容器时,即可画线,从而实现了层显示的操作.没有属性.
方法:
SetURL,
输入一个地址的链接和网页的显示方式.
[in] int nContainer,
网页(message)的显示方式
o Upper Left = 0
//在主窗体左上角显示,在b/s中已activex控件的形式出现
o Lower Left = 1
//在主窗体左下角显示,在b/s中已activex控件的形式出现
o Main = 2
//在主窗体中显示,在b/s中已activex控件的形式出现
o Message Bar = 3
//在主窗体的下面显示, 在b/s中已activex控件的形式出现
l floating Browser
l //弹出一个网页
l Floating Popup
l 在3dwindow 上显示一个容器,容器里加载一个网页,可以设置位置,大小,等属性
总体说明就时消息的显示的位置的控制.
[in] BSTR TabName,
TabName – A string that holds the tab name of the new URL that is being added to the container.
设定
[in] BSTR URL)
输入一个地址(需要调用的网页相对位置或绝对位置)
RemoveURL,
删除一个URL地址
[in] int nContainer
o Upper Left = 0
o Lower Left = 1
o Main = 2
o Message Bar = 3
o Floating popup = 5
漂浮在3dwindow上
[in] BSTR TabName)
定义名称
BringToFront,
This method can be used to ensure that the URL that was added using the SetURL method is the foreground tab of the container.
这个方法使用时保证被增加的URL的地址在容器的最前面.
SetMessageBarText,
此方法设置消息显示的内容
HTMLPopup
这个方法显示一个html popup 窗口容器在ie浏览器中,可以直接弹出网页或文本信息,当你需要在3d window中漂浮层的时候,这是方法时最佳方法.
[in] MsgType Type,
容器里装载的时文本信息还是一个网页的设置.
[in] int X,
容器显示的x坐标的位置
[in] int Y,
容器显示的y坐标的位置
[in] int Width,
容器显示的的宽度
[in] int Height,
容器显示的高度
[in] BSTR Caption,
容器的标题显示的定义
[in] BSTR Content,
这里的内容根据MsgType Type的选择而变化,当MsgType Type设为0,这里直接输入文本信息,如果MsgType Type选择1时,则这里直接给入一个URL地址即可.
[in, optional, defaultvalue(0)] long Flags,
对弹出的容器进行相关的设置
设为 1 时,当3dwindow变换时,此容器保持原来的状态,意思是弹出的容器在屏幕上保持了上面参数设定的原值.
设为 2 时,
可以对它进行移动
设为4 时,
具备了参数1的功能,同时把容器的标题栏隐藏了,只显示了容器的内容区.
设为8 时,
保存了前一此打开此容器的位置.
设为16 时,
保存了上一此的窗口的大小弹出容器
设为32 时,
可以自定义窗口的大小,可以托拽右下角.
设为64 时,
增加投影效果
设为128 时,
去除窗口的边框
设为256 时,
When in embedded mode sets the application focus to the 3D window. If not used the focus is set to the popup content.
[in, optional, defaultvalue(0)] int Timeout)
设置超时的时间,单位为秒,当超出时间时,会自动关闭窗口;
IRender5
IRender5提供的属性和方法主要与3d window相关信息,把3dwindow窗口的信息提交的数据根据需求进行相关处理。
可以实现获取3dwindow的当前窗口的大小,可以把鼠标点击的屏幕坐标转换为经纬度坐标,可以控制鼠标的输入模式,替换鼠标的指针样式,可以获得鼠标的坐标信息
属性:
Quality
一个mpt被加载到3d window窗口中,可以调整它的质量的百分比,从而达到最佳状态,默认时最佳状态,
HudMode
o HM_NONE = 0 当前为空
o HM_COMPASS = 1 显示指南针
o HM_GRAPHIC = 2 以绘画的方式(值的信息不太明白)
显示当前的速度,旋转的数值,缩放的比例,等3dwindow运动的信息
o HM_TEXT = 3
显示经纬度,离地面的高度等信息
//--------------------------------------
用于activex中
o HM_ACTIVEHUD = 4
只有3d window信息窗口
o HM_ ACTIVEHUD_COMPASS = 5
指北针的实时指向
o HM_ ACTIVEHUD_GRAPHIC = 6
同 3
o HM_ ACTIVEHUD_ TEXT = 7
同 4
方法:
GetRenderRect()
主要输出屏幕坐标和3dwindow的宽度和高度
[out] VARIANT* intScreenX,
获取3dwindow的x的原点
[out] VARIANT* intScreenY
获取3dwindow的y的原点,
[out] VARIANT* intWidth
, 3dwindow的宽度
[out] VARIANT* intHeight)
, 3dwindow的高度
ScreenToTerrian
屏幕坐标转换为地形的坐标
[in] int X,
获取当前屏幕的x坐标
[in] int Y,
获取当前屏幕的y坐标
[out] VARIANT* doubleTerrainX,
获取地形的x坐标
[out] VARIANT* doubleTerrainY,
获取地形的x坐标
[out] VARIANT* doubleTerrainElevation)
获取地形的 ????上升, 高地, 正面图, 海拔,
GetMouseInfo
获得鼠标的当前屏幕坐标的位置,和判断用户操作的鼠标的事件
[out] VARIANT* longFlags,
//判断用户操作鼠标的事件的种类
o MK_ LBUTTON = 1 //左键
o MK_ RBUTTON = 2 //右键
o MK_ SHIFT = 4 //功能键
o MK_CONTROL = 8 //功能键
o MK_ MBUTTON =16 //中键
[out] VARIANT* longScreenX,
当前屏幕x坐标
[out] VARIANT* longScreenY)
当前屏幕y坐标
SetMouseInputMode
设定鼠标的输入模式,不同的输入模式可以控制鼠标的各个事件(详见_ITerraExplorerEvents5),默认鼠标的输入模式为关闭状态。当打开时,即可使用如:改变鼠标的指针SetMouseCursor
[in] MouseInputMode InputMode)
SetMouseCursor
[in] BSTR CursorFileName),文件名的要求:必须是一个*.cur, *ani格式的图片
改变鼠标的指针。
GetMouseInputMode
获得鼠标的输入模式的切换 + 菜单号的调用,可以实现很多功能。
ScreenToWorld
此方法返回把屏幕的象素坐标转换为地形坐标,如果你选择一个工程文件离的一个对象而不是地形文件的话,那么此方法会自动获取概对象的ObjectID 和 object type(label,building,3d model……),此方法已替换了前一版本的ScreenToTerrain的方法。
[in] long ScreenX,
获得当前屏幕x坐标
[in] long ScreenY,
获得当前的屏幕y坐标
[in, out] VARIANT* longObjectType,
输出对象的类型
o OBJ_TYPE_TERRAIN = 0
o OBJ_TYPE_3DOBJECT = 1
o OBJ_TYPE_LABEL = 2
o OBJ_TYPE_PRIMITIVE = 4
o OBJ_TYPE_ANIM = 8
o OBJ_TYPE_BUILDING = 16
o OBJ_TYPE_SKY = 32
[out] VARIANT* doubleWorldX,
输出被转换的x坐标
[out] VARIANT* doubleWorldHeight,
当前的地形的高度
[out] VARIANT* doubleWorldY,
输出被转换的y坐标
[out] VARIANT* bstrObjectID)
输出对象的ObjectID
WorldToScreen
与上相反
ISnapShot2
对当前3dwindow 进行拍摄(截取当前3dwindow),可以设置图片的宽度,高度,可以对当前图片进行保存,设置图片的格式(目前只支持jpeg,bmp),可以设置图片的品质。
属性:
SnapshotWidth
快照的宽度(范围:129 and 1599 px)
SnapshotHeight
快照的高度(范围:130 and 1200)
Format
图片的格式
RenderQuality
方法:
SaveRenderToFile
保存快照的图片并返回此图片的路径
[out, retval] BSTR *FileName)
GetImage (不太明白)
获取快照并返回这个图片的流(stream)对象
IStartPosition (没明白)
对TerraExplorer开始点的坐标,仅仅有两个属性而没有方法。
• StartX
• 在MPT文件中,观察开始位置的X坐标。你能使用ITerrain接口去重新得到MPT单位的信息。如果你正工作在经纬度的模式下,那么经纬度值用十进制表示。
• StartZ
• 在MPT文件中,观察开始位置的Y坐标。你能使用ITerrain接口去重新得到MPT单位的信息。如果你正工作在经纬度的模式下,那么经纬度值用十进制表示。
_ITerraExplorerEvents5
TerraExplorer的所有事件
什么是事件?网上查资料
TerraExplorer提供的事件
OnLoadFinished,
工程文件加载完成后发生的事件
如:工程文件加载完成后查看被加载的工程文件名
OnFileClosing,
当前的fly文件关闭是发生的事件,与网页在body 的unLoad执行的事件是相同的。
在b/s开发时,在关闭网页时必须要退出fly工程文件。
OnFrame,
此事件一直在网页上执行着,可以实时监控网页上的每一个操作
如:点击一个放大按钮时,在这里可以执行一些相关的操作。(具体的操作可以问吴林,写个例子发过来)
OnTerraExplorerMessage,(模糊中)
此事件当TerraExplor发出Message时就会触发的事件,如点击某个对象时,会与用户交互一些信息,此事件就会在此时发生。
[in] BSTR TEMessageID,
//消息的ID
[in] BSTR SourceObjectID,
//源对象的ID
[in, out] VARIANTARG *pbHandled)
OnObjectAction,
在工程文件里执行的动作
[in] BSTR ObjectID,
可以返回对象的ObjectID
[in] int Action)
可以返回对象运动的返回参数
如:跳转到的对象 AC_JUMP返回的值为14
OnFileSave,
• 当一个.Fly文件被保存之前,这个事件被触发。
OnRenderQualityChanged,
• 当用户正在观察的地形质量被更新的时候,这个方法被触发。
OnInputModeChanged,
• 当输入模式改变的时候,这个方法被触发。
OnLButtonDown,
鼠标左键单击事件。
OnLButtonUp,
松开鼠标左键触发的事件
OnMButtonDown,
• 当按下鼠标中间键时,触发该事件。
OnMButtonUp,
• 当松开鼠标中间键时,触发该事件。
OnRButtonDown,
• 当按下鼠标右键的时,触发该事件。
OnRButtonUp,
鼠标左键双击
OnMouseWheel,
转动鼠标滚轮时,并且遇到滚轮的下一个缺口时,触发该事件
OnDrawHUD,
HudMode的属性值必须开启的情况下才能使用,
OnLButtonDblClk,
鼠标左键双击。
OnRButtonDblClk,
鼠标右键双击。
OnMButtonDblClk
中间键双击。
OnInfoTreeAction,
OnTerraExplorer,
事件定义的方式:
function TE:: OnLButtonDown () //鼠标左键按下去所发生的事件动作
{
//代码的操作
}
ICoordSys3
ICoordSys 接口提供给用户的是关于坐标系统的有关功能,
它允许你定义一个自定义的坐标系统,
然后terrainExplorer会把你自定义的这个系统转换成它的坐标系统,
储存在它的数据库里,之后你就可以设置你的坐标系统
要定义GroupKey, SystemKey, DatumKey ,UnitKey,这是自定义必须的设置.
GetTerrainCS,
• 这个方法返回地形的坐标系统,每一个地形数据库都包括它自己的坐标系统,用这个方法你能重新得到这些信息。
SetTerrainCS,
SetSourceCS,
ChooseCSDialog,
GetCSHandle,
GetCSHandleFromEPSG,
ReleaseCSHandle,
Reproject,
GetUnitFactor,
MoveCoord,
MoveCoordEx,
GetDistance,
GetAimingAngles
ConvertToMGRS,
ConvertFromMGRS,
ChooseCSDialogEx
GetDistanceEx,
GetAimingAnglesEx
ITENavigationMap
ITENavigationMap 提供了导航地图,它是以activex控件的形式展示在网页上,可以在导航地图上点击它会自动与三维窗口相对应
属性:
BorderStyle,
设置地图的边框样式
共有4个参数
0— 空
1— 实心的线
2— 带阴影的线
3— 凹凸的线
4— 双线
ShowPlane,
此属性是个bool值,在导航中是否显示方向导航的指标;
MapCount,
在导航地图中显示地图的数量()
MapIndex,
列出地图导航的索引.
ShowMapSelector
哪一个导航地图为选中状态
方法
LoadXml,
加载mxl字符串,可以设置导航地图的一系列的参数,
GetXML,
获取loadXml里所定义的参数和导航地图的信息,
ShowProperties,
这个方法打开和关闭导航地图是否可以被用户添加修改和删除可用的地图
ResetContent,
从导航地图窗口中删除所有的地图
CenterMap,
设置导航地图的中心点坐标位置和导航指示器偏航的
SetTerrainTiePoint,
这个方法是增加地形的关系点到当前选择的地图上,
SetMapTiePoint,
这个方法是增加地图的关系点到当前选中的地图上,
CancelTiePointMode
退出关系点的模式
_ITENavigationMapEvents
监听导航地图的所有事件
OnPopupMenu,
当鼠标在在导航地图上右键单击的时候触发的事件
[in] int MapX,
//返回当前的x坐标
[in] int MapY,
//返回当前的y坐标
[in] double TerrainX,
//返回地形的x坐标(大地坐标)
[in] double TerrainY,
//返回地形的y坐标(大地坐标)
[out] BSTR* bstrContextMenu)
//返回的菜单名
OnCommand,
当在导航中选择菜单命令是触发的事件
OnTiePointMode
IMenu
此接口提供了通过标准菜单命令调用.通过使用3DWindow和信息树你可以自己设计图形用户界面,菜单不再被用户使用.例如:你可以让你的用户使用直接调用TE菜单命令file->open去打开fly文件,因而节省了调用“browse for fly file”对话框的时间
实例化此接口直接传入一个参数,调用菜单号,就可以实现一些功能.
function Menu (MenuID)
{
IMenu = TE.interface("IMenu");
IMenu.Invoke (MenuID);
}
如:Menu(“57601”);(打开一个工程文件)
对象接口
所有的对象都是用IObjectManage5接口创建,它们都来在自与ITerraExplorerObject5对象,