codecamp

百度智能小程序 获取当前的地理位置和速度

swan.getLocation

在工具和真机中的实现有区别,详见 API 实现差异
解释: 获取当前的地理位置、速度。当用户离开智能小程序后,此接口无法调用。使用该 API 需通过获取用户授权设置申请授权后方可对用户发起授权申请,使用 permission 对获取位置信息的用途进行说明,可在  swan.authorize 中查看相关错误码信息。

方法参数

Object object

object 参数说明

属性名 类型 必填 默认值 说明
type String wgs84 返回 gps 坐标,可选 gcj02 。 wgs84 返回 gps 坐标, gcj02 返回火星坐标, gcj02 比 wgs84 更为精确,所以返回可用于传入 swan.openLocation 的坐标
altitude Boolean 传入 true 会返回高度信息,获取高度需要较高精度且需要打开 gps ,会很耗时,默认没有用 gps
success Function 接口调用成功的回调函数,返回内容详见返回参数说明
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数 参数类型 说明
latitude Number 纬度,浮点数,范围为 -90~90 ,负数表示南纬
longitude Number 经度,浮点数,范围为 -180~180 ,负数表示西经
speed Number 速度,浮点数,单位 m/s
accuracy Number 位置的精确度
altitude Number 高度,单位 m
verticalAccuracy Number 垂直精度,单位 m(Android 无法获取,返回 0)
horizontalAccuracy Number 水平精度,单位 m
street String 街道名称
cityCode String 城市编码,更新的行政区域信息数据请参考行政区域数据更新映射关系表
city String 城市名称
country String 国家
countryCode String 国家代码
province String 省份
streetNumber String 街道号码
district String

示例


图片示例

代码示例 

在开发者工具中打开

<view class="wrap">
    <view class="card-area">
        <view class="list-area border-bottom" s-for="item in infoList">
            <view class="list-item-key-4">{{item.chineseName}}}</view>
            <view class="list-item-value">{{item.value}}</view>
        </view>
    </view>
    <view class="swan-security-padding-bottom flex-button">
        <button type="primary" bindtap="getLocation">点击获取位置信息</button>
    </view>
</view>
Page({
    data: {
        infoList: [{
            chineseName: '精确度',
            engName: 'accuracy',
            value: ''
        }, {
            chineseName: '高度',
            engName: 'altitude',
            value: ''
        }, {
            chineseName: '城市名称',
            engName: 'city',
            value: ''
        }, {
            chineseName: '城市编码',
            engName: 'cityCode',
            value: ''
        }, {
            chineseName: '国家',
            engName: 'country',
            value: ''
        }, {
            chineseName: '国家代码',
            engName: 'countryCode',
            value: ''
        }, {
            chineseName: '区',
            engName: 'district',
            value: ''
        }, {
            chineseName: '水平精度',
            engName: 'horizontalAccuracy',
            value: ''
        }, {
            chineseName: '纬度',
            engName: 'latitude',
            value: ''
        }, {
            chineseName: '经度',
            engName: 'longitude',
            value: ''
        }, {
            chineseName: '省份',
            engName: 'province',
            value: ''
        }, {
            chineseName: '速度',
            engName: 'speed',
            value: ''
        }, {
            chineseName: '街道名称',
            engName: 'street',
            value: ''
        }, {
            chineseName: '街道号码',
            engName: 'streetNumber',
            value: ''
        }, {
            chineseName: '垂直精度',
            engName: 'verticalAccuracy',
            value: ''
        }]
    },
    onShow() {
        let infoList = this.getData('infoList');
        for (var i = 0; i < infoList.length; i++) {
            infoList[i].value = '';
        }
        this.setData({
            infoList
        });
    },
    getLocation(e) {
        swan.getLocation({
            type: 'gcj02',
            altitude: true,
            success: res => {
                console.log('getLocation success', res);
                let infoList = this.getData('infoList');
                for (var i = 0; i < infoList.length; i++) {
                    const engName = infoList[i].engName;
                    console.log('engName', res[engName]);
                    if (res[engName] === '' || res[engName] === 0 || res[engName] === '0') {
                        infoList[i].value = '暂无';
                    }
                    else {
                        engName === 'latitude' || engName === 'longitude'
                            ? infoList[i].value = this.formatLocation(res[engName]) + '′'
                            : infoList[i].value = res[engName];
                    }
                }
                this.setData({
                    infoList
                });
            },
            fail: err => {
                swan.showToast({
                    title: '获取失败,请检查位置授权是否开启',
                    icon: 'none'
                });
            }
        });
    },
    formatLocation(data) {
        return data.toFixed(2).replace('.', '°');
    }
});

参考示例

图片示例

同一位置下 type 属性为 wgs84 : 

同一位置下 type 属性为 gcj02 : 

参考示例:图示可知 type 属性为 gcj02 的位置更为精准,建议与 swan.openLocation 连用验证 

在开发者工具中打开

Page({
    getLocation() {
        swan.getLocation({
            type: 'gcj02', 
            altitude: true,
            success: res => {
                console.log('success', res);
                swan.openLocation({
                    latitude: res.latitude,
                    longitude: res.longitude,
                    success: res => {
                        console.log('openLocation success', res);
                    },
                    fail: err => {
                        console.log('openLocation fail', err);
                    }
                });
            },
            fail: err => {
                swan.showToast({title: '获取失败'});
            }
        });
    },
});


百度智能小程序 位置
百度智能小程序 宿主App内置地图查看位置
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

百度智能小程序开发文档

百度智能小程序 组件

百度智能小程序 地图

百度智能小程序 画布

百度智能小程序 API

百度智能小程序 界面

百度智能小程序 关注小程序引导组件

百度智能小程序 自定义组件

百度智能小程序 媒体

百度智能小程序 设备

百度智能小程序 拨打电话

百度智能小程序 内存警报

百度智能小程序 手机联系人

百度智能小程序 用户截屏事件

百度智能小程序 第三方平台

百度智能小程序 开放接口

百度智能小程序 百度收银支付

百度智能小程序 分包预下载

百度智能小程序 数据分析

百度智能小程序 服务端

百度智能小程序 云开发

百度智能小程序 初始化

百度智能小程序 云函数

百度智能小程序 服务端初始化

百度智能小程序 服务器获取上下文

百度智能小程序 服务端云函数

百度智能小程序 开发教程

百度智能小程序 功能开发

百度智能小程序 基本原理

百度智能小程序 小程序自动化

百度智能小程序 视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }