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 ...
随机推荐
- CSS 潜藏着的BFC
在写样式时,往往是添加了一个样式,又或者是修改了某个属性,就达到了我们的预期. 而BFC就潜藏在其中,当你修改样式时,一不小心就能触发它而毫无察觉,因此没有意识到BFC的神奇之处. 什么是BFC(Bl ...
- js中true和false判断
布尔类型里只有这6参数个返回false,其它都为true Boolean(false) // false Boolean(undefined) // false Boolean(null) // fa ...
- JavaScript(十二)事件
Dom事件 1.DOM0级事件 on事件 只能 监听冒泡阶段 切只能绑定一个事件 dom.onclick = function(){}; 2.Dom2级事件 可以绑定多次事件 可以通过设置fla ...
- SpringBoot+Mybatis 自动创建数据表(适用mysql)
Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样 ...
- Windows提高_1.1内核对象
内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核 ...
- Jmeter在windows上安装和环境配置
一.Jmeter简单介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具.它可以用于测试静态和动态资源,例如静态文件.Java小服务程序.CGI 脚本.Java 对象.数 ...
- IDEA中springboot项目打包成jar
springboot的打包方式有很多种.有打成war的,有打成jar的,也有直接提交到github,通过jekins进行打包部署的.这里主要介绍如何打成jar进行部署.不推荐用war,因为spri ...
- 微服务网关从零搭建——(八)Ocelot网关中加入skywalking APM
准备工作 一.下载skywalking 本例使用的是 注: 1.解压后执行完2,3步骤后运行\bin\startup.bat 2.默认后台端口为8080 如需修改则修改\webapp\webapp.y ...
- P1060 开心的金明(洛谷,动态规划递推,01背包轻微变形题)
题目链接:P1060 开心的金明 基本思路: 基本上和01背包原题一样,不同点在于这里要的是最大重要度*价格总和,我们之前原题是 f[j]=max(f[j],f[j-v[i]]+p[i]); 那么这里 ...
- CF 429B B.Working out (四角dp)
题意: 两个人一个从左上角一个从左下角分别开始走分别走向右下角和右上角,(矩阵每个格子有数)问到达终点后可以得到的最大数是多少,并且条件是他们两个相遇的时候那个点的数不能算 思路: 首先这道题如果暴力 ...