来自一个需求的总结;

在微信公众号中根据地图上的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. 6.14 提取第n个分割的子串

    问题:从字符串中提取出一个指定的.由分割符隔开的子字符串.create view v as select 'mo,larry,curly' as namefrom t1union allselect ...

  2. URL解析-URLComponents

    let components = URLComponents(url: fakeUrl, resolvingAgainstBaseURL: false)! http://10.100.140.84/m ...

  3. SpringBoot基于websocket的网页聊天

    一.入门简介正常聊天程序需要使用消息组件ActiveMQ或者Kafka等,这里是一个Websocket入门程序. 有人有疑问这个技术有什么作用,为什么要有它?其实我们虽然有http协议,但是它有一个缺 ...

  4. Xamarin View获取属性的绑定信息

    public static Binding GetBinding( BindableObject self, BindableProperty property) { var methodInfo = ...

  5. maven引入的包无法使用 解决方法

    如果正常引入后在依赖中能够找到包,但是打不开 1.有可能是包下载不完整 把maven下载源由国外转成阿里镜像源找到 maven 的配置文件: settings.xml 文件: <mirror&g ...

  6. ThinkPHP---thinkphp控制器、路由、分组设置(C)

    配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...

  7. 【Hadoop】一、HDFS简介及基本概念

      当需要存储的数据集的大小超过了一台独立的物理计算机的存储能力时,就需要对数据进行分区并存储到若干台计算机上去.管理网络中跨多台计算机存储的文件系统统称为分布式文件系统(distributed fi ...

  8. lombok无法解析log

    首先确认开发工具是否安装lombok,已安装的话打开lombok插件页,选择update, 然后重启idea.

  9. 解决window.location.href参数太长

    前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...

  10. 每日命令:(3)pwd

    Linux中用 pwd 命令来查看”当前工作目录“的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文件系统内的确切位置. ...