一、前言

地图类型主要是两种,街道图和卫星图,平时我们看到的默认的都是街道图,无论是街道图还是卫星图,都是一张张图片文件组成的,级别越高,图片越是清晰,一般都会支持到19级的地图,相当于精确到20米内的图像,这个已经完全足够用了,想要再精确的级别应该是要商业级别的地图数据了,大部分的应用程序街道图够用,也有少部分的程序需要卫星图,可以看清地貌的情况。

卫星地图,简称卫星图,确切的说法是卫星遥感图像,也叫卫星影像。所谓遥感,即遥远地感知。卫星遥感即通过卫星在太空中探测地球地表物体对电磁波的反射和其发射的电磁波,从而提取这些物体的信息,完成远距离识别物体。 将这些电波信息转换、识别得到的图像,即为卫星图。

百度地图或者其他地图,都提供了代码设置默认地图和快捷悬浮按钮切换,比如悬浮切换按钮放在右上角,地图类型切换后,原有的设备的经纬度坐标通用,不用做任何更改。

二、功能特点

  1. 同时支持在线地图和离线地图两种模式。
  2. 同时支持webkit内核、webengine内核、miniblink内核、IE内核。
  3. 支持设置多个标注点,信息包括名称、地址、经纬度。
  4. 可设置地图是否可单击、拖动、鼠标滚轮缩放。
  5. 可设置协议版本、秘钥、主题样式、中心坐标、中心城市、地理编码位置等。
  6. 可设置地图缩放比例和级别,缩略图、比例尺、路况信息等控件的可见。
  7. 支持地图交互,比如鼠标按下获取对应位置的经纬度。
  8. 支持查询路线,可设置起点位置、终点位置、路线模式、路线方式、路线方案(最少时间、最少换乘、最少步行、不乘地铁、最短距离、避开高速)。
  9. 可显示点线面工具,可直接在地图上划线、点、矩形、圆形等。
  10. 可设置行政区划,指定某个城市区域绘制图层,在线地图自动输出行政区划边界点集合到js文件给离线地图使用。
  11. 可静态或者动态添加多个覆盖物。支持点、折线、多边形、矩形、圆形、弧线、点聚合等。
  12. 提供函数接口处理经纬度解析成地址和地址解析成经纬度坐标。
  13. 提供的demo直接可以单独选点执行对应的处理比如路线查询。
  14. 可以拿到路线查询到的点坐标信息集合,比如用于机器人坐标导航等。
  15. 封装了丰富的函数比如删除指定点和所有点,删除指定覆盖物和所有覆盖物等。
  16. 标注点弹框信息可以自定义内容,标准html格式。
  17. 标注点单击事件可选 0-不处理 1-自己弹框 2-发送信号。
  18. 标注点可设置动画效果 0-不处理 1-跳动 2-坠落
  19. 标注点可设置本地图片文件等。
  20. 函数接口友好和统一,使用简单方便,就一个类。
  21. 支持js动态交互添加点、删除点、清空点、重置点,不需要刷新页面。
  22. 支持任意Qt版本、任意系统、任意编译器。

三、体验地址

  1. 体验地址:https://pan.baidu.com/s/1ZxG-oyUKe286LPMPxOrO2A 提取码:o05q 文件名:bin_map.zip
  2. 国内站点:https://gitee.com/feiyangqingyun
  3. 国际站点:https://github.com/feiyangqingyun
  4. 个人主页:https://blog.csdn.net/feiyangqingyun
  5. 知乎主页:https://www.zhihu.com/people/feiyangqingyun/

四、效果图

五、相关代码

