Skyline软件应用材料二次开发篇
Skyline二次开发V6-培训

ActiveX控件介绍
ITE3DWindow
三维场景
ITEInformationWindow
信息树
ITENavigationMap
二维导航图
ActiveX控件介绍(VB版)
ActiveX控件介绍(VB版)
ActiveX控件介绍(VB版)
ActiveX控件介绍(Visual C++ 版)
ActiveX控件介绍(Visual C++ 版)
TerraExplorer Pro API
• TerraExplorer API提供了一套强大的接口用来集成 TerraExplorer、TerraExplorer Pro 和用户自定义应用 。它提供了一些访问外部信息扩展的方法,比如:访问 数据库或基础地理空间数据。所有这些以COM协议为基 础的API接口都可以通过脚本语言操作(例如Javascript ),也可以通过非脚本语言来控制操作(例如:C++、 VB、delphi或者.net)。
Terrain Vector Image ……
.x .flt .dae
COM API SGAPI
SkylineGlobe Enterprise 产品结构图
SkylineGlobe Enterprise 产品结构图
TerraBuilder Family
TerraBuilder (单机版) TerraBuilder Multi-Processor Edition(企业版)
Freeze Major Minor Type
关闭工程 工程参数设置
功能开发:菜单功能实现
ICommand6接口
– – – – CanExecute GetValue IsChecked Execute 时间轴 指北 太阳 地下模式 缩放 判断命令是否可用 获取属性值 判断某个命令是否被激活
Skyline应用开发培训

GetTerraObjectID
IInformationTree5接口
SetGroupColor GetGroupColor EnableRedraw IsGroup SetGroupVisibility SortGroup SetGroupLocation GetGroupLocation CreateLockedGroupEx
GetClientData SetParentEx EditItem EditItems
LoadFlyLayer
IsGroupEx GetGroupVisibility SaveFlyLayer
IInformationTree5接口
CreateLayer EditItemEx 在信息树中创建一个层对象 【通过程序实现在现在有FLY文件中加载矢量图层,需要配合ILayer对象接口的Load方法一起 使用,并且要求输入的xmlLayerBaseInfo有固定的格式要求 】 进入编辑模式,可进行高级编辑设置(是否打开属性框等) 【注意其中的Flags参数,是否显示被编辑状态和属性面板 】 结束编辑模式 存储描述特定组的文本字符串 获取特定组命名空间中的字符串 根据GroupId获取ILayer5的接口 设置信息树子项的是否可见, TerraExplorer Viewer支持本方法。 GetVisibility GetObjectEx 获取对象的接口,根据ItemID和要获取的对象的类型名 LoadFlyLayerEx 装载fly文件到当前工程中,所有的对象被添加到指定的组中,返回新创建组的ItemID LockGroup SelectItem 设置组的折叠状态,当锁定时 View将无法展开该组 选择信息树子项 判断选定对象是否是图层对象。 获取信息树子项的是否可见状态, TerraExplorer Viewer支持本方法。
Skyline软件应用材料二次开发篇.ppt

2.1 Skyline主要开发工具
HTML (VBScript, JavaScript)
VB/VC/Delphi
.NET
其它COM语言
COM 接口 TerraExplorer 框架体系
2.2 Skyline开发体系结构
内嵌式脚本开发 嵌入网页式开发 应用程序自定义开发 COM接口技术
程序网络发布开发 应用程序浏览器
2.3 Skyline的特点、特性
• 简单、便捷、单一实例开发思想 • 基于COM技术开发 • 基于OLE技术的ActiveX技术 • 嵌入式开发与组件式开发有机统一 • 具备内置开发及功能定制 • 。。。。。。。。。。。。。。。。
3. Skyline API 接口简介
整合TerraExplorer、TerraExplorer Pro和自定义应用等强大的技术方法,提 供访问外部信息的扩展的方法的创建, 如数据库或GIS文件;所有的接口都是基 于COM协议技术。
21skyline主要开发工具htmlvbscriptjavascriptvbvcdelphinet其它com语言com接口terraexplorer框架体系22skyline开发体系结构内嵌式脚本开发嵌入网页式开发应用程序自定义开发com接口技术程序网络发布开发应用程序浏览器23skyline的特点特性?简单便捷单一实例开发思想?基于com技术开发?基于ole技术的activex技术?基于ole技术的activex技术?嵌入式开发与组件式开发有机统一?具备内置开发及功能定制?
Set TempModel = TempObject If (TempModel.Visible = 0) Then
TempModel.Visible = True Else
基于Web的skylineTerraExplorerPro开发实例(源码)

