主要思路:

当鼠标在地图画布控件上移动时,会发送xyCoordinates信号,该信号参数是墨卡托坐标系表示的地图上的点坐标,然后将墨卡托坐标转为经纬度表示的WSG84坐标,绑定该信号到槽函数,然后发送到状态栏。关于什么是墨卡托坐标及其和WSG84坐标的转化,参见以下博文链接:

墨卡托坐标以及墨卡托坐标转经纬度。

QGIS二次开发:数值表示的墨卡托坐标和经纬度表示的WSG84坐标相互转化。

本博文用到的QGIS 版本说明:

QGIS 3.26.2

cpp关键代码如下:

CMyGIS::CMyGIS(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);m_pMapCanvas = new QgsMapCanvas(this);m_pMapCanvas->setCanvasColor(QColor(255, 255, 255));m_pMapCanvas->setVisible(true);m_pMapCanvas->enableAntiAliasing(true);m_pCurrentCoordinage = new QLabel("", this);this->statusBar()->addWidget(m_pCurrentCoordinage); // 设置状态栏connect(m_pMapCanvas, &QgsMapCanvas::xyCoordinates, this, &CMyGIS::mouseCoordinateChanged);// 其它代码略}void CMyGIS::mouseCoordinateChanged(const QgsPointXY& newCoordinate)
{QgsPoint point(newCoordinate.x(), newCoordinate.y()), newPoint;convertMercatorToWGS84(point, newPoint);auto qsCurCoordinate = QString(QString::fromLocal8Bit("lon:%1, lat:%2")).arg(QString::number(newPoint.x())).arg(QString::number(newPoint.y()));m_pCurrentCoordinage->setText(qsCurCoordinate);
}// 将墨卡托坐标系下的点坐标转为WGS84坐标系下的坐标
void CMyGIS::convertMercatorToWGS84(const QgsPoint& curPoint, QgsPoint& newPoint)
{QgsCoordinateReferenceSystem dstCrs("EPSG:4326");QgsCoordinateReferenceSystem srcCrs("EPSG:3857");const QgsCoordinateTransformContext context;QgsCoordinateTransform crsTras(srcCrs, dstCrs, context);auto tmpPt = crsTras.transform(curPoint);newPoint.setX(tmpPt.x());newPoint.setY(tmpPt.y());
}

.h代码如下:

class CMyGIS : public QMainWindow
{Q_OBJECTpublic:CMyGIS(QWidget *parent = Q_NULLPTR);
private: // slotsvoid mouseCoordinateChanged(const QgsPointXY& newCoordinate);// 将墨卡托坐标系下的点坐标转为WGS84坐标系下的坐标void convertMercatorToWGS84(const QgsPoint& curPoint, QgsPoint& newPoint);
private:// 其它代码略private:Ui::CMyGISClass ui;// map canvasQgsMapCanvas* m_pMapCanvas{ nullptr };QLabel* m_pCurrentCoordinage;// 其它成员变量略
};

效果如下:

QGIS二次开发:鼠标在地图上移动时,状态栏显示鼠标所在位置经纬度相关推荐

  1. 利用鼠标在图像上画框并实时显示鼠标所点击处坐标

    我们在做小型项目的时候,有时为了实现良好的交互,或者更方便实时观察输入数据,通常需要使用到下列几项功能: 1.利用鼠标在所显示的图像/视频中选取ROI区域 2.实时显示鼠标所点击位置处的坐标信息 本文 ...

  2. QGIS二次开发:加载XYZ Tiles形式的瓦片地图

    1.前言 QGIS官方提供的QGIS.exe可以加载远程地图提供商提供的基于URL格式的XYZ Tiles形式的瓦片地图.如:https://tile.openstreetmap.org/{z}/{x ...

  3. QGIS二次开发地图添加标记添加注记Svg小图标SvgItem

    QGIS二次开发地图添加标记添加注记Svg小图标 即QgsAnnotationLayer.QgsMarkerSymbol和QgsAnnotationMarkerItem的用法,我把QGIS3.20软件 ...

  4. QGis二次开发基础 -- 构建图层管理器

    为了回应有些同学对上一篇博文的建议,这篇文章主要关注于QGis二次开发中的"图层管理器"的实现. 使用QGis构建独立应用系统,我相信大部分同学应该还是关注于GIS基本功能框架构建 ...

  5. QGis二次开发基础 -- 根据属性查询要素

    属性查询是GIS应用不可缺少的重要功能,尤其是在各种业务系统中,根据用户输入相应的查询条件,从属性要素中快速定位到用户感兴趣的要素,为业务应用提供了便利.本文就来聊一聊QGis二次开发中如何实现属性查 ...

  6. qgis二次开发环境搭建(超级详细)

    最近有一个项目要求基于qgis+QT进行二次开发开发,要使用到qgis平台.陆陆 续续花了差不多两个多星期,在把开发环境搭建起来. 首先就面临2种选择,一种 到qgis官网下载源码,进行编译,此 情况 ...

  7. 离线地图二次开发(支持所有地图源)

    离线地图二次开发(支持所有地图源) 发布时间:2019-03-12 版权: 离线地图开发 支持 局域网内二次开发:也支持公网二次开发,借助离线开发包,可以很快将地图应用到不同的项目当中,包括WEB开发 ...

  8. 【MAPBOX基础功能】19、mapbox修改鼠标在地图上的样式

    前言 官网指引,生成accesstoken,下载相关依赖请翻阅[https://blog.csdn.net/weixin_44402694/article/details/125414381?spm= ...

  9. 【WebGIS】二、基于Openlayers实现地图的加载与显示

    二.基于Openlayers实现地图的加载与显示 基于上文中配置好的环境,先通过Element Plus实现一个页面的布局,然后基于openlayers加载显示全球瓦片地图. 1. 引入element ...

最新文章

  1. 【2020年BNN网络的SOTA—— ReActNet 】以简单的操作得到更高精度的二值神经网络
  2. nChain再获数字货币安全专利,助力BCH更加安全可靠
  3. Docker网络解决方案 - Calico部署记录
  4. mysql 命令行小结
  5. python十六:lambda匿名函数
  6. PHP中文件操作相关
  7. 动态规划—完全背包问题
  8. JavaScript函数实现方式大总结
  9. 使用 keytool 生成安卓应用程序签名
  10. js 正则表达式实现文本验证
  11. 华为笔记本matebook13_华为引领“第三代移动办公”新纪元 华为MateBook开启“智慧化办公”新赛道...
  12. 字典(dict)按键(key)和值(value)排序即item()的常用方式
  13. python flask框架 蓝图的使用
  14. 2017.11.20T19_5
  15. jquery与javascript的引入问题
  16. 打印系统开发(42)——静默打印
  17. AUTOCAD——光顺曲线命令、分解命令
  18. ffmpeg处理YUV422和YUV420P相互转换
  19. Django学习笔记之form组件的局部钩子和全局钩子
  20. Windows的cmd统计文件行数

热门文章

  1. linux rar和zip工具
  2. api-gateway的pom文件
  3. 大神李沐被曝离职,投身大模型创业!网友:希望不要耽误他解读论文
  4. 手机版会员中心html,会员中心.html
  5. 微信视频号发布69条直播违规条例
  6. BI数据分析师工作说明
  7. 快递物流信息复打接口API代码-快递100
  8. 计算机ppt放映方式怎么改,ppt打开方式设置怎么设置
  9. 计算机丢失msvc80.dll,msvcr80.dll
  10. 自己写的实用VBA代码合集