uni-app 支持多端第三方地图定位的方法


Posted in Javascript onJanuary 03, 2020

简介

该方法支持跳转第三方地图并定位指定坐标。

APP端跳转至百度地图(第三方软件);若无,则跳转至高德地图(第三方软件);若均无,则打开腾讯地图(uni自带方法:uni.openLocation)
其它端打开腾讯地图(uni自带方法:uni.openLocation)

demo

源码:https://github.com/yapeee/uni-components

测试数据:

wgs84: 39.9078008469, 116.391290596
bd09: 39.915547, 116.403909
gcj02: 39.9091591069, 116.3974783161

基础用法

import Map from '../ms-openMap.js'
Map.openMap(latitude, longitude, name, coord_type)

属性说明

参数 说明 类型
latitude 纬度(默认GCJ-02坐标系) Float
longitude 经度(默认GCJ-02坐标系) Float
name 地图标注名称 String
coord_type 坐标类型,可选参数。示例:gcj02、bd09、wgs84 String

实现方案

首先判断程序的运行平台,不同的平台调用不同的打开地图的方法。android和ios平台下,判断并打开百度地图和高德地图。其他平台下,打开腾讯地图网页版(uni自带方法)。

一、判断运行平台

通过条件编译及uni.getSystemInfoSync().platform来判断android、ios及其他平台。

// #ifdef APP-PLUS
switch(uni.getSystemInfoSync().platform){
  case 'android':
    console.log('运行Android上')
    openMapByAndroid(latitude, longitude, name)
    break;
  case 'ios':
    console.log('运行iOS上')
    openMapByIos(latitude, longitude, name)
    break;
  default:
    openMapByDefault(latitude, longitude, name)
    console.log('运行在开发者工具上')  
    break;
}  
// #endif
// #ifndef APP-PLUS
openMapByDefault(latitude, longitude, name)
// #endif
tips:

平台判断有2种场景,一种是在编译期判断,一种是在运行期判断。

编译期判断:即条件编译,不同平台在编译出包后已经是不同的代码。

运行期判断:运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.getSystemInfoSync().platform 判断客户端环境是 Android、iOS 还是小程序开发工具(在百度小程序开发工具、微信小程序开发工具、支付宝小程序开发工具中使用 uni.getSystemInfoSync().platform 返回值均为 devtools)。

二、APP打开第三方地图的方法

HTML5+是对接SDK与页面的中间件,用于页面通过js调用底层的SDK接口。

2.1、 APP判断第三方应用是否存在

/*
 * appInf: ( ApplicationInf ) 必选 要判断第三方程序的描述信息
 * Android平台需要通过设置appInf的pname属性(包名)进行查询。 
 * iOS平台需要通过设置appInf的action属性(Scheme)进行查询,在iOS9以后需要添加白名单才可查询,
 * 在manifest.json文件plus->distribute->apple->urlschemewhitelist节点下添加(如urlschemewhitelist:["weixin"]).
 */
plus.runtime.isApplicationExist(appInf);

2.1.1、判断百度地图应用是否存在

plus.runtime.isApplicationExist({pname: 'com.baidu.BaiduMap', action: 'baidumap://'})

2.1.2、判断高德地图应用是否存在

plus.runtime.isApplicationExist({pname: 'com.autonavi.minimap'},action: 'iosamap://'})

2.2、APP调用第三方程序打开指定的URL

/*
 * 说明:调用第三方程序打开指定的URL
 * 参数:
 * url: ( String ) 必选 要打开的URL地址
 * errorCB: ( OpenErrorCallback ) 可选 打开URL地址失败的回调
 * identity: ( String ) 可选 指定打开URL地址的程序名称
 */
plus.runtime.openURL( url, errorCB, identity );

2.2.1、打开第三方程序实际应用

function openURL(url, identity ) {
  let newurl = encodeURI(url);
  plus.runtime.openURL( newurl, function(res){
    uni.showModal({
      content: res.message
    })
  }, identity);
}

2.2.2、打开android百度地图

url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`
identity = 'com.baidu.BaiduMap'
openURL(url, identity)

2.2.3、打开android高德地图

url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
identity = 'com.autonavi.minimap'
openURL(url, identity)

2.2.4、打开ios百度地图

url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
openURL(url, identity)

2.2.5、打开ios高德地图

url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
openURL(url, identity)

三、其他平台打开地图的方法

其他平台采用uni.openLocation(OBJECT)方法使用应用内置地图查看位置。

uni.openLocation({
  latitude: latitude,
  longitude: longitude,
  name: name,
  fail: () => {
    uni.showModal({
      content: '打开地图失败,请重'
    })
  },
})

更新日志

2020-01-02

支持BD-09(百度坐标)、GCJ-02(高德、腾讯)、WGS-84(GPS坐标)坐标系。

2019.12.10

第一次发布,支持跳转第三方地图并定位指定坐标。

参考

百度地图URI API
高德地图URI API
uni-app HTML5+ API

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
常用js字符串判断方法整理
Oct 18 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
May 31 Javascript
javascript函数中的3个高级技巧
Sep 22 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
浅谈JavaScript的自动垃圾收集机制
Dec 15 Javascript
很棒的vue弹窗组件
May 24 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
May 27 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 Javascript
微信小程序文字显示换行问题
Jul 28 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
Sep 18 Javascript
Vue 实现登录界面验证码功能
Jan 03 #Javascript
JS实现扫码枪扫描二维码功能
Jan 03 #Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
Jan 03 #Javascript
uni-app如何实现增量更新功能
Jan 03 #Javascript
JS实现简单日历特效
Jan 03 #Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
Jan 02 #Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 #Javascript
You might like
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
[42:25]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第三场
2018/04/06 DOTA
python简单获取数组元素个数的方法
2015/07/13 Python
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
解决django服务器重启端口被占用的问题
2019/07/26 Python
学习和使用python的13个理由
2019/07/30 Python
Python实现微信机器人的方法
2019/09/06 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
医科学校毕业生自荐信
2013/11/09 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
市政管理求职信范文
2014/05/07 职场文书
公司承诺书怎么写
2014/05/24 职场文书
初二学生评语大全
2014/12/26 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
Python Pandas 删除列操作
2022/03/16 Python
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技