LastPoem / Notes

This is a note library
1 stars 0 forks source link

TerraExplorer简介 #41

Open LastPoem opened 4 years ago

LastPoem commented 4 years ago

一、分析

对距离,面积,坡度,体积的基本测量和分析,以及通视线,阴影,高程对比,横截面,缓冲区分析,洪水分析,地形剖面

二、展示

影像,高程等展示,坐标系统,地形,提供2d, 3d, dynamic, buildings, models, point cloud等可以放置到地形上。

三、空间查询

操纵要素和3DML数据,分析空间关系。包括合并要素,剪切多边形,将多要素拆分成单要素,导出选择要素。 复杂的空间和属性查询。通过属性或(点线面对象间的)空间关系来过滤要素

四、发布数据

server的功能

五、创建和分享3D场景浏览

展示工具可以创建三维场景浏览。只要包括当前摄影机的位置和角度,图层和对象的显隐,系统时间,以及弹窗消息和标题。场景浏览可以转为视频文件。

六、优化

高级工具允许将模型文件和点云数据从各种格式转换为aa流优化的skyline专有格式,以提高显示性能和下载速率.

LastPoem commented 4 years ago

产品亮点

API可以做的事

  1. 创建扩展,添加额外的文件和数据库格式的支持
  2. 建立实时运动对象的命令和控制应用程序
  3. 编辑特征图层,如道路编辑
  4. 添加自定义对象,如危险域
  5. 高级地形查询功能,如地形剖面分析
  6. 结合先进的地图显示
  7. 将高级功能的HTML页面嵌入到TerraExplorer窗口
  8. 使用SkylineGlobe服务器架构建立高级网络应用程序
  9. 创建自定义Runtime应用程序,将3D窗口和工程树作为ActiveX组件嵌入其中。
LastPoem commented 4 years ago

ISGWorld70是大多数TE接口的主要入口点,通过这个接口,可以管理应用程序和三维内容及相应的事件处理。

ISGWorld70接口主要属性

LastPoem commented 4 years ago

ICreator70 接口主要用来创建对象、图层和几何体。

IAnalysis70 接口为所有地形分析对象提供方法

TerraExplorer Viewer接口

The TerraExplorer Viewer支持的部分接口,为本指南接口的子集。支持接口如下:

ActiveX控件

TerraExplorer能将三维窗口,信息窗口(工程树)导航地图窗口和扩展三维窗口作为ActiveX组件嵌入到自定义应用程序界面或网页。以下是可用的ActiveX控件和相关的事件接口

创建客户端应用程序

COM接口是一种标准的应用程序通信方法。当COM组件添加到.NET工程后,一个interop DLL就会自动创建。可以在项目Obj目录中找到Interop.TerExplorer.dll。这个DLL是COM组件和.NET组件的桥梁。在C#中用TE接口创建应用程序过程:

  1. 添加引用、
  2. using TerraExplorerX;
  3. 定义SGWorld对象:private SGWorld70 sgworld;
  4. 创建TE对象:this.sgworld = new SGWorld70();
  5. 访问主接口:利用TE对象可访问所有主要TE接口,例如可调用INavigate70的ZoomIn方法实现放大功能:SGWorld.Navigate.ZoomIn();

HRESULT类型返回值

所有COM方法都返回一个HRESULT类型的无符号整数。这个返回值表明调用方法是成功还是失败,并提供这个操作输出的其他信息。

LastPoem commented 4 years ago

基本概念

单位

X,Y坐标必须使用工程地形数据使用的坐标系进行表达。 经纬度坐标地形数据会使用十进制经纬度表示。 海拔和高度以米为单位,二维图元以米为单位代表距离对象中心点的距离。

偏移,俯仰和翻滚角度

摄像机,飞机和对象偏移(方向),俯仰(倾斜)和翻滚角定义

摄像机

TE允许客户端应用程序通过INavigate70接口获取和设置摄像机位置。 获取当前位置: 使用INavigate70调用GetPosition方法: var pos = SGWorld.Navigate.GetPosition();

