标签:百度云 idt ddl qstring ack 通过 change for 地址
地图范围设置的监听就是通过DisplayTransformationPtr对地图的视图范围更新或者地图的分辨率发生变化进行监听,然后做出相应的操作。图层事件的监听就是通过ActiveViewPtr对地图的添加,删除和移动图层操作进行监听,然后做出相应操作,例如鹰眼图,当监听主地图添加一个新图层数据时,鹰眼图就可以通过将新图层显示在鹰眼图中。
第一步 |
绑定地图视图事件,添加地图控制的监听事件 |
第二步 |
根据不同的事件进行不同的功能操作 |
接口/类 |
方法/属性 |
说明 |
SysCarto::ActiveViewPtr |
LayerAdded |
图层添加事件 |
LayerDeleted |
图层删除事件 |
|
LayerReordered |
图层排序事件 |
|
PIE.AxControls.IMapControlEvents |
VisibleBoundsUpdated |
视图更新事件 |
ResolutionUpdated |
视图分辨率更新事件 |
项目路径 |
百度云盘地址下/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)); } |
|
标签:百度云 idt ddl qstring ack 通过 change for 地址
原文地址:https://www.cnblogs.com/PIESat/p/12366693.html