基于Web的skylineTerraExplorerPro开发实例(源码)基于html和javascript脚本实现,把基本的TerraExplorer Pro⼆次开发的功能体现出来了。
能给skyline 开发的初学者⼀个很好的范例: <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>lianxi</title></head><body OnLoad="Init();"><object id="TEInformationWindow" classid="CLSID:3a4f9193-65a8-11d5-85c1-0001023952c1" width="300" height="400"><embed width="300" height="400"></embed></object><object ID="TE3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" width=650 height="400"></object><object ID="TE" CLASSId="CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1"></object><hr/><br><table width="100%" height="133" border="1" align="center" bordercolor="#00FF33"><tr><td width="16%" height="29" align="center"><input type="button" name="createline" value="创建线" onClick="Createpolyline()"><input type="button" name="Container" value="弹新窗⼝" onClick="Container()"></td><td width="16%" align="center"><input type="button" name="ITerraExplorer" value="pro属性" onClick="ProInfo()"><input type="button" name="ITerraExplorer" value="pro⽅法" onClick="MethedInfo()"></td><td width="16%" align="center"><input type="button" name="typeInfo" value="ITerrain属性测试" onClick="ITerrainProInfo()"></td><td colspan="3" align="center"> <input type="button" name="typeInfo" value="IStartPosition的属性" onClick="IIStartPositionInfo()"><input type="button" name="typeInfo" value="IRender的属性" onClick="IRenderProInfo()"><input type="button" name="addprograme" value="添加⼯程⽂件" onClick="AddG()"></td></tr><tr><td height="25" colspan="2"><label>创建路径操作:</label><input type="button" name="createdynamic" value="创建" onClick="CreateDynamic()"><input type="button" name="dynamicPlay" value="播放" onClick="DynamicPlay()"><input type="button" name="dynamicstop" value="停⽌" onClick="DynamicStop()"><input type="button" name="dynamicP" value="暂停" onClick="DynamicP()"> </td><td colspan="2" align="center"> <input type="text" name="text" value="新建组" id="CG" width="120"><input type="button" name="createGroup" value="建⽤户组" id="GN" onClick="CreateGroup1()" ></td><td width="15%" align="center"><input type="button" name="kuaizhao" value="快照" onClick="Menu.Invoke(32783)"><input type="button" name="kzsaveas" value="⿏标模式" onClick="GetMouseMode()"></td><td width="20%"> <input type="checkbox" name="showlaler" checked id="chk1" onClick="LayerVis()"> <label>显⽰和隐藏层</label></td></tr><tr><td height="21" colspan="4">名称:<input name="Name" id="flyName" type="text" value="克拉玛依" size="12" width="100">经度:<input name="flyJD" id="flyJD" type="text" value="87" size="10" width="100">纬度:<input name="flyWD" id="flyWD" type="text" value="43" size="10" width="100"> <input type="button" value="起飞" name="FlyToSomeWhere" onClick="FlyToSomeWhere()"></td><td><input type="button" name="deleteobj" value="删除选定的对象" id="delobj" onClick="DelObj()"></td><td align="center"><input type="button" name="infortree" id="iftv" value="信息树的遍历" onClick="InformationTreeVist()"></td> </tr><tr><td height="19"><input type="button" name="createpolygon" value="创建棱锥"onClick="CreateP()"></td><td> </td><td> </td><td width="17%"> </td><td> </td><td><input type="button" name="loadsave" value="加载我的操作" onClick="LoadFromSaved()"></td></tr><tr><td height="25" colspan="3">经度:<span id="jd"></span>纬度:<span id="wd"></span></td><td colspan="3"> <input type="button" value="保存" name="save" onClick="SaveAs()"> <input type="file" value="E:\a.fly" name="saveas" id="adr" width="10"> <input type="button" value="fly另存为" name="save" onClick="SaveAsOther()"><label></label></td></tr></table></body><script language="javascript">var ITerraExplorer = null;var IInformationTree = null;var Polylineflag = false;var Dynamicflag = false;var IRender = null;var IPolyline = "";var isLine = false;var isRoute = false;var IObiectManager = null;var IStartPosition = null;var Route = "";var IContainer = null;var IPlane = null;var ITerrain = null;var IStartPosition = null;var ITerrain = null;var Menu = null;var ISnapShot = null;var ItemID = "";var curItemID = "";var groupID = "";var createpolygoyflag = false;var isPolygon = false;var IPolygon = "";function Init(){ITerraExplorer = TE.interface("ITerraExplorer5");IInformationTree = TE.interface("IInformationTree5");IRender = TE.interface("IRender5");IObjectManager = TE.interface("IObjectManager5");IStartPosition = TE.interface("IStartPosition");IContainer = TE.interface("IContainer2");IPlane = TE.interface("IPlane5");ITerrain = TE.interface("ITerrain4");IStartPosition = TE.interface("IStartPosition");IRender = TE.interface("IRender5");Menu = TE.interface("IMenu");ISnapShot = TE.interface("ISnapShot2");ITerraExplorer.load("c:\\a.fly");window.setTimeout("test()",800);}function test(){IInformationTree.LoadFlyLayerEx("[TE Application Data]\\本⼈上次的操作记录.fly",0);IInformationTree.LoadFlyLayerEx("[TE Application Data]\\本⼈上次创建的动态路径.fly",0);}function SaveAs(){ITerraExplorer.Save();alert("保存成功");}function SaveAsOther(){var txt = document.getElementById("adr").value;if(txt!=""){ITerraExplorer.SaveAs(txt);alert("保存成功");}elsealert("请输⼊要存储的位置!");}function Createpolyline(){Polylineflag = true;IRender.SetMouseInputMode(1);}function CreateDynamic(){Dynamicflag = true;IRender.SetMouseInputMode(1);}function TE::OnLButtonDown(flag,X,Y,Handled){if(Polylineflag)CreatePolylineVB(X,Y);if(Dynamicflag)CreateDynamicVB(X,Y);if(createpolygoyflag)CreatePolygonVB(X,Y)}function TE::OnRButtonDown(flag,X,Y,Handled){Polylineflag = false;Dynamicflag = false;isLine = false;isRoute = false;IRender.SetMouseInputMode(0);curItemID = "";createpolygoyflag = false;}function Container(){//欢迎使⽤本产品!!的地⽅也可使⽤ URL定位IContainer.HTMLPopup (0, 50,50,350,350,"容器窗⼝", "欢迎使⽤本产品!!" ,2, -1 ); }function ProInfo(){alert(ITerraExplorer.TYPE);alert(ITerraExplorer.FlyName);alert(ITerraExplorer.DisplayErrorMessages = 1);}function MethedInfo(){alert(ITerraExplorer.GetUserUnits(0,3,5,7));alert(ITerraExplorer.GetTEVersion("5","00","38"));}function ITerrainProInfo(){alert("mpt的⽂件名:"+ITerrain.MPTName);alert("SystemKey的⽂件名:"+ITerrain.SystemKey);alert("GroupKey的⽂件名:"+ITerrain.GroupKey);alert("DatumKey的⽂件名:"+ITerrain.DatumKey);alert("UnitKey的⽂件名:"+ ITerrain.UnitKey);alert("EPSG的⽂件名:"+ ITerrain.EPSG);alert("Description的⽂件名:"+ ITerrain.Description);}function IIStartPositionInfo(){alert("开始坐标X"+IStartPosition.StartX);alert("开始坐标Z"+IStartPosition.StartZ);}function IRenderProInfo(){alert(IRender.HudMode = 6);}function CreateGroup1(){var groupID = null;var GroupName = document.getElementById("CG").value;if(GroupName!="")groupID = IInformationTree.CreateGroup(GroupName,0);elsealert("请输⼊要创建组的名字!");}function TE::OnInfoTreeAction(ItemID,Action,ActionParam){curItemID = ItemID;}function LayerVis(){if (document.getElementById("chk1").checked)IInformationTree.SetGroupVisibility(IInformationTree.FindItem("0"),true); elseIInformationTree.SetGroupVisibility(IInformationTree.FindItem("0"),false); }function FlyToSomeWhere(){var tName,tX0,tZ0tName = document.getElementById("flyName").value;tX0 = document.getElementById("flyJD").value;tZ0 = document.getElementById("flyWD").value;CreateLabelFlyTo(tName,tX0,tZ0);}function CreateLabelFlyTo(txt,x1,z1){var LabelInfo = new Object();LabelInfo.Text = txt;LabelInfo.Scale = 1;LabelInfo.bgColor = 0xff00;IObjectManager.CreateLabel(LabelInfo,x1,z1,2000.0);IPlane.FlyTo(x1,z1,2000.0,117.98,0,-35,"Oval");}function DelObj(){if(curItemID ==""){alert("请选定你要删除的对象!");}else{IInformationTree.DeleteItem(curItemID);alert("删除成功!");curItemID ="";}}function InformationTreeVist(){var groupID = IInformationTree.GetNextItem(0, 11);if (groupID == 0){alert("信息树中⽆对象!");return 0;}elseInformationTreeAll(groupID);}function InformationTreeAll(groupID){var a,b,c;if (groupID == 0)return 0;else{b = confirm(IInformationTree.GetItemName(groupID)+"__ID:"+groupID); if(b == false){return 0;}a = groupID;groupID = IInformationTree.GetNextItem(groupID,11);if(groupID == 0){groupID = IInformationTree.GetNextItem(a,13);if(groupID == 0){groupID = IInformationTree.GetNextItem(a,15);c = groupID;groupID = IInformationTree.GetNextItem(c,13);groupIDwhile(groupID == 0 ){groupID = IInformationTree.GetNextItem(c,15);groupID = IInformationTree.GetNextItem(groupID,13);if (groupID == 0)return 0;}}}InformationTreeAll(groupID);}}function LoadFromSaved(){alert(IInformationTree.LoadFlyLayerEx("[TE Application Data]\\e.fly",0)); }/*function CreateP(){createpflag = true;IObjectManage.CreatePyramid(x,y,);}*/</script><script language="vbscript">function CreatePolylineVB(x,y)dim outX,outY,outH,ObjectIDIRender.ScreenToWorld x,y,63,outX,outH,outY,ObjectIDif curItemID<>"" thenif IInformationTree.IsGroup(curItemID) thenif isLine = false thenisLine = trueSet IPolyline = IObjectManager.CreatePolyline(0,16744555,2,curItemID,"创建线") elseIPolyline.AddVertex outX,outH,outY,0end ifIInformationTree.SaveFlyLayer "本⼈上次的操作记录.fly",curItemIDelsemsgbox "你选择的是对象不能容纳对象,请选择组!"end ifelsemsgbox "请选择容纳对象的组!"end ifend functionfunction CreateDynamicVB(x,y)IRender.ScreenToWorld X,Y,63,outX,outH,outY,ObjectIDif curItemID<>"" thenif IInformationTree.IsGroup(curItemID) thenif isRoute = false thenset Route = IObjectManager.CreateRoute (empty,0,curItemID,"动态路径")isRoute = trueelseRoute.AddWaypoint outX,outH,outY,0,-45,0,-45,0,100,""end ifIInformationTree.SaveFlyLayer "本⼈上次创建的动态路径.fly",curItemIDelsemsgbox "你选择的是对象不能容纳对象,请选择组!"end ifelsemsgbox "请选择容纳对象的组!"end ifend functionfunction DynamicPlay()Route.Playmsgbox "播放动态路径"end functionfunction DynamicP()Route.Pausemsgbox "暂停播放动态路径"end functionfunction GetMouseMode()msgbox IRender.GetMouseInputModeend functionfunction TE_OnFrame()dim x1,y1IRender.GetMouseInfo 1,x1,y1ObjType = 0IRender.ScreenToWorld x1,y1,ObjType,WorldX,WorldHeigth,WorldY,ObjectIDdocument.getElementById("jd").innerHTML = WorldXdocument.getElementById("wd").innerHTML = WorldYend function</script></html>。
Skyline软件二次开发初级——3如何在WEB页面中的三维地图上创建几何对象

Skyline软件⼆次开发初级——3如何在WEB页⾯中的三维地图上创建⼏何对象1.在地⾯上绘制⼀条折线:<html><head><title>Create Polyline</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script type="text/javascript">function Init(){// geometry creator can work on WKT, WKB or array of x,z,y coordinatesvar geometry = SGWorld.Creator.GeometryCreator.CreateLineStringGeometry([-114.73656, 36.01659,0, -115.14515, 36.15498,0, -118.24834, 34.05090,0]);var color = SGWorld.Creator.CreateColor(255, 0, 0, 0.7);// 2 in AltitudeTypeCode means on terrain, 0 means add to rootvar line = SGWorld.Creator.CreatePolyline(geometry, color, 2, 0, "my poly on terrain");line.LineStyle.Width = 15000; // 15000m (15km)line.Position.Distance = 600000.0; // set max viewing distance in metersSGWorld.Navigate.FlyTo(line);}</script></head><body onload="Init();"></body></html>2. 在空中绘制⼀条折线:<html><head><title>Create Polyline</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script type="text/javascript">function Init(){var geometry = SGWorld.Creator.GeometryCreator.CreateLineStringGeometry([-114.73656, 36.01659, 10000, -115.14515, 36.15498, 300000, -118.24834, 34.05090, 700000]);// 3 in AltitudeTypeCode means absolute, 0 means add to rootvar line = SGWorld.Creator.CreatePolyline(geometry, "#ff0000", 3, 0, "my poly");line.Position.Distance = 900000.0; // set max viewing distance in metersSGWorld.Navigate.FlyTo(line);}</script></head><body onload="Init();"></body></html>3.绘制多边形:<html><head><title>Create Polygons</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script type="text/javascript">function Init(){var pointsUtah = SGWorld.Creator.GeometryCreator.CreateGeometryFromWKT("POLYGON((-114.03822 41.99547,-111.04795 41.99626,-111.05028 40.99663,-109.04763 40.99847,-109.04782 36.99664,-114.04313 36.99656,-114.03822 41.99547))");// 2 in AltitudeTypeCode means on terrain, 0 means add to rootvar polyUtah = SGWorld.Creator.CreatePolygon(pointsUtah, "#ff0000", SGWorld.Creator.CreateColor(0, 255, 255, 40), 2, 0, "Utah"); //polyUtah.LineStyle.Width = 5000; // 5000m (5km)var pointsWyoming = SGWorld.Creator.GeometryCreator.CreateGeometryFromWKT("POLYGON((-111.05265 44.99576,-104.05934 44.99734,-104.05120 41.00322,-111.05028 40.99663,-111.05265 44.99576))");// 2 in AltitudeTypeCode means on terrain, 0 means add to rootvar polyWyoming = SGWorld.Creator.CreatePolygon(pointsWyoming, SGWorld.Creator.CreateColor(255, 255, 0, 10), null,2,0, "Wyoming"); polyWyoming.LineStyle.Width = 20000; // 20000m (20km)polyWyoming.Position.Distance = 1600000;SGWorld.Navigate.FlyTo(polyWyoming);}</script></head><body onload="Init();"></body></html>4.绘制圆形:<html><head><title>Create Circle</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script type="text/javascript">function Init(){var circle = SGWorld.Creator.CreateCircle(SGWorld.Creator.CreatePosition(-71.00864, 42.36229,0,2), // Pivot1000.0, // Radius (1000m)SGWorld.Creator.CreateColor(0, 0, 0, 0), // Outline color (in this sample, transparent/no outline)SGWorld.Creator.CreateColor(200, 50, 50, 128) // Fill color);circle.Position.Distance = 3000;SGWorld.Navigate.FlyTo(circle);}</script></head><body onload="Init();"></body></html>5.创建⽂本标签:<html><head><title>Create Basic Labels</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script type="text/javascript">function Init(){var labelPos = SGWorld.Creator.CreatePosition(-122.41519, 37.74346, 100, 2);// Default labelvar label1 = SGWorld.Creator.CreateTextLabel(labelPos, "Default label",SGWorld.Creator.CreateLabelStyle());var labelStyle = SGWorld.Creator.CreateLabelStyle();labelStyle.Bold = true;labelStyle.LineToGround = true;labelStyle.TextColor = SGWorld.Creator.CreateColor(255, 0, 0);// Label 2labelPos.X += 0.001;var label2 = SGWorld.Creator.CreateTextLabel(labelPos, "Bold Red label\r\nwith line to ground", labelStyle);// Labe 3labelStyle.BackgroundColor = SGWorld.Creator.CreateColor(255, 255, 255);labelStyle.Italic = true;labelStyle.LineToGround = false;labelPos.x += 0.001;var label3 = SGWorld.Creator.CreateTextLabel(labelPos, "Red bold italic label\r\nwith white background", labelStyle);// Labe 4labelStyle.BackgroundColor = SGWorld.Creator.CreateColor(255, 255, 255, 0.5);labelStyle.Underline = true;labelPos.y += 0.001;var label4 = SGWorld.Creator.CreateTextLabel(labelPos, "Underlined italic with\r\nsemi transparent background", labelStyle);// Labe 5labelStyle.FontSize = 24;labelStyle.FontName = "Times New Roman";labelStyle.Bold = false;labelStyle.Italic = false;labelStyle.Underline = false;labelPos.x -= 0.002;var label5 = SGWorld.Creator.CreateTextLabel(labelPos, "Font:Times New Roman\r\nSize:24px", labelStyle);SGWorld.Navigate.FlyTo(label1);}</script></head><body onload="Init();"></body></html>6.创建带图⽚的⽂本标签:<html><head><title>Create Image Labels</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object><script src="abspath.js" type="text/javascript"></script><script type="text/javascript">function Init(){var labelPos = SGWorld.Creator.CreatePosition(-122.46875, 37.72467, 10, 2);var label1 = SGWorld.Creator.CreateLabel(labelPos, "", toAbspath("data/Roundabout-large.gif"),SGWorld.Creator.CreateLabelStyle()); SGWorld.Navigate.FlyTo(label1);labelPos.X += 0.001;labelPos.Altitude += 60;var label2 = SGWorld.Creator.CreateLabel(labelPos,"Under Constructions.\r\nThis label will not be visible\r\nabove ~800000 meters",toAbspath("data/Underconstruction-2.gif"),SGWorld.Creator.CreateLabelStyle());label2.Style.TextOnImage = false;label2.Style.Bold = true;label2.Style.LineToGround = true;label2.Style.MultilineJustification = "left";label2.Style.TextAlignment = "right";label2.Visibility.MaxVisibilityDistance = 800000;}</script></head><body onload="Init();"></body></html>7.创建三维模型:<html><head><title>Create Model</title><object id="SGWorld" classid="CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1" style="visibility:hidden;height:0 "></object> <script src="abspath.js" type="text/javascript"></script><script type="text/javascript">function Init(){var pos = SGWorld.Creator.CreatePosition(-122.38050, // x37.62331, // y40.0, // height3, // absolute297.0, // yaw15.0); // pitchvar model = SGWorld.Creator.CreateModel(pos, toAbspath("data/747.xpc"), 0.2);SGWorld.Navigate.FlyTo(model);}</script></head><body onload="Init();"></body></html>。
Skyline 虚拟现实开发与设计 第4章

图4.12 时间间隔标签
图4.13 时间跨度
4.2 TerraExplorer Pro应用工具
转换工具组包括创建CPT、创建XPL、分辨率金字塔,下面分别介绍。 1.创建CPT 在Skyline TerraExplorer中,可以将点云数据转换成统一的且有流方式优化的、可视化 的Skyline特有的点云文件格式(CPT)。 图4.14显示了CPT所支持的文件格式。
图4.4 快照截图保存
4.2 TerraExplorer Pro应用工具
4.2.2 抽稀地形
抽稀地形可以选择抽稀成MPT和抽稀成VRML。选择工具栏中相关的抽稀地形功能,会 出现对应的窗口。提取的地形是高分辨率多边形区域,环绕其周围的是中等分辨率矩形 区域,剩下的整个区域由低分辨率值覆盖。 抽稀成MPT的步骤如下:选择抽稀成MPT,弹出如图4.5所示界面,单击“添加”按 钮,界面会自动跳转到地图界面,拖动鼠标选择需要提取的范围,然后在地图中选出要
作,并能在实际运用中灵活使用。
实验重点: 参考本书示例,熟练TerraExplorer的高级操作。
学习难点:
灵活使用TerraExplorer的工具。
Skyline TerraExplorer操作进阶
1 TerraExplorer Pro图层数据加载
2
TerraExplorer Pro应用工具
3
TerraExplorer Pro演示功能
图4.9 创建电力线和管线
图4.10 改变管线r Pro应用工具
4.创建栅栏和围墙 该功能沿用户自定义路径创建栅栏和围墙,操作界面如图4.11所示。 除此之外,对象创建时可以选择自己画线(跟随线、创建多边形);还可以按照已经 画好的组来添加(选择组)。
Skyline三维地图二次开发
一, 如何快速把Skyline控件嵌入到现有系统中一、s kyline提供了这样一个控件:二、<OBJECT ID="TerraExplorer3DWindow"CLASSID="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" ></OBJEC T>三、我们在程序开发中,只要把它嵌入到现有的WEB页面中即可。
四、这个控件主要是用来装载三维场景的。
五、如果用户想要实现一些功能,比如说定位到某一个指定位置,则需要通过skyline提供的TerraExplorer里面的接口来实现:六、七、f unction CreateTE(){var TEObj = document.createElement("object");document.appendChild(TEObj); = "SGAPITEObj";TEObj.id = "SGAPITEObj";TEObj.classid = "clsid:3a4f9191-65a8-11d5-85c1-0001023952c1";return TEObj;}function test(){var TE= CreateTE();var IInformationTree = TE.interface("IInformationTree5");var IPlane = TE.interface("IPlane5");IPlane.SetPosition(mypos.x,mypos.y,mypos.h,mypos.yaw,-90,mypo s.roll,0,0,0);}八、九、很多用过skylinesoft的人觉得:用skyline做二次开发确实很简单。
天地图服务二次开发调用操作指南V1.3
天地图·XX市服务调用操作手册目录1天地图.XX市 (3)2瓦片地图切图参数 (3)2.1数据范围 (3)2.2电子地图分级 (4)2.3坐标系 (6)2.4瓦片大小 (6)2.5屏幕分辨率 (6)2.6切图原点 (6)2.7瓦片存储格式 (7)3网络地图瓦片服务接口(WMTS服务) (7)3.1服务描述 (7)3.2服务操作 (7)3.3G ET C APABILITIES操作 (8)3.3.1操作简介 (8)3.3.2参数说明 (8)3.3.3调用示例 (8)3.3.4返回结果示例 (8)3.4G ET T ILE操作 (9)3.4.1操作简介 (9)3.4.2参数说明 (9)3.4.3调用示例 (10)3.4.4返回结果示例 (10)3.5示例代码 (1)3.5.1平台API调用例子(JavaScript) (1)3.5.2ESRI ArcGIS Javascipt API调用例 (1)3.5.3C#-AE版 (1)4用户信息 (1)5用户服务信息 (1)5.1XX市市矢量电子地图 (1)5.2XX市市影像电子地图 (2)6技术对接联系人 (2)1天地图·XX市面向公众的“XX市之窗”是“天地图”市级节点,依据XX市市最新最权威的基础地理信息构建统一的在线地图服务平台,提供电子地图浏览、信息点分类搜索定位、XX市景点查看、距离和面积量算、兴趣点标注、公交路线规划等功能,主要包括电子地图、新闻公告、资源中心、我的空间、典型应用、标准规范、开发中心7个模块,以门户网站和服务接口两种形式提供24小时不间断的“一站式”地图服务,满足公众对位置查询等方面的需求,满足企业和专业用户基于地图服务和二次开发接口开展专业应用的需求。
天地图·XX市地址:平台用户可登录天地图·XX市,浏览电子地图模块,同时可在资源中心查看已有的服务资源,用户如有需要相关的服务,可在线进行申请,管理员审批同意后,即可获得服务资源地址。
SkylineGlobe移动端二次开发入门
Branding – Contd.
Localization
▪ Localizing App into Required Language: ▪ Translate all strings in each of the string file in the following directory:
Accessing the API
▪ To access the API: ▪ Declare an ISGWorld object. ▪ Instantiate the object.
Questions
Expanding the new tool
6. Add container buttons and subscribe them to an onButtonClick events:
Expanding the new tool – Contd. ▪ The implementation file:
Expanding the new tool – Contd. ▪ Sub-entries – creating a child entry:
Where:
1. Text - the name of the parent entry that contains this MenuEntry 2. Icon - the icon for the parent entry 3. the order of the parent entry
• res/values/strings.xml
▪ Translate all text in the res/values/strings.xml file, and then save the file as:
skyline中文开发帮助(内部开发文档)
Skyline软件开发接口分类ITerraExplorerIPlaneIObjectManagerIInformationTreeITerrainIContainerIRenderISnapShotIStartPositionITerraExplorerEventsICoordSys_ITerraExplorerEvents5_ITerraExplorerEvents5主要功能是为ITerraExplore提供事件信息处理功能. 这个开发接口代替了以前的_ITerraExplorerEvents, _ITerraExplorerEvents2,_ITerraExplorerEvents3,_ITerraExplorerEvents4接口, 并扩展了通用事件,双击事件及HUD事件。
什么是HUD?HUD是Head UP Display的英文缩写,又译成抬头显示器(Head Up Display),以下简称HUD,是目前普遍运用在航空器上的飞行辅助仪器。
抬头的意思是指飞行员不需要低头就能够看到他需要的重要资讯。
抬头显示器最早出现在军用飞机上,降低飞行员需要低头查看仪表的频率,避免注意力中断以及丧失对状态的控制。
在skyline软件中HUD指在应用软件时基于地形视窗监视飞行状态及视角图形及文字信息辅助工具。
OnLoadFinished 这种方法在TerraExplorer在加载完成Fly文件时被调用。
OnFileClosing, 这种方法在TerraExplorer关闭Fly文件前通知客户文件关闭前被调用。
OnFrame, 这种方法获取TerraExplorer在飞行时每一个Frame的状态。
OnTerraExplorerMessage 这种方法可以得到交互式触发带有massage对象massage中的内容。
OnObjectAction这种事件当特定对象某一种状态发生变化时被触发语法: OnObjectAction([in] BSTR ObjectID,[in] int Action)ObjectID指特定对象的唯一IDAction 指动态的状态标识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_FOLLOWFROMGROUND = 12以地面的位置观看对象o AC_STOP = 13The object was stopped being played (i.e., after a fly to operation).停止操作o AC_JUMP = 14Jump to the object operation was started.跳跃至对象o AC_DELETE = 15删除对象o AC_EDIT_FINISHED = 16对象完成编辑时o AC_OBJECT_ADDED = 17对象增加到视图中o AC_PLAY = 18运行执行对象o AC_EDIT_STARTED = 20对象开始编辑时OnFileSaveTerraExplorer 在fly文件保存进,执行这个文件语法:OnFileSave()附:用户在保存fly时更新相关信息的数据库可用些事件OnRenderQualityChanged实时地反馈用户浏览更新时地形效果质量值,一般用于loading功能语法OnRenderQualityChanged([in] int Quality)参数:Quality–用户浏览时地形效果质量值. 这个参数是0到100之间以10递增的数据。