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 纬度,浮点数,范围为-90~90,负数表示南纬。
longitude 经度,浮点数,范围为-180~180,负数表示西经。
speed 速度,浮点数,单位 m/s。
accuracy 位置的精确度
altitude 高度,单位 m 。
verticalAccuracy 垂直精度,单位 m(Android 无法获取,返回 0) 。
horizontalAccuracy 水平精度,单位 m 。
street 街道名称
cityCode 城市编码
city 城市名称
country 国家
countryCode 国家代码
province 省份
streetNumber 街道号码
district

# 示例

扫码体验
重新加载
请使用百度APP扫码

# 图片示例

# 代码示例

    <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: '获取失败'});
                  }
              });
          },
      });