首页 > 编程语言 >Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图

Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图

时间:2024-08-31 11:47:08浏览次数:10  
标签:Qt 经纬度 地图 支持 地址 坐标 标注

一、前言说明

地址和经纬度坐标转换的功能必须在线使用,一般用在导航需求上,比如用户输入起点地址和终点地址,查询路线后,显示对应的路线,而实际上各大地图厂家默认支持的是给定经纬度坐标来查询(百度地图支持传入地址),但是你让用户输入经纬度坐标是不可能的,他肯定不可能知道怎么去拿到这个坐标,所以一般都是要求用户输入实际的地址,然后程序转换成经纬度坐标,再调用函数传入两个坐标取查询路径。

所有的地图都会提供这个功能,而且发现一个趋势,由于这种功能调用可能非常频繁,所以各大地图厂商目前都有做成服务的形式,也就是发送http请求拿结果,尤其是腾讯地图比较激进,直接地图的js中的对应逆地址解析接口都停用了,必须用http请求方式。其实就算是地图本身的js中内置的对象处理,估计后台也是自己去发送请求拿到的结果。于是需要单独写个js函数用于发送请求返回结果,在js中发送请求不要太简单,直接new一个XMLHttpRequest调用send方法即可,返回的结果直接在onreadystatechange事件通过responseText属性获取。

二、功能特点

  1. 支持多种地图内核,默认采用百度地图,可选高德地图、天地图、腾讯地图、谷歌地图等。
  2. 同时支持在线地图和离线地图两种模式,离线地图方便在不联网的场景中使用。
  3. 支持各种地图控件的启用,比如地图导航、地图类型、缩略图、比例尺、全景导航、实时路况、绘图工具、结果面板等。
  4. 支持多种地图功能的动态启用禁用,比如地图拖曳、键盘操作、滚轮缩放、双击放大、连续缩放、地图测距等。
  5. 提供众多js函数接口用于交互,参数极其丰富,能够想到的应用场景需求都有。
  6. 统一的信号槽机制,地图中的结果统一信号发送出去,收到后根据type类型区分。
  7. 支持地图交互,比如鼠标按下获取对应位置的经纬度。单击标注点弹出对应点的信息。
  8. 支持添加标注、删除标注、移动标注、清空标注。
  9. 标注点可以指定图标图片和尺寸,支持gif动图,支持指定以图片中心对齐还是底部中心对齐。可以设置旋转角度,带富文本提示信息。
  10. 标注点事件支持单击发信号通知和自己弹框显示信息。
  11. 提供地址转坐标和坐标转地址接口。
  12. 支持各种图形绘制,包括折线图、多边形、矩形、圆形、弧线等。
  13. 可显示悬浮的绘图工具栏,直接在地图上划线、标注点、矩形、圆形等。
  14. 支持各种区域搜索,比如矩形区域、圆形区域,可以按照关键字匹配将搜索结果显示在地图中。
  15. 可动态添加离线的行政区边界点数据。可以搜索行政区划并获取该区域的边界点数据。数据可以保存到文件以便离线使用。
  16. 支持点聚合功能,多个小标注点合并到一个大标注点,防止点密集导致交互不友好。
  17. 可以添加海量点,每个点都可以单击获取对应坐标和信息。
  18. 所有的覆盖物信息比如标注点、矩形、多边形、折线图等,都可以主动获取对应的信息比如坐标点和路径等。
  19. 支持路径规划,支持公交路线、自驾路线、步行路线、骑行路线,不同查询支持不同策略,可选最少时间、最少换乘、不走高架等。
  20. 路径规划结果可以显示在地图中,也可以获取到路径点坐标集合。这个数据可以保存到文件,以便发给机器人或者无人机做导航用来轨迹移动。
  21. 可以设置不同的地图视图比如街道图、卫星图、混合图。
  22. 可以设置不同的样式,比如午夜蓝、青草绿等样式风格。
  23. 可以设置地图的旋转角度和倾斜角度。
  24. 提供经纬度坐标纠偏转换功能,比如传入的GPS坐标需要转换到百度地图坐标或者高德地图坐标。各种坐标系转换全部离线函数,支持地球坐标系WGS-84、火星坐标系GCJ-02、百度坐标系BD-09之间的互相转换,涵盖了各种地图的坐标系。
  25. 提供动态轨迹点移动功能,按照给定的经纬度坐标集合平滑移动。
  26. 同时支持qwidget和qml,支持编译到安卓系统运行。

