• PIE-SDK For C++地图鼠标事件监听


    1.功能简介

    地图鼠标事件包含鼠标的按下MouseButtonPress(),弹起MouseButtonRelease(),移动MouseMove()等事件,通过这些事件可以对地图进行动态的操作,接下来以地图状态栏的信息为例具体介绍如何使用这三种事件。

    2.功能实现说明

    2.1. 实现思路及原理说明

    第一步:在主程序头文件中进行事件捕捉

    protected:

        /**

        * @brief 重写eventFilter事件

        * @param[in] QObject *obj 触发事件的对象

        * @param[in] QEvent *ev 触发的事件

        * @return

        */

        bool eventFilter(QObject *obj, QEvent *ev) override;

    第二步:在.cpp文件中进行实现代码编写

    2.2. 核心接口与方法

    接口/

    方法/属性

    说明

    SysDisplay::DisplayTransformationPtr

    ToMapPoint

    屏幕坐标转换为地图坐标

    SysGeometry::SpatialReferencePtr

    Name

    设置或获取空间参考Name

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/02.地图操作/06.地图鼠标事件监听

    数据路径

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

    视频路径

    百度云盘地址下/PIE视频教程/02.地图操作/06.地图鼠标事件监听.avi

    示例代码

    1. 头文件中添加事件捕捉

      protected:

       

          /**

          * @brief 重写eventFilter事件

          * @param[in] QObject *obj 触发事件的对象

          * @param[in] QEvent *ev 触发的事件

          * @return

          */

          bool eventFilter(QObject *obj, QEvent *ev) override;

       

    2. 事件代码编写

      //本次示例主要以地图的状态栏

      bool PIEMainWindow::eventFilter(QObject *obj, QEvent *ev)

      {

          if (obj == m_pMapControl)

          {

              if (ev->type() == QEvent::MouseMove)

              {

                  QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

                  m_pLineEdit_ScreenCoordsInfos->setText(QString("%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y()));

                  double mapX, mapY;

                  mapX = mapY = 0;

                  m_pMapControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(pMouseEvent->x(), pMouseEvent->y(), mapX, mapY);

                  m_pLineEdit_GeoCoordsInfos->setText(QString("%1,%2").arg(mapX).arg(mapY));

       

                  SysGeometry::SpatialReferencePtr ptrSR = m_pMapControl->GetMap()->GetSpatialReference();

                  if (ptrSR == nullptr) return true;

                  m_pLabel_SpatialReferenceInfos->setText(ptrSR->GetName());

              }

              else if (ev->type()==QEvent::MouseButtonPress)

              {    

                  QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

                  QPoint qPoint;

                  qPoint.setX(pMouseEvent->x());

                  qPoint.setY(pMouseEvent->y());

                  SysGeometry::PointPtr point = new SysGeometry::Point();

                  point = m_pMapControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(qPoint);

                  QString screenPoint = QString("屏幕坐标:%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y());

                  QString mapPoint= QString("屏幕坐标:%1,%2").arg(point->GetX()).arg(point->GetY());

              }

              else if (ev->type()==QEvent::MouseButtonRelease)

              {

                  qDebug("鼠标释放事件");

              }

          }

          else if (obj == m_pPageLayoutControl)

          {

              if (ev->type() == QEvent::MouseMove)

              {

                  QMouseEvent *pMouseEvent = static_cast<QMouseEvent*>(ev);

       

                  m_pLineEdit_ScreenCoordsInfos->setText(QString("%1,%2").arg(pMouseEvent->x()).arg(pMouseEvent->y()));

                  double mapX, mapY;

                  mapX = mapY = 0;

                  m_pPageLayoutControl->GetActiveView()->GetDisplayTransformation()->ToMapPoint(pMouseEvent->x(), pMouseEvent->y(), mapX, mapY);

                  m_pLineEdit_GeoCoordsInfos->setText(QString("%1,%2").arg(mapX).arg(mapY));

       

                  SysGeometry::SpatialReferencePtr ptrSR = m_pPageLayoutControl->GetMap()->GetSpatialReference();

                  if (ptrSR == nullptr) return true;

                  m_pLabel_SpatialReferenceInfos->setText(ptrSR->GetName());

              }

          }

          return QMainWindow::eventFilter(obj, ev);

      }

    2.4. 示例截图

  • 相关阅读:
    django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法
    MySQL创建数据库与创建用户以及授权
    ubantu安装mysql
    sed命令详解
    docker-compose教程(安装,使用, 快速入门)
    Hive bucket表
    hive分区(partition)简介
    HIve实战分析Hadoop的日志
    hive 元数据解析
    hive学习笔记之-数据类型
  • 原文地址:https://www.cnblogs.com/PIESat/p/12366958.html
Copyright © 2020-2023  润新知