码迷,mamicode.com
首页 > 编程语言 > 详细

PIE-SDK For C++地图范围设置和图层事件监听

时间:2020-02-26 14:07:11      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:百度云   idt   ddl   qstring   ack   通过   change   for   地址   

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. 示例截图

技术图片

技术图片

技术图片

 

 

PIE-SDK For C++地图范围设置和图层事件监听

标签:百度云   idt   ddl   qstring   ack   通过   change   for   地址   

原文地址:https://www.cnblogs.com/PIESat/p/12366693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!