Qt/C++编写地图综合应用48-地球模式、三维模式、地铁模式
一、前言
百度地图本身提供了普通模式、地球模式、三维模式、地铁模式等好多种,普通模式是最常用的默认的,就是那个街道图和卫星图的,而地球模式和三维模式是最近几年才新增加的,为了迎合现在越来越多的用户的需求,地球模式和三维模式需要使用新的API接口,之前都是BMAP开头,而他是BMAPGL开头,连点坐标等对象都是BMAPGL.Point之类的对象了,看名字就知道这些玩意估计都用了opengl之类的玩意来实现和渲染。
除了传统的街道图地图外,默认的一般都是街道图,还有卫星图、三维图等,其中又有叠加层,比如叠加路况图层和路网图层等,最近去了多家的地图官网看对应的api接口,总体上感觉现在都往2.5D或者3D这块发展,估计这也是未来的一个大趋势,记得有个长辈程序员,花了很多年专门研究opengl之类的玩意,将现有的电网系统换成了3D的,甚至取了个高大上的名字叫世界电网互联系统,直接可以旋转一个球体,查看各种电网路线等,而且现在的安防行业好像也在往3D方向发展,甚至和物联网结合,以3D的模式呈现一栋大楼或者一个小区的三维场景,报警点也是三维呈现,这个效果非常惊艳,一不小心就把大领导震撼了,然后经费就来了。
二、功能特点
- 同时支持在线地图和离线地图两种模式。
- 同时支持webkit内核、webengine内核、miniblink内核、IE内核。
- 支持设置多个标注点,信息包括名称、地址、经纬度。
- 可设置地图是否可单击、拖动、鼠标滚轮缩放。
- 可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。
- 可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。
- 支持地图交互,比如鼠标按下获取对应位置的经纬度。
- 支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。
- 可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。
- 可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。
- 可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。
- 提供函数接口处理经纬度解析成地址和地址解析成经纬度坐标。
- 提供的demo直接可以单独选点执行对应的处理比如路线查询。
- 可以拿到路线查询到的点坐标信息集合,比如用于机器人坐标导航等。
- 封装了丰富的函数比如删除指定点和所有点,删除指定覆盖物和所有覆盖物等。
- 标注点弹框信息可以自定义内容,标准html格式。
- 标注点单击事件可选 0-不处理 1-自己弹框 2-发送信号。
- 标注点可设置动画效果 0-不处理 1-跳动 2-坠落
- 标注点可设置本地图片文件等。
- 函数接口友好和统一,使用简单方便,就一个类。
- 支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。
- 支持任意Qt版本、任意系统、任意编译器。
三、体验地址
- 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip
- 国内站点:https://gitee.com/feiyangqingyun
- 国际站点:https://github.com/feiyangqingyun
- 个人主页:https://blog.csdn.net/feiyangqingyun
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
四、效果图
五、相关代码
void MapBaiDu::addHead(QStringList &list)
{//构建网页头部list << QString("<html>");list << QString("<head>");list << QString("<title>%1</title>").arg(title);list << QString("<meta charset=\"utf-8\">");list << QString("<meta name=\"viewport\" content=\"initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width\">");//地图页面样式list << QString("<style type=\"text/css\">");//全局字体+页面宽度高度占比+边距等list << QString(" html,body{font-family:微软雅黑;height:100%;width:100%;margin:0px;padding:0px;}");//隐藏左下角的logolist << QString(" .anchorBL{opacity:0;}");if (startAddr.isEmpty()) {list << QString(" #map{height:100%;width:100%;}");} else {list << QString(" #map{height:%1px;width:100%;}").arg(height);list << QString(" #result,#result table{width:100%;font-size:12px;}");}//webkit浏览器滚动条样式list << QString(" ::-webkit-scrollbar{width:0.8em;}");list << QString(" ::-webkit-scrollbar-track{background:rgb(241,241,241);}");list << QString(" ::-webkit-scrollbar-thumb{background:rgb(188,188,188);}");list << QString("</style>");//引入webchannel.js
#ifdef webenginelist << QString("<script type=\"text/javascript\" src=\"qwebchannel.js\"></script>");
#endif//在线和离线地图加载的文件路径不一样if (mapLocal) {//引入地图JS文件list << QString("<script type=\"text/javascript\" src=\"map_load.js\"></script>");//引入CurveLine JS文件,只有当绘制弧线的时候才需要,如果不需要绘制弧线可以注释list << QString("<script type=\"text/javascript\" src=\"tools/CurveLine.min.js\"></script>");//加载点聚合需要下面两个js文件list << QString("<script type=\"text/javascript\" src=\"tools/TextIconOverlay_min.js\"></script>");list << QString("<script type=\"text/javascript\" src=\"tools/MarkerClusterer_min.js\"></script>");//引入行政区划轮廓图JS文件list << QString("<script type=\"text/javascript\" src=\"citypointjs/%1.js\"></script>").arg(cityJsName);//引入鼠标绘制工具JS文件if (showOverlayTool) {list << QString("<script type=\"text/javascript\" src=\"tools/DrawingManager_min.js\"></script>");list << QString("<link rel=\"stylesheet\" type=\"text/css\" href=\"tools/DrawingManager_min.css\"/>");}} else {//引入地图JS文件 0-默认 1-地球 3-地铁if (mapType == 0) {if (mapFlag == "BMapGL") {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?type=webgl&v=%1\"></script>").arg(mapVersionKey);} else {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?v=%1\"></script>").arg(mapVersionKey);}} else if (mapType == 1 || mapType == 2) {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?type=webgl&v=%1\"></script>").arg(mapVersionKey);} else if (mapType == 3) {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/api?type=subway&v=%1\"></script>").arg(mapVersionKey);}//引入CurveLine JS文件,只有当绘制弧线的时候才需要,如果不需要绘制弧线可以注释list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js\"></script>");//加载点聚合需要下面两个js文件list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js\"></script>");list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js\"></script>");//引入轨迹图动画js文件list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/TrackAnimation/src/TrackAnimation_min.js\"></script>");//引入实时路况JS文件if (showTrafficControl) {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js\"></script>");list << QString("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.css\"/>");}//引入鼠标绘制工具JS文件if (showOverlayTool) {list << QString("<script type=\"text/javascript\" src=\"http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js\"></script>");list << QString("<link rel=\"stylesheet\" type=\"text/css\" href=\"http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css\"/>");}}list << QString("</head>");
}
Qt/C++编写地图综合应用48-地球模式、三维模式、地铁模式相关推荐
- Qt/C++编写地图综合应用5-自适应拉伸
一.前言 用过echart的人都会遇到一个问题,就算是代码中写了window.onresize = echart.resize,也只是横向自适应拉伸填充页面,垂直方向不会变化,除非指定高度才可以,这就 ...
- Qt/C++编写地图综合应用58-兼容多浏览器内核
一.前言 miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件.其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blin ...
- Qt/C++编写地图综合应用54-动态点位标注
一.前言 动态点位标注是定制的一个功能模块,提供直接地图上选点设置标记点,点位信息用结构体存储,其中包括了经度.纬度.速度.时间等信息,单击对应的标注点可以显示详细的弹框信息,弹框信息采用自定义的ht ...
- php地图路径规划,Qt编写地图综合应用21-路径规划
Qt编写地图综合应用21-路径规划 ## 一.前言 近期重新将这个地图综合应用进行大幅度的改进更新升级,包括使用示例也做了非常多的改进和调整,其中就包括路径规划功能,之前只是调用了百度地图的JS交互接 ...
- Qt编写地图综合应用49-地图类型(街道图、卫星图)
一.前言 地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内 ...
- Qt编写地图综合应用59-经纬度坐标纠偏
一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了 ...
- Qt编写地图综合应用28-闪烁点图
一.前言 Qt除了内置了各种UI组件以外,还直接集成了浏览器控件,注意哦这可是跨平台的浏览器控件哦,在5.6版本以前集成的是webkit,以后集成的是webengine,使得程序的灵活性拓展性大大增强 ...
- QT QNetworkInterface::allAddresses();获取了很多无效的地址_Qt编写地图综合应用16-省市轮廓图下载...
一.前言 之前做获取边界点的时候,主要采用的是在线地图的方式,因为在线地图中直接内置了函数可以根据行政区域的名称来自动获取边界,其实这些边界就是一些点坐标集合连接起来的平滑线,然后形成的轮廓图,这种方 ...
- Qt编写地图综合应用3-省市区域图
一.前言 省市区域图也可以叫省市轮廓图,就是将每个省份.市区的边界区域变成轮廓展示,只是个大概的轮廓,和真是的地图基本一致,毕竟都是一个个点堆起来的,可能会有很小很小的误差,之前做大屏系统中间那个中国 ...
最新文章
- 广东海洋大学数学与计算机学院校友会,数学与计算机学院召开2020级研究生入学教育会...
- 提高C++性能的编程技术笔记:设计优化/可扩展性/系统体系结构相关+测试代码
- 一个整形数组中最大值求和问题(3)
- 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API
- 处理2D图像和纹理——创建2D菜单界面
- Windows 7 建立 ×××网络
- Factory Pattern工厂模式
- [Bzoj1911][Apio2010]特别行动队(斜率优化)
- 解决 VMware 新装 CentOS 7.* 连不上网络
- svn插件说明和安装
- Eclipse修改代码字体
- JDK动态代理(介绍理解,如何实现)
- 单相电机正反转接线图_单相电机正反转原理及接线图(多图)
- 一个简单的条码/二维码扫描App
- 记录每天学习的新知识: Android 前台服务
- WSL2 真香!跟 Sugar 一起搞定 Windows 10 最佳 Linux 伴侣
- java寻宝题目,寻宝
- gitbook 转换 pdf
- 05-Node.js—http模块
- python爬取高匿代理IP(再也不用担心会进小黑屋了)