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

news/2024/10/4 19:33:03

一、前言说明

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

所有的地图都会提供这个功能,而且发现一个趋势,由于这种功能调用可能非常频繁,所以各大地图厂商目前都有做成服务的形式,也就是发送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));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/54962.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Ethercat设备数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 5 设置网关采集ETHERCAT数据 5 6 用IEC61850协议转发数据 7 7 网关使用多个逻辑设备和逻辑节点的方法 9 8 安装NPCAP 10 9 案例总结 11 1 案例说明设置网关采集EtherCAT设备数据 把采集的数据转成IEC61850协议转发给其他…

若依如何修改logo

若依在我看来封装得很完善,但是也包了很多层,想修改logo找了好久找不对,做个笔记下次才好找 修改标题旁的logo title的logo图片存放在src>assets>logo文件下,修改的位置在layout>components>sidebar下的logo.vue修改URL上的logo

Hexo + redefine主题配置个人博客

前置准备安装 node js 安装 git 安装 Hexo 创建 Github 仓库。node js: https://nodejs.org/zh-cngit: 注:git 安装时一直继续就好,但是有 path 的地方一定要勾选。 https://git-scm.com/download/win检查一下是否安装成功,在终端中输入: node -v npm -v git --versionHe…

Linux监控性能调优分析-perf(3)火焰图

10 火焰图(flamegraph) perf火焰图是一种可视化性能分析工具,它通过将性能数据绘制成一个类似火焰的图,直观地展示了程序的调用栈,帮助开发者快速定位性能瓶颈。特点如下:可视化性能数据:火焰图将性能数据映射到一个二维的图中,横轴表示采样时间,纵轴表示调用栈。 火焰…

安全:iptables中的表和链的区别

一,什么是链? 1,一个防火墙中通常针对不同的来源设置很多规则,多个规则形成一个链,其实也可以理解成是分组的概念,在Iptables防火墙中针对不同的链路共分为五种不同的链。 如下图所示,当数据报文进入链之后,首先匹配第一条规则,如果第一条规则通过则访问,如果不匹配,…

Gluon 编译 JavaFx - exe

Gluon 编译 JavaFx -> exe 能力强的伙伴可以直接参考官方文档 开发工具idea 2023.3 idea gluon plugin git apache-maven-3.8.4环境准备vs 2022 community 版本 (使用微软官方的安装器安装,社区版即可) jdk 11 or 17+ (可以使用idea进行下载安装) GraalVM CE Gluon 22.1.…

8.4linux定时任务-环境变量-数据库

配合SUID本地环境变量提权 思路原理:利用sh环境变量替换,使得/tmp/ps得到root权限;ps=sh 过程:手写调用文件-编译-复制文件-增加环境变量-执行 gcc demon1.c -o shell cp /bin/sh /tmp/ps export PATH=/tmp:$PATH # webshell权限无法设置环境变量 ./shell id提前本地定时任…

代码随想录day46 || 647 回文子串, 516 最长回文子序列

647 回文字串func countSubstrings(s string) int {// 动规五部曲// dp[i][j] 表示s[i: j+1] 区间是否是一个回文// if s[i] == s[j] {if i-j <= 1 || dp[i+1][j-1] == true { dp[i][j] == true}}// 初始化为false// 从下往上,从左往右// printvar count intvar dp = make(…