跳到新位置: ICreator70接口创建新位置并调用INavigate70.SetPosition方法

// 参数分别是x, y, 海拔,海拔类型,偏航角,俯仰角。
var pos = SGWorld.Creator.CreatePosition(-71, 42, 1000, 0, 0.0, -43.0);
SGWorld.Navigate.SetPosition(pos);

飞到新位置 使用ICreator70接口创建一个新位置和需要调用FlyTo方法的当前位置,需要给FlyTo方法传递对象参数。

var circle  = SGWorld.Creator.CreateCircle(
  SGWorld.Creator.CreatePosition(-71, 42, 0, 2), 
  1000, 
  SGWorld.Creator.CreateColor(0, 0, 0, 0), 
  SGWorld.Creator.CreateColor(200, 50, 50, 128)
); // 创建一个圆
circle.Position.Distance = 3000; // 摄像机将在3000米高度观察对象
SGWorld.Navigate.FlyTo(circle); // 飞到圆对象位置

动态控制摄像机每帧位置 这是控制摄像机的最高级技术。这种情况下,客户端程序可能需要依赖其他外部输入以帧方式移动摄像机位置。 1.用ISGWorld70Event.OnFrame事件处理程序-TerraExplorer渲染新帧前发送此事件,客户端应用程序利用这个机会将飞机移动到一个新位置。 2.在事件处理过程中调用INavigate70。

SGWorld.AttachEvent("onFrame", onFrame);
function onFrame(){
  var pos = SGWorld.Navigate.GetPosition();
  pos.X += 0.5;
  pos.Y -= 0.2;
  SGWorld.Navigate.SetPosition(pos);
}

项目树管理 IProjectTree70接口通过信息树结构允许客户端访问工程中所有元素和对象。客户端应用程序可以控制树的外观(例如:展开组,将对象从一个组移到另一个组)删除单个对象或整个组,添加对象或组到树。

1.创建和修改组 2.查找和修改树中的对象 var node = SGWorld.ProjectTree.GetNextItem(group, 11); while(node > 0) { var object = SGWorld.ProjectTree.GetObject(node); // 执行关于对象的操作 node = SGWorld.ProjectTree.GetNextItem(node, 13); // 13获取下一个节点

对象管理 1.添加对象到项目 ICreator70接口提供方法创建所有图层,对象,位置和场景等不同对象。使用某个创建方法,如.CreateCircle可以添加对象到工程并可以设置对象在三维世界的位置。当客户端应用程序创建一个对象,则会返回一个对象,这个接口可以用于进一步操作对象。

var circle = SGWorld.Cerator.CreateCircle(
  SGWorld.Creator.CreatePosition(-71, 42, 0, 2), // 对象轴心点
  1000, // 半径,单位米
  SGWorld.Creator.CreateColor(0, 0, 0, 0),
  SGWorld.Creator.CreateColor(200, 50, 50, 128)
);

2.修改对象参数 ICreator70和IProjectTree70接口,可以得到一个TerraExplorer对象接口。客户端应用程序创建了这个对象,可以得到一个接口返回值。也可以通过IProjectTree70.GetObject方法利用对象ID参数得到一个接口返回值。

var node = SGWorld.ProjectTree.GetNextItem(group, 11); //11 表示组中的第一子对象
while (node > 0)
{
var object = SGWorld.ProjectTree.GetObject(node); //执行关于对象的操作...
 node = SGWorld.ProjectTree.GetNextItem(node, 13); // 13 表示下一个相邻的对象
}

TE事件 TE针对客户端提供一系列可用事件,可以捕捉用户对对象的操作,例如编辑对象或飞到对象,或者是对象被送到目标容器之前截取消息(允许客户端修改或显示对象).可以借助OnFrame事件实时控制摄像机和地面对象(以一种平滑的方式) 客户端可以利用处理该事件改变对象或摄像机的位置。 用ISGWorld70.AttachEvent()方法监听TE事件。