zoukankan      html  css  js  c++  java
  • PIE-SDK For C++地图范围设置和图层事件监听

    1.功能简介

       地图范围设置的监听就是通过DisplayTransformationPtr对地图的视图范围更新或者地图的分辨率发生变化进行监听,然后做出相应的操作。图层事件的监听就是通过ActiveViewPtr对地图的添加,删除和移动图层操作进行监听,然后做出相应操作,例如鹰眼图,当监听主地图添加一个新图层数据时,鹰眼图就可以通过将新图层显示在鹰眼图中。 

    2.功能实现说明

    2.1. 实现思路及原理说明

    第一步

    绑定地图视图事件,添加地图控制的监听事件

    第二步

    根据不同的事件进行不同的功能操作

    2.2. 核心接口与方法

    接口/

    方法/属性

    说明

    SysCarto::ActiveViewPtr

    LayerAdded

    图层添加事件

    LayerDeleted

    图层删除事件

    LayerReordered

    图层排序事件

    PIE.AxControls.IMapControlEvents

    VisibleBoundsUpdated

    视图更新事件

    ResolutionUpdated

    视图分辨率更新事件

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/02.地图操作/02.地图图层控制

    数据路径

    百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif

    视频路径

    百度云盘地址下/PIE视频教程/02.地图操作/03.地图范围设置和图层事件监听.avi

    示例代码

    /// <summary>

    ///构造函数

    /// </summary>

    PIEMainWindow::PIEMainWindow(QWidget *parent): QMainWindow(parent)

    {

    //省略部分初始化代码

        SysDisplay::DisplayTransformationPtr ptrDTransformation = m_pMapControl->GetActiveView()->GetDisplayTransformation(); //获取显示变换对象

        ptrDTransformation->ResolutionUpdated.connect(boost::bind(&PIEMainWindow::OnMapScaleChanged, this, _1));

        ptrDTransformation->VisibleBoundsUpdated.connect(boost::bind(&PIEMainWindow::OnVisibleBoundsUpdated, this, _1,_2));

        //图层控制监听事件

        SysCarto::ActiveViewPtr activeViewPtr = m_pMapControl->GetActiveView();

        activeViewPtr->LayerAdded.connect(boost::bind(&PIEMainWindow::OnLayerAdded, this, _1));

        activeViewPtr->LayerDeleted.connect(boost::bind(&PIEMainWindow::OnLayerDeleted, this, _1));

        activeViewPtr->LayerReordered.connect(boost::bind(&PIEMainWindow::OnLayerReordered, this, _1,_2));

    }

    void PIEMainWindow::OnLayerDeleted(SysCarto::LayerPtr layer)

    {

        QString layerName = layer->GetName();

        QMessageBox::information(this, "提示", QString("删除图层:%1").arg(layerName), QMessageBox::Ok);

    }

    void PIEMainWindow::OnLayerReordered(SysCarto::LayerPtr layer, int Index)

    {

        QString info = QString("移动%1图层,到索引为%2的位置").arg(layer->GetName()).arg(QString::number(Index));

        QMessageBox::information(this, "提示", info, QMessageBox::Ok);

    }

    void PIEMainWindow::OnVisibleBoundsUpdated(SysDisplay::DisplayTransformationPtr displayTransformation, bool flag)

    {

        QMessageBox::information(this, "提示", "范围变化了", QMessageBox::Ok);

    }

    void PIEMainWindow::OnMapScaleChanged(SysDisplay::DisplayTransformation* pDisplayTransformation)

    {

        int scale = pDisplayTransformation->GetMapScale();

        m_pComboBox_MapScale->setCurrentText(QString("1:%1").arg(scale));

    }

     

    2.4. 示例截图

     

     

  • 相关阅读:
    连载日记
    自我介绍
    test0710 二分专题
    test0709 搜索专题
    test0705
    test0704
    [题解] [HNOI2015]落忆枫音
    test0606
    test0523
    备份
  • 原文地址:https://www.cnblogs.com/PIESat/p/12366693.html
Copyright © 2011-2022 走看看