uniapp 定位服务_uni-app 支持多端第三方地图定位的方法
简介该方法支持跳转第三方地图并定位指定坐标。app端跳转至百度地图(第三方软件);若无,则跳转至高德地图(第三方软件);若均无,则打开腾讯地图(uni自带方法:uni.openlocation)其它端打开腾讯地图(uni自带方法:uni.openlocation)demo源码:测试数据:wgs84: 39.9078008469, 116.391290596bd09: 39.915547, 116.
简介
该方法支持跳转第三方地图并定位指定坐标。
app端跳转至百度地图(第三方软件);若无,则跳转至高德地图(第三方软件);若均无,则打开腾讯地图(uni自带方法:uni.openlocation)
其它端打开腾讯地图(uni自带方法:uni.openlocation)
demo
源码:
测试数据:
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
第一次发布,支持跳转第三方地图并定位指定坐标。
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。
希望与广大网友互动??
点此进行留言吧!
更多推荐




所有评论(0)