zoukankan      html  css  js  c++  java
  • 三维GIS平台iTelluro开发之快速入门

    本快速入门使用step by step的方式,创建一个简单的三维应用,来说明iTelluro GlobeEngine三维控件的使用。

    该文档的代码请参见SDK中的"示例\快速入门"目录。

     

    请按照以下步骤进行开发准备工作。

    1)启动Visual Studio,创建一个新的项目WinForm项目;

    2)在项目下创建一个文件夹,例如lib,把SDK程序包文件夹下的dll文件和lic文件拷贝到该文件夹,并分别拷贝到项目debug或者Release文件夹下(非常重要,需要同时拷贝,并且是所有文件);

    3)拷贝示例数据下的"iTelluro.GlobeEngine.ini"到项目debug或者Release文件夹下,按照附录说明修改其内容,使其路径指向示例数据中的相关数据;

    4)在项目中引用Lib目录下的"iTelluro.GlobeEngine.MapControl3D.dll"。各个dll功能和包含的控件、接口、类等内容见下一章。

    5)修改Visual StudioLoaderLock

    选择"调试 异常",打开如下对话框:

    取消选择LoaderLock,单击确定。

    6)加载控件

    定义三维视图控件GlobeView

    GlobeView _globeView;

    创建并加载:

    // 三维控件加载
    _globeView = new GlobeView();
    _globeView.Dock = DockStyle.Fill;
    this.Controls.Add(_globeView); 
    

    点击F5运行即可运行。

    系统可视化控件不支持设计方式添加,请使用代码方式添加。

    7)定位三维视图

    创建按钮,在其点击事件中加入定位代码:

    // 定位到青海湖,摄像机高度为150km
    _globeView.GlobeCamera.FlyTo(100.2167, 36.8667, 150000.0); 
    

    定位需要使用GlobeCamera对象,调用FlyTo方法,即可实现飞行定位。

    8)加入图层控件

    创建图层控件,与GlobeView控件绑定即可:

    // 创建图层控件
    GlobeLayerControl lyrUI = new GlobeLayerControl();
    lyrUI.Dock = DockStyle.Fill;
    this.panelLayer.Controls.Add(lyrUI);
    
    // 绑定图层控件到三维视图
    lyrUI.Connect(_globeView); 
    

    9)鼠标事件

    定义鼠标点击和移动事件:

    // 鼠标移动事件
    _globeView.GlobeMouseMove += new GlobeMouseMoveEventHandler(_globeView_GlobeMouseMove);
    
    // 鼠标单击事件
    _globeView.GlobeMouseClick += new GlobeMouseClickEventHandler(_globeView_GlobeMouseClick); 
    

    创建事件代码:

     

    代码如下:

    void _globeView_GlobeMouseClick(object sender, GlobeMouseEventArgs e)
    {
    MessageBox.Show(
    "鼠标点击位置: \n" +
    e.Longitude.ToString("f5") + "," + e.Latitude.ToString("f5")
    );
    }
    
    void _globeView_GlobeMouseMove(object sender, GlobeMouseEventArgs e)
    {
    this.lblMPos.Text =
    e.Longitude.ToString("f5") + "\n" + e.Latitude.ToString("f5");
    } 
    

    10)添加POI点数据

    创建图层和数据需要引用"iTelluro.GlobeEngine.DataSource.dll"。

    首先,创建需要的图层对象和点数据的id计数器:

    IconLayer _iconLyr;

    long _iconId = 0;

    其次,在构造函数中创建图层对象,并添加到GlobeView

    // 创建POIIcon图层

    _iconLyr = new IconLayer("点击位置");

     

    // 添加到GlobeView控件

    _globeView.GlobeLayers.FloatLayers.Add(_iconLyr);

    在鼠标点击事件中添加POIIcon对象:

    // 创建一个POIIcon对象

    POIIcon icon = new POIIcon(

    _iconId++,

    "点击位置 " + _iconId.ToString(),

    e.Latitude,

    e.Longitude

    );

    // 设置其图标文件

    icon.IconFile = Path.Combine(Application.StartupPath, "poi.png");

     

    // 添加到图层

    _iconLyr.Add(icon);

    11)创建POIIcon图标图层的点击选择事件,选中后删除图标

    添加图标时需要设置图标可响应鼠标点击事件:

    // 设置图标可以响应事件

    icon.Clickable = true;

    设置图标图层选择事件:

    // 图标点选事件

    _iconLyr.POIIconClicked +=

    new POIIconClickedEventHandler(_iconLyr_POIIconClicked);

    在图标点选事件中删除图标:

    void _iconLyr_POIIconClicked(object sender, POIIconClickEventArgs e)

    {

    if (e.Icon != null)

    {

    _iconLyr.Remove(e.Icon);

    }

    }

     

    系统运行效果如下图所示:

  • 相关阅读:
    51 Nod 1086 多重背包问题(单调队列优化)
    51 Nod 1086 多重背包问题(二进制优化)
    51 Nod 1085 01背包问题
    poj 2559 Largest Rectangle(单调栈)
    51 Nod 1089 最长回文子串(Manacher算法)
    51 Nod N的阶乘的长度 (斯特林近似)
    51 Nod 1134 最长递增子序列(经典问题回顾)
    51 Nod 1020 逆序排列
    PCA-主成分分析(Principal components analysis)
    Python中cPickle
  • 原文地址:https://www.cnblogs.com/maweifeng/p/1685535.html
Copyright © 2011-2022 走看看