欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-23 07:56:45
简介 该方法支持跳转第三方地图并定位指定坐标。 app端跳转至百度地图(第三方软件);若无,则跳转至高德地图(第三方软件);若均无,则打开腾讯地图(uni自带方法:uni.op...

简介

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

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

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

参考

百度地图uri api
高德地图uri api
uni-app html5+ api

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