void MapBaiDu::addProperty(QStringList &list)
{if (mapType == 0) {//定义地图对象//可设置默认街道图还是卫星图等 街道图: BMAP_NORMAL_MAP 卫星图: BMAP_SATELLITE_MAPlist << QString("  var map = new %1.Map('map', {minZoom:%2, maxZoom:%3, enableMapClick:%4, mapType:%5});").arg(mapFlag).arg(mapMinZoom).arg(mapMaxZoom).arg(enableMapClick ? "true" : "false").arg("BMAP_NORMAL_MAP");list << QString("  var point = new %1.Point(%2);").arg(mapFlag).arg(mapCenterPoint);} else if (!mapLocal) {//只有在线地图才有其他几种if (mapType == 1) {//设置地图类型为地球模式  BMap对象全部改为BMapGLlist << QString("  var map = new BMapGL.Map('map');");list << QString("  var point = new BMapGL.Point(%1);").arg(mapCenterPoint);list << QString("  map.setMapType(BMAP_EARTH_MAP);");} else if (mapType == 2) {list << QString("  var map = new BMapGL.Map('map');");list << QString("  var point = new BMapGL.Point(%1);").arg(mapCenterPoint);} else if (mapType == 3) {list << QString("  var subwayCityName = '%1';").arg(mapCenterCity);list << QString("  var list = BMapSub.SubwayCitiesList;");list << QString("  var subwaycity = null;");list << QString("  var count = list.length;");list << QString("  for (var i = 0; i < count; ++i) {");list << QString("    if (list[i].name === subwayCityName) {");list << QString("      subwaycity = list[i];");list << QString("      break;");list << QString("    }");list << QString("  }");list << QString("  var map = new BMapSub.Subway('map', subwaycity.citycode);");list << QString("  var zoomControl = new BMapSub.ZoomControl({");list << QString("  anchor: BMAPSUB_ANCHOR_BOTTOM_RIGHT,");list << QString("  offset: new BMapSub.Size(10,100)");list << QString("  });");list << QString("  map.addControl(zoomControl);");list << QString("  map.setZoom(0.5);");}}//初始化地图,设置中心点坐标或者中心城市和地图级别.优先按照中心坐标设置//离线地图需要采用中心点坐标的形式if (!mapCenterPoint.isEmpty()) {list << QString("  map.centerAndZoom(point, %1);").arg(mapZoom);} else {list << QString("  map.centerAndZoom(\"%1\", %2);").arg(mapCenterCity).arg(mapZoom);}if (!mapLocal && mapType == 2) {//设置倾斜角角度list << QString("  map.setHeading(64.5);");list << QString("  map.setTilt(73);");}//启用地图拖拽事件,默认启用(可不写)if (enableDragging) {list << QString("  map.enableDragging();");}//启用滚轮放大缩小,默认禁用if (enableScrollWheelZoom) {list << QString("  map.enableScrollWheelZoom();");}//启用鼠标双击放大,默认启用(可不写)if (enableDoubleClickZoom) {list << QString("  map.enableDoubleClickZoom();");}//启用键盘移动,默认禁用if (enableKeyboard) {list << QString("  map.enableKeyboard();");}//启用地图惯性拖拽,默认禁用list << QString("  map.enableInertialDragging();");//启用连续缩放效果,默认禁用list << QString("  map.enableContinuousZoom();");//启用双指操作缩放,默认启用list << QString("  map.enablePinchToZoom();");//启用自动适应容器尺寸变化,默认启用list << QString("  map.enableAutoResize();");//向地图中添加缩放控件if (showNavigationControl) {list << QString("  map.addControl(new %1.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT, type:BMAP_NAVIGATION_CONTROL_LARGE}));").arg(mapFlag);}//向地图中添加缩略图控件if (showOverviewMapControl) {list << QString("  map.addControl(new %1.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT, isOpen:1}));").arg(mapFlag);}//向地图中添加比例尺控件if (showScaleControl) {list << QString("  map.addControl(new %1.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT}));").arg(mapFlag);}//添加地图类型控件,默认为空则街道图+卫星图+三维图都有if (showMapTypeControl) {//街道图:BMAP_NORMAL_MAP  卫星图:BMAP_SATELLITE_MAP  混合图:BMAP_HYBRID_MAP  三维图:BMAP_PERSPECTIVE_MAPlist << QString("  map.addControl(new %1.MapTypeControl({mapTypes:[BMAP_NORMAL_MAP,BMAP_SATELLITE_MAP]}));").arg(mapFlag);}//添加全景控件if (showPanoramaCoverageLayer) {list << QString("  map.addTileLayer(new %1.PanoramaCoverageLayer());").arg(mapFlag);list << QString("  var ctrlPan = new %1.PanoramaControl();").arg(mapFlag);list << QString("  ctrlPan.setOffset(new %1.Size(20, 50));").arg(mapFlag);list << QString("  map.addControl(ctrlPan);");}//添加路况控件,离线地图没有实时路况if (showTrafficControl && !mapLocal) {list << QString("  var ctrlTra = new %1Lib.TrafficControl({showPanel:false});").arg(mapFlag);list << QString("  ctrlTra.setAnchor(BMAP_ANCHOR_BOTTOM_RIGHT);");list << QString("  map.addControl(ctrlTra);");}//设置颜色主题,2019-6开始收费,屏蔽下面这行即可if (!mapStyleName.isEmpty()) {//list<< QString("  map.setMapStyle({style:'%1'});").arg(mapStyleName);}//设置鼠标单击获取经度纬度,通过信号发出去if (enableClickPoint) {list << QString("  map.addEventListener('click', function(e) {");list << QString("    var point = e.point.lng + ',' + e.point.lat;");list << QString("    receiveData('point', point);");list << QString("  });");}
#if 0//部分设备需要通过事件机制实现鼠标滚轮缩放if (enableScrollWheelZoom) {list << QString("  window.addEventListener('mousewheel', function(e) {");list << QString("    var wheel = e.wheelDelta;");list << QString("    if (wheel > 0) {");list << QString("      map.zoomIn();");list << QString("    } else {");list << QString("      map.zoomOut();");list << QString("    }");list << QString("  });");}
#endif
}

Qt编写地图综合应用49-地图类型(街道图、卫星图)相关推荐

  1. Qt编写的开源帖子集合(懒人专用)

    回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...

  2. 百度地图:加强篇(交通图、卫星图的实现)

    什么是地图图层 地图可以包含一个或多个图层,每个图层在每个级别都是由若干个图块组成的,它们覆盖了地图的整个表面.例如您所看到包括街道.兴趣点.学校.公园等内容的地图展现就是一个图层,另外交通流量的展现 ...

  3. php地图路径规划,Qt编写地图综合应用21-路径规划

    Qt编写地图综合应用21-路径规划 ## 一.前言 近期重新将这个地图综合应用进行大幅度的改进更新升级,包括使用示例也做了非常多的改进和调整,其中就包括路径规划功能,之前只是调用了百度地图的JS交互接 ...

  4. Qt编写地图综合应用60-覆盖物坐标和搜索

    一.前言 地图应用中有时候需要开启悬浮工具栏,用户可以直接在地图上绘制矩形.多边形.圆形.线条等,于是需要提供一个函数接口,能够获取到用户绘制的这些图形形状对应的信息.比如坐标点.圆形的中心点和半径. ...

  5. Qt编写地图综合应用59-经纬度坐标纠偏

    一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了 ...

  6. Qt编写地图综合应用57-跨平台(win、linux、mac、uos、kylin等)

    一.前言 跨平台着实花了不少的精力,为了从Qt4.7兼容到Qt6.2及后续版本,头发掉了不少,仅有的几根毛所剩无几,哎,可能这就是程序员的命,本人写Qt程序这么多年,比较喜欢支持多个Qt版本,尤其是钟 ...

  7. Qt编写地图综合应用25-echart动态交互

    一.前言 之前用echart组件做过各种效果,随着各种现场应用现场项目的增多,各种需求也都慢慢增加起来,为了满足各种不同类型的需求,近期又抽空重新整理和封装了echart类,主要就是增加了不少的js函 ...

  8. Qt/C++编写地图综合应用58-兼容多浏览器内核

    一.前言 miniblink是一个追求极致小巧的浏览器内核项目,全世界第三大流行的浏览器内核控件.其基于chromium最新版内核,去除了chromium所有多余的部件,只保留最基本的排版引擎blin ...

  9. Qt编写地图综合应用19-地图服务

    一.前言 国内提供地图服务的厂家基本上是五家,百度地图.高德地图.腾讯地图.搜狗地图.天地图,国外的一般还有谷歌地图.微软地图(BING地图),这几家的地图服务的api接口都大同小异,甚至很多函数的名 ...

最新文章

  1. 车道线检测--End-to-end Lane Detection through Differentiable Least-Squares Fitting
  2. 程序员日常工作中如何正确的偷懒?
  3. 迈好“转战”第一步-丰收节交易会·陶以平: 谋定乡村振兴
  4. Java中有关clone方法的用法
  5. MySQL 使用 LOAD DATA 导入 csv 文件
  6. 通俗系列之同步、异步、阻塞和非阻塞
  7. java导出数据到excel模板_springboot+jxls 根据Excel模板 填写数据并导出
  8. 【一】Jmeter:体系结构
  9. unity3d工程Plugin文件夹笔记
  10. 【HUSTOJ】1022: 输出小写字母表
  11. 《搞不定人,你如何带团队?》读书记录
  12. 泰然金融牵手快公益 花儿计划国学课入畲乡
  13. python中iter函数_Python基础:iter函数的两个参数
  14. 人生重开模拟器,脚本点击
  15. 张小飞的Java之路——第九章
  16. Kotlin骚气写法 三
  17. Monash call:如何做好计算机视觉的研究?
  18. 比较清晰的求马鞍点方法,不过浪费空间时间。
  19. 盘点:三十五个非主流开源数据库
  20. nginx 反向代理proxy_pass 后加斜杠和不加斜杆的区别

热门文章

  1. Arduino智能小车——循迹篇
  2. 复旦大学王思远:基于事实的自动问题生成研究
  3. html跳转qq浏览器,为何QQ浏览器主页自动跳转
  4. 松松软文:媒介编辑管理系统上线
  5. PC实现Win10/原生安卓双系统
  6. 【MySQL自学之路】第2天——关系代数计算【理论知识】
  7. git status怎么操作_git操作-方向对了,就不怕路远了!-51CTO博客
  8. VS中调试QT项目报错合集
  9. Mac OS和Office版本问题
  10. EROFS 和 方舟 辩证的看 —— 方舟