最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性。这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见,经过这几年的整理,刚好趁着近期经济下行严重,抽出时间把整个地图组件重构一下,首要的任务就是搞个地图基类,然后子类分别实现不同地图的具体功能。
实际编码过程中发现,无论是百度地图还是高德地图或者天地图等,能够提取出来的共性特别多,甚至很多处理函数都一样,所以在地图基类mapobjbase的基础上,又单独搞了个mapobjfun静态函数类,专门放置的通用的js函数处理,比如设置地图中心,获取和设置缩放级别,坐标字符串传坐标对象等。这样可以节约大量的重复代码,同时万一有相同的处理,还可以直接改动一处就所有地图内核都通用。
在整个组件的重构过程中,遇到过很多疑难杂症,当你把各个地图厂家提供的js开发手册全部实现一遍的时候,会发现大厂的程序员也不是很有水平,也存在不少的bug,我们能做的就是尽量规避这些bug,绕弯解决,而不是硬要在这种bug上死耗。比如一个办法就是自己写js去实现一部分的功能,这样就可以非常巧妙的避开,这在我们平时的编程过程中是一个很好的习惯。
include ($$PWD/../core_map/core_map.pri) include ($$PWD/../core_webview/core_webview.pri) 在pro中启用地图内核,比如百度地图内核对应需要在pro文件中增加一行定义 DEFINES += baidux。 引入头文件。
#include "webview.h" #include "mapbase.h" 新建一个窗体,上面放一个布局,推荐用表格布局 gridlayout,可以放多个浏览器控件。 实例化浏览器类和地图类。
//实例化浏览器控件 WebView *webView = new WebView(this); //加入到布局 webView->setLayout(ui->gridLayout); //实例化地图类/参数2表示何种地图内核 MapBase *mapObj = MapHelper::getMapObj(this, MapCore_BaiDu); //传入网页控件用于执行函数 mapObj->setWebView(webView); //加载地图 mapObj->load(); 所有地图相关的函数接口在MapBase类中,可以打开mapbase.h查看具体说明。 地图中大部分的功能都是通过执行js函数来触发,比如添加标注、添加折线图等。这些必须严格按照提供的js函数名称和参数来执行。对应示例都提供了相关的调用方法。 部分函数接口。
QString js; //设置地图级别(值越大放大/越小缩小) js = "setZoom(9)"; //街道图卫星图切换(0-街道图/1-卫星图/2-混合图) js = "setMapType(1)"; //添加一个标记(北京那边) js = QString("addMarker('测试点', '测试地址', '', '', 100, '%1', 2)").arg("116.475836,40.251114"); //最终通过浏览器控件执行 webView->runJs(js); 浏览器组件使用示例。
//实例化浏览器控件 WebView *webView = new WebView(this); //加入到布局 webView->setLayout(ui->verticalLayout); //打开网址 webView->load("https://www.xxx.com", "", "");
相关知识
百度地图、高德地图的数据下载
【QT教程】QT6 Web开发入门 QT Web
【腾讯地图街】腾讯地图手机版免费下载
三维地图数据资源获取指南
高德地图联合国家旅游局信息中心发布清明赏花地图
本地生活SEO搜索商业流量,美团、抖音、高德与百度地图
数据地图?地图数据?傻傻分不清楚!
Mapbox更换地图组件底图样式
华为花瓣地图(Petal地图)上线,15亿次下载,亮点在这里
白杨SEO:本地生活SEO搜索流量有吗?美团、抖音、高德与百度地图
网址: Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图 https://m.huajiangbk.com/newsview1946838.html
上一篇: 天地图手机版下载 |
下一篇: [软件]花园设计CAD软件 Ga |