H5端调起百度地图、腾讯地图app
来自一个需求的总结;
在微信公众号中根据地图上的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®ion=${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®ion=${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的更多相关文章
- php 百度地图 腾讯地图 转换坐标
/* * 中国正常GCJ02坐标---->百度地图BD09坐标 * 腾讯地图用的也是GCJ02坐标 * @param double $lat 纬度 * @param double $lng 经度 ...
- H5跳转到百度地图并定位
找了半天的JS api,发现没有,后来发现这个叫 url api,让我好找. 官方文档: http://lbsyun.baidu.com/index.php?title=uri/api/web : 简 ...
- php 腾讯地图和百度地图的相互转换
关于百度和腾讯地图坐标转换的问题,网上大多给的是JS实现的,而JS又是异步实现的,无法返回值,在有些应用场景下不好使用,这里我从腾讯论坛上找到了一个PHP转换的方法,贴出来分享给大家.经测试十分有效! ...
- 腾讯地图和百度地图的PHP相互转换
/** * 百度地图---->腾讯地图 * @param double $lat 纬度 * @param double $lng 经度 * @return array(); */ functio ...
- 如何实现在H5里调起高德地图APP?(上)
这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前往方式. 场景一.在高德地图上展示Marker点或者POI标记 在一些基于位置分享的应用开发 ...
- 如何实现在H5里调起高德地图APP?
http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...
- uniapp H5引入腾讯地图
在网上搜索了许多关于uniapp引入腾讯地图的方法都以失败告终,我开发的应用主要使用于H5,小程序与H5是不同的sdk,就不在这说了,况且小程序有手把手教学,可参考腾讯地图官网https://lbs. ...
- 基于MySQL + Node.js + Leaflet的离线地图展示,支持百度、谷歌、高德、腾讯地图
1. 基本说明 本项目实现了离线展示百度.谷歌.高德.腾讯地图.主要功能如下: 实现了地图瓦片图下载.存储.目前支持存储至MySQL Node.js服务调用MySQL中的瓦片图 Leaflet展示地图 ...
- H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例
H5手机移动端调起浏览器(qq浏览器,uc浏览器)自带分享功能实例 (转载:https://blog.csdn.net/weixin_38787928/article/details/86741227 ...
随机推荐
- 【C++】朝花夕拾——中缀转后缀
对于简单的四则运算而言,后缀表达式可以通过使用栈(stack)快速算出结果 ==================================我是分割线======================= ...
- 【OptiX】第5个示例 递归反射、抗锯齿
运行结果如下: [抗锯齿] 可以看到中间那个竖线的右侧从地面上看有款明显的锯齿,而左边就没有.包括球的反射出来的三角形和地面也有明显的锯齿.那么抗锯齿究竟本例中是怎么做的呢? 首先在采样时,当场景需要 ...
- ANNOTATION and analyse hello1.java
一.What is annotation? annotation的中文意思就是注解,注释的意思.注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念.它的形式跟接口很类似,不过前面 ...
- Luogu P4549 裴蜀定理 / Min
思路 题目已经给出了正解.我们只需要将裴蜀定理推广到若干数的线性组合就可以做这道题了 要注意的是需要在输入的时候取一个绝对值.因为可能会有负数存在.我之前也写过裴蜀定理的证明,要看的话点这里 吐槽 第 ...
- 初遇Java
什么是JVM?JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己的虚拟机,因此java语言可以跨平台. 什么是JRE?包括Jav ...
- python3.x Day2 购物车程序练习
购物车程序: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4. ...
- linux find-在指定目录下查找文件
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...
- selenium的调用
selenium的调用 制作人:全心全意 selenium调用谷歌浏览器 chrome = webdriver.Chrome() //创建谷歌浏览器对象 url="http://www.ba ...
- scrapy 按顺序抓取text内容
需求:获得如下li.clearfix 下的所有text,并且按顺序输出 1. x.css('div.reply-doc h4 a::text').extract(); 2. x.css('div.r ...
- sql杂记:一些坑和数据库恢复
这是一篇纯粹的乱七八糟的笔记...(勿喷)主要记录一下初入SQL坑的杂七杂八的注意事项. 一.先补充下事务的写法: start transaction;#开始事务 --各种事务... commit;# ...