uniApp地址调起本机的高德地图、百度地图、apple地图、Google地图

1,068 阅读1分钟

uniapp实现 APP跳转到第三方地图

一、首先在manifest.json配置ios白名单 image.png 二、实现代码

/* *
*latitude:经度
*longitude:维度
 *name:地址名称
 */
openMap(latitude, longitude, name) {
    let url = "";
    if (plus.os.name == "Android") {
        let hasBaiduMap = plus.runtime.isApplicationExist({
            pname: 'com.baidu.BaiduMap',
            action: 'baidumap://'
        });
        let hasAmap = plus.runtime.isApplicationExist({
            pname: 'com.autonavi.minimap',
            action: 'androidamap://'
        });
        let urlBaiduMap =
            `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo`
        urlBaiduMap = encodeURI(urlBaiduMap)
        let urlAmap =
            `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
        urlAmap = encodeURI(urlAmap)
        if (hasAmap && hasBaiduMap) {
            plus.nativeUI.actionSheet({
                title: "选择地图应用",
                cancel: "取消",
                buttons: [{
                    title: "百度地图"
                }, {
                    title: "高德地图"
                }]
            }, function(e) {
                switch (e.index) {
                    case 1:
                        plus.runtime.openURL(urlBaiduMap);
                        break;
                    case 2:
                        plus.runtime.openURL(urlAmap);
                        break;
                }
            })
        } else if (hasAmap) {
            plus.runtime.openURL(urlAmap);
        } else if (hasBaiduMap) {
            plus.runtime.openURL(urlBaiduMap);
        } else {
            plus.nativeUI.alert("本机未安装指定的地图应用");
            // url = "geo:"+latitude+","+longitude+"?q=%e6%95%b0%e5%ad%97%e5%a4%a9%e5%a0%82";
            // plus.runtime.openURL(url); //如果是国外应用,应该优先使用这个,会启动google地图。这个接口不能统一坐标系,进入百度地图时会有偏差
        }
    } else {
        // iOS上获取本机是否安装了百度高德地图,需要在manifest里配置,在manifest.json文件app-plus->distribute->apple->urlschemewhitelist节点下添加(如urlschemewhitelist:["iosamap","baidumap"])
        plus.nativeUI.actionSheet({
            title: "选择地图应用",
            cancel: "取消",
            buttons: [{
                title: "Apple地图"
            }, {
                title: "百度地图"
            }, {
                title: "高德地图"
            }]
        }, function(e) {
            console.log("e.index: " + e.index);
            switch (e.index) {
                case 1:
                    url =
                        `http://maps.apple.com/?q=${name}&ll=${latitude},${longitude}&spn=0.008766,0.019441`
                    break;
                case 2:
                    url =
                        `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`;
                    break;
                case 3:
                    url =
                        `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0`
                    break;
                default:
                    break;
            }
            if (url != "") {
                url = encodeURI(url)
                plus.runtime.openURL(url, function(e) {
                    plus.nativeUI.alert("本机未安装指定的地图应用");
                });
            }
        })
    }
}

上述代码片段只有js相关的,在手机上试试吧! 最近成都40℃的高温,心烦意乱的,不过问题解决了还是大松一口气,来给生活比个耶!

948ab1d39e2c4bb7bde129db6dd4d3e0.jpeg