三、使用说明

  1. 在地址文本框中输入地址,单击地址转坐标,会查找到当前地址最近的经纬度坐标填入坐标文本框中。
  2. 在坐标文本框中输入坐标,单击坐标转地址,会查找坐标文本框中经纬度坐标最近的地址填入地址文本框中。

四、相关链接

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 名称:bin_map.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun

五、效果图

六、相关代码

void MapObjBaiDu::addGeocoder()
{
    //初始化解析对象
    html << QString("  var geocoder;");
    html << QString("  function initGeocoder() {");
    html << QString("    if (geocoder) {return}");
    html << QString("    geocoder = new BMap.Geocoder();");
    html << QString("  }");

    //地址解析成坐标
    html << QString("  function getPointByAddr(flag, addr) {");
    html << QString("    initGeocoder();");
    html << QString("    geocoder.getPoint(addr, function(result) {");
    html << QString("      if (result) {");
    html << QString("        var point = getPointString(result);");
    html << QString("        receiveData('geocoderresult', flag + '|' + point);");
    html << QString("      }");
    html << QString("    });");
    html << QString("  }");

    //坐标解析成地址
    html << QString("  function getAddrByPoint(flag, point) {");
    html << QString("    initGeocoder();");
    html << QString("    geocoder.getLocation(getPoint(point), function(result) {");
    html << QString("      if (result) {");
    html << QString("        var address = result.address;");
    html << QString("        receiveData('geocoderresult', flag + '|' + address);");
    html << QString("      }");
    html << QString("    });");
    html << QString("  }");
}

void MapObjTian::addGeocoder()
{
    //初始化解析对象
    html << QString("  var geocoder;");
    html << QString("  function initGeocoder() {");
    html << QString("    if (geocoder) {return}");
    html << QString("    geocoder = new T.Geocoder();");
    html << QString("  }");

    //地址解析成坐标
    html << QString("  function getPointByAddr(flag, addr) {");
    html << QString("    initGeocoder();");
    html << QString("    geocoder.getPoint(addr, function(result) {");
    html << QString("      if (result.getStatus() == 0) {");
    html << QString("        var point = result.getLocationPoint();");
    html << QString("        point = getPointString(point);");
    html << QString("        receiveData('geocoderresult', flag + '|' + point);");
    html << QString("      }");
    html << QString("    });");
    html << QString("  }");

    //坐标解析成地址
    html << QString("  function getAddrByPoint(flag, point) {");
    html << QString("    initGeocoder();");
    html << QString("    geocoder.getLocation(getPoint(point), function(result) {");
    html << QString("      if (result.getStatus() == 0) {");
    html << QString("        var address = result.getAddress();");
    html << QString("        receiveData('geocoderresult', flag + '|' + address);");
    html << QString("      }");
    html << QString("    });");
    html << QString("  }");
}

void frmMapDemoMarker::on_btnAddrToPoint_clicked()
{
    QString addr = ui->txtAddr->text().trimmed();
    emit runJs(QString("getPointByAddr('AddrToPoint', '%1')").arg(addr));
}

void frmMapDemoMarker::on_btnPointToAddr_clicked()
{
    QString point = ui->txtPoint->text().trimmed();
    emit runJs(QString("getAddrByPoint('PointToAddr', '%1')").arg(point));
}

