来自一个需求的总结;

在微信公众号中根据地图上的marker和label,或者搜索结果点击调起地图APP进行导航。

一开始是使用百度地图进行开发,后面转腾讯是因为微信不允许不是自家或者合作方的APP在微信自带浏览器中唤起。(这里吐槽一下微信,这么搞算垄断吗?还有腾讯地图有多渣心里没点B数吗?用户使用量就是一个很好的证明!)

首先:

百度地图Marker打点及label并添加对应点击事件

给百度地图添加了maker,label及对应的点击事件,如果需要创建多个marker和label;从第二行创建地址解析器示例处循环遍历就好了。

这里点击的时候会调用百度地图 URI接口唤起百度地图APP,用户如果安装有会提示打卡外部APP,没安装就提示下载。iOS、安卓端亲测有效。

但是百度地图导航有个不好的是要起始位置的经纬度,这里先获取本地经度度再使用驾车导航。

ps:demo中一些变量替换成自己的就可以了。

 let map = new BMap.Map("baseMap");
// 创建地址解析器实例
var myGeo = new BMap.Geocoder();
// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint(type.address, function(point){
if (point) {
map.centerAndZoom(point, 11);
let marker = new BMap.Marker(point);
map.addOverlay(marker);
marker.addEventListener("click", function(e) {
window.location.href=`http://api.map.baidu.com/direction?origin=latlng:${loca.point.lat},${loca.point.lng}|name:我的位置&destination=${type.address}&mode=driving&region=${loca.city}&output=html`;
console.log('click ' + type.address)
});
var label = new BMap.Label(type.userName,{offset:new BMap.Size(20,-10)});
label.addEventListener("click", function(e) {
window.location.href=`http://api.map.baidu.com/direction?origin=latlng:${loca.point.lat},${loca.point.lng}|name:我的位置&destination=${type.address}&mode=driving&region=${loca.city}&output=html`;
console.log('click ' + type.address)
});
marker.setLabel(label)
}else{
console.log("您选择地址没有解析到结果!");
}
}, type.city);

腾讯地图Marker打点及label并添加对应点击事件

腾讯地图多个打点和百度地图不一样的是,循环遍历的时候腾讯地图要使用一个闭包的独立空间。这个官方并没有给出demo后面在网上找到的,这里不禁吐槽一下腾讯地图的demo文档还有社区。。。

腾讯地图URI导航的时候H5端有个好处就是,不写出发from字段的话默认使用当前地址,但是也只有在h5端能定位得到。pc端开发的时候会提示定位不到。百度地图则pc/h5端打开的时候都能定位得到。

 let map = new qq.maps.Map(document.getElementById('baseMap'), {
disableDefaultUI: true,
zoom: 12
});
var infoWin = new qq.maps.InfoWindow({
map: map
}); for(let type of markerList) {
(function(address, name) {
let geocoder = new qq.maps.Geocoder();
geocoder.getLocation(address);
//设置服务请求成功的回调函数
geocoder.setComplete(function(result) {
let latLng = new qq.maps.LatLng(result.detail.location.lat, result.detail.location.lng);
map.setCenter(latLng) let marker=new qq.maps.Marker({
position: latLng,
animation: qq.maps.MarkerAnimation.DROP,
map: map
});
let label = new qq.maps.Label({
position: latLng,
map: map,
offset: new qq.maps.Size(13, -38),
style: {padding: "1px 5px",borderRadius: "5px",border: "1px solid #D7290F", zIndex: 99},
content: name
});
qq.maps.event.addListener(marker, 'click', function(e) {
console.log(e, + '----' + marker.getPosition())
window.location.href=`http://apis.map.qq.com/uri/v1/routeplan?type=drive&to=${address}&policy=0&referer=educationBase`;
})
qq.maps.event.addListener(label, 'click', function(e) {
console.log(e, + '----' + label.getPosition())
window.location.href=`http://apis.map.qq.com/uri/v1/routeplan?type=drive&to=${address}&policy=0&referer=educationBase`;
}) });
//若服务请求失败,则运行以下函数
geocoder.setError(function() {
console.log("出错了,请输入正确的地址!!!");
});
})(type.address, type.userName); }

还有另一个没用到的高德地图其实也是用URI唤起APP。官方文档也很充足,单项目一开始的时候被要求用百度地图所以没有进行深入探讨。欢迎大家一起相互学习。

H5端调起百度地图、腾讯地图app的更多相关文章

  1. php 百度地图 腾讯地图 转换坐标

    /* * 中国正常GCJ02坐标---->百度地图BD09坐标 * 腾讯地图用的也是GCJ02坐标 * @param double $lat 纬度 * @param double $lng 经度 ...

  2. H5跳转到百度地图并定位

    找了半天的JS api,发现没有,后来发现这个叫 url api,让我好找. 官方文档: http://lbsyun.baidu.com/index.php?title=uri/api/web : 简 ...

  3. php 腾讯地图和百度地图的相互转换

    关于百度和腾讯地图坐标转换的问题,网上大多给的是JS实现的,而JS又是异步实现的,无法返回值,在有些应用场景下不好使用,这里我从腾讯论坛上找到了一个PHP转换的方法,贴出来分享给大家.经测试十分有效! ...

  4. 腾讯地图和百度地图的PHP相互转换

    /** * 百度地图---->腾讯地图 * @param double $lat 纬度 * @param double $lng 经度 * @return array(); */ functio ...

  5. 如何实现在H5里调起高德地图APP?(上)

    这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发 ...

  6. 如何实现在H5里调起高德地图APP?

    http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...

  7. uniapp H5引入腾讯地图

    在网上搜索了许多关于uniapp引入腾讯地图的方法都以失败告终,我开发的应用主要使用于H5,小程序与H5是不同的sdk,就不在这说了,况且小程序有手把手教学,可参考腾讯地图官网https://lbs. ...

  8. 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图

    1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...

  9. H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例

    H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例 (转载:https://blog.csdn.net/weixin_38787928/article/details/86741227 ...

随机推荐

  1. 关于Pyhton多线程同步队列的应用

    ''' 同步队列 put方法和task_done方法, queue有一个未完成任务数量num,put依次num+1, task依次num-1.任务都完成时任务结束. 1.创建一个 Queue.Queu ...

  2. Visual Studio TFS

    Overview:Active Directory环境下搭建TFS(一个domain内,with Domain Controller): 1)最简单的环境(这俩拓扑是从TFSAdmin文档中截取的,从 ...

  3. Spartan6系列之器件详细介绍、选型参考

    1.      概述 Spartan6系列是一类低成本高容量的FPGA,采用45nm低功耗敷铜技术,能在功耗.性能.成本之间很好地平衡:Spartan6系列内部采用双寄存器.6输入的LUT,还有一系列 ...

  4. Oracle+struts2实现用户登入并显示访问次数

    实体类: package entity; public class userfo { private int id;//id private String name;//用户名 private Str ...

  5. struts2配置文件加载顺序

    struts2配置文件加载顺序: struts-default.xml/ struts-plugin.xml/ struts.xml/ struts.properties/ web.xml

  6. Java_数组1_16.5.12

    声明整型数组a: int[] a; 这时,只声明了变量a,还应该使用new运算符创建数组: int[] a=new int [100];(数组长度不要求是一个常量:new int[n]会创建一个长度为 ...

  7. C# 字符串每隔两个 提取

    private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); str ...

  8. java虚拟机(八)--java性能监控与故障处理工具

    问题定位: 除了个人经验,知识,工具也是很重要的,通过数据进行问题分析,包括:运行日志.异常堆栈.GC日志.线程快照(threaddump/javacore文件 ).堆转储快照(heapdump/hp ...

  9. ThinkPHP---layer插件

    [概论] (1)layer是基于jquery开发的一款美化弹框的插件,主要用于弹框效果的交互.但其他功能和组件也日益完善 官网:http://layer.layui.com 在线手册:http://w ...

  10. Python 爬虫爬取今日头条街拍上的图片

    # 今日头条--街拍 import requests from urllib.parse import urlencode import os from hashlib import md5 from ...