标签:Qt,经纬度,地图,支持,地址,坐标,标注
From: https://www.cnblogs.com/feiyangqingyun/p/18390075

相关文章

  • opencv 判断某个坐标点是否在多边形内cv::pointPolygonTest
        cv::pointPolygonTestpointPolygonTest 函数在OpenCV中用于判断点是否在一个多边形的内部、外部或在边界上。该函数不需要考虑多边形的凹凸性,即它可以处理凸多边形和凹多边形。  判断坐标点是否在坐标围起来的区域内判断点是否在点组成的封闭区域......
  • 【python】PyQt5中富文本框QTextEdit的详细教程与应用实战
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 【Qt】表单布局QFormLayout
     表单布局QFormLayoutQt还提供了QFormLayout,属于是QGridLayout的特殊情况,专⻔⽤于实现两列表单的布局.这种表单布局多⽤于让⽤⼾填写信息的场景.左侧列为提⽰,右侧列为输⼊框例子:使用QFormLayout创建表单(1)设置三个label、三个lineEdit(2)设置表单布局,将上述......
  • 我的第一个QT程序_创建项目_全程图解
    创建项目1.打开QT开发工具2.点【创建项目】在弹出的窗口的项目列表中选择【Application(Qt)】中间列选择第一项如上图。3.输入项目名称和项目保存的路径4.Buildsystem下拉列表中有三个选项,虽然Qt6主推CMake,所以可以默认,直接下一步5.类相关信息设置。这里也可以......
  • k8s中pod获取宿主机IP地址
    在Pod内部的Java环境中,你可以通过KubernetesAPI或KubernetesDownwardAPI来获取节点的IP地址。以下是几种方法来实现这一点:个人使用的第一种方法1:使用KubernetesDownwardAPI如果你已经在Pod配置中使用了DownwardAPI,将节点的IP地址注入到环境变量中,你可......
  • Java根据经纬度计算两个坐标之间的距离(含SQL计算)
    最近接到两个需求,一个是通过小程序扫码开门的,我这边主要就是根据用户定位判断用户离扫码店铺距离小于多少米的时候才可以调远程调开门接口,另外一个就是获取用户周围有哪些店铺。需求很简单,就是根据定位获取的经度维度计算两个点之间的球面距离,这里我们主要采用Haversine公......
  • 软设每日一练2——某计算机系统页面大小为4K,若进程的页面变换表如下所示,逻辑地址为十
    题目:某计算机系统页面大小为4K,若进程的页面变换表如下所示,逻辑地址为十六进制1D16H。该地址经过变换后,其物理地址应为十六进制(        )​        A.1024H    B.3D16H     C.4Dl6H    D.6D16H            ......
  • 【Qt笔记】QListView控件详解
     目录引言一、QListView基本概念1.1定义与功能1.2架构原理二、QListView基本使用2.1创建QListView和Model2.2设置QListView的属性2.3处理用户交互三、QListView高级技巧3.1自定义委托3.2使用QStandardItemModel3.3实现拖放功能四、QListView......
  • 倾斜摄影osgb格式文件,进行坐标转换
    倾斜摄影OSGB格式的文件,很棘手,今天需要把osgb放到UE中渲染。碰到的问题如下:1、osgb文件导进去后,Z轴不想上,是歪的,小人放进去后,就斜站在马路上。2、根本原因是坐标系,UE的插件cesiumforUE支持WGS84坐标(wkid:4326)。怎么解决问题呢?1、当然是问GPT呀,搞搞问答,看它出什么答案,结果,很......
  • Unity+QT, 如何把Unity打包出的exe嵌入QT程序中,并且使用Socket进行交互
    文章目录概要前期准备QT与Unity的Socket通信实际应用场景总结概要在VR开发中,常常需要桌面窗口和VR头盔使用者进行交互。通过将Unity制作的VR程序嵌入到QT应用程序窗口中,并使用Socket进行通信,可以实现这种交互。本文将介绍如何实现这一功能。前期准......