阅读(3984) 赞(6)

支付宝小程序API 位置

2017-08-24 14:40:06 更新

my.chooseLocation

简介

my.chooseLocation 是使用支付宝内置地图选择地理位置的 API。

使用限制

  • 暂无境外地图数据,在中国内地(不含港澳台)以外的地区可能无法正常调用此 API。
  • 仅支持高德地图 style 与火星坐标系。

扫码体验

mychooselocation.png

效果示例

选择地理位置.gif

示例代码

// API-DEMO page/API/choose-location/choose-location.json
{
    "defaultTitle": "选择位置"
}
<!-- API-DEMO page/API/choose-location/choose-location.axml-->
<view class="page">
  <view class="page-section">
    <view class="page-section-demo">
      <text>经度:</text>
      <input value="{{longitude}}"></input>
    </view>
    <view class="page-section-demo">
      <text>纬度:</text>
      <input value="{{latitude}}"></input>
    </view>
    <view class="page-section-demo">
      <text>位置名称:</text>
      <input value="{{name}}"></input>
    </view>
    <view class="page-section-demo">
      <text>详细位置:</text>
      <input value="{{address}}"></input>
    </view>    
    <view class="page-section-btns">
      <view onTap="chooseLocation">选择位置</view>
    </view>
  </view>
</view>
// API-DEMO page/API/choose-location/choose-location.js
Page({
  data: {
    longitude: '120.126293',
    latitude: '30.274653',
    name: '黄龙万科中心',
    address: '学院路77号',
  },
  chooseLocation() {
    var that = this
    my.chooseLocation({
         success:(res)=>{
          console.log(JSON.stringify(res))
          that.setData({
            longitude:res.longitude,
            latitude:res.latitude,
            name:res.name,
            address:res.address
          })
        },
        fail:(error)=>{
          my.alert({content: '调用失败:'+JSON.stringify(error), });
        },
    });
    },
})
/* API-DEMO page/API/choose-location/choose-location.acss */
.page-body-info {
  height: 250rpx;
}
.page-body-text-location {
  display: flex;
  font-size: 50rpx;
}
.page-body-text-location text {
  margin: 10rpx;
}
.page-section-location-text{
    color: #49a9ee;
}

入参

Object 类型,属性如下:

属性 类型 必填 描述
success Function 否 调用成功的回调函数。
fail Function 否 调用失败的回调函数。
complete Function 否 调用结束的回调函数(调用成功、失败都会执行)。

success 回调函数
属性 类型 描述
name String 位置名称。
address String 详细地址。
latitude Number 纬度,浮点数,范围为-90~90,负数表示南纬。
longitude Number 经度,浮点数,范围为-180~180,负数表示西经。
provinceName String 省份名称。
cityName String 城市名称。

my.getLocation

简介

my.getLocation 是获取用户当前的地理位置信息的 API。

使用限制

  • 基础库 1.1.1 或更高版本。若版本较低,建议采取 兼容处理。
  • 暂无境外地图数据,在中国内地(不含港澳台)以外的地区可能无法正常调用此 API。
  • 仅支持高德地图 style 与火星坐标系。

扫码体验

获取用户当前的地理位置信息.jpeg

效果示例

获取用户当前的地理位置.gif

示例代码

// API-DEMO page/API/get-location/get-location.json
{
    "defaultTitle": "获取位置"
}
<!-- API-DEMO page/API/get-location/get-location.axml-->
<view class="page">
  <view class="page-section">
    <view class="page-section-demo">
      <view>当前位置经纬度</view>
      <block a:if="{{hasLocation === false}}">
        <text>未获取</text>
      </block>
      <block a:if="{{hasLocation === true}}">
        <view class="page-body-text-location">
          <text>E{{location.longitude[0]}}°{{location.longitude[1]}}′</text>
          <text>N{{location.latitude[0]}}°{{location.latitude[1]}}′</text>
        </view>
      </block>
    </view>


    <view class="page-section-btns">
      <view onTap="getLocation">获取位置</view>
      <view onTap="clear">清空</view>
    </view>
  </view>
</view>
// API-DEMO page/API/get-location/format-location.js
function formatLocation(longitude, latitude) {
  longitude = Number(longitude).toFixed(2),
  latitude = Number(latitude).toFixed(2)


  return {
    longitude: longitude.toString().split('.'),
    latitude: latitude.toString().split('.')
  }
}


export default formatLocation
// API-DEMO page/API/get-location/get-location.js
import formatLocation from './format-location.js';


Page({
  data: {
    hasLocation: false,
  },
  getLocation() {
    var that = this;
    my.showLoading();
    my.getLocation({
      success(res) {
        my.hideLoading();
        console.log(res)
        that.setData({
          hasLocation: true,
          location: formatLocation(res.longitude, res.latitude)
        })
      },
      fail() {
        my.hideLoading();
        my.alert({ title: '定位失败' });
      },
    })
  },
  clear() {
    this.setData({
      hasLocation: false
    })
  }
})
/* API-DEMO page/API/get-location/get-location.acss */
.page-body-info {
  height: 250rpx;
}
.page-body-text-small {
  font-size: 24rpx;
  color: #000;
  margin-bottom: 100rpx;
}
.page-body-text-location {
  display: flex;
  font-size: 50rpx;
}
.page-body-text-location text {
  margin: 10rpx;
}

入参

Object 类型,属性如下:

属性 类型 必填 描述
cacheTimeout Number 否 支付宝客户端经纬度定位缓存过期时间,单位为秒。默认 30 秒(s)。使用缓存会加快定位速度,缓存过期会重新定位。
type Number 否 获取经纬度数据的类型。默认值为 0。最低基础库版本限制为 1.1.1。0:获取经纬度。1:获取经纬度和详细到区县级别的逆地理编码数据。2:获取经纬度和详细到街道级别的逆地理编码数据,不推荐使用。(不推荐使用的原因:精度过高,接口返回的速度会变慢。)3:获取经纬度和详细到POI级别的逆地理编码数据,不推荐使用。(不推荐使用的原因:精度过高,接口返回的速度会变慢。)
success Function 否 调用成功的回调函数。
fail Function 否 调用失败的回调函数。
complete Function 否 调用结束的回调函数(调用成功、失败都会执行)。

success 回调函数
属性 类型 描述
longitude String 经度
latitude String 纬度
accuracy String 精确度,单位米 (m)。
horizontalAccuracy String 水平精确度,单位为米 (m)。
country String 国家(type>0生效)。最低基础库版本限制为 1.1.1。
countryCode String 国家编号 (type>0生效)。最低基础库版本限制为 1.1.1。
province String 省份(type>0生效)。最低基础库版本限制为 1.1.1。
city String 城市(type>0生效)。最低基础库版本限制为 1.1.1。
cityAdcode String 城市级别的地区代码(type>0生效)。最低基础库版本限制为 1.1.1。
district String 区县(type>0生效)。最低基础库版本限制为 1.1.1。
districtAdcode String 区县级别的地区代码(type>0生效)。最低基础库版本限制为 1.1.1。
streetNumber Object 需要街道级别逆地理的才会有的字段,街道门牌信息,结构是:{street, number} (type>1生效)。最低基础库版本限制为 1.1.1。
pois Array 需要 POI (Point of Interest,兴趣点,在地理信息系统中,一个 POI 可以是一栋房子、一个商铺、一个邮筒、一个公交站等)级别的地理位置才会有的字段,定位点附近的 POI 信息,结构是:{name, address}(type>2生效)。最低基础库版本限制为 1.1.1。

错误码

错误码 描述 解决方案
11 请确认定位相关权限已开启。 提示用户确认手机是否已给支付宝 APP 获取定位权限。
12 网络异常,请稍后再试。 提示用户检查当前网络。
13 定位失败,请稍后再试。 提示用户再次尝试。
14 业务定位超时。 提示用户再次尝试。
2001 用户拒绝给小程序授权。 提示用户接受小程序授权。

常见问题 FAQ

Q:my.getLocation 第一次允许授权后删除小程序应用,重新打开会需要重新授权吗?

A:需要重新授权,删除小程序应用后会将获取定位的授权关系一起删除。

my.openLocation

简介

my.openLocation 是使用支付宝内置地图查看位置的 API。

使用限制

  • 暂无境外地图数据,在中国内地(不含港澳台)以外的地区可能无法正常调用此 API。
  • 仅支持高德地图 style 与火星坐标系。

扫码体验

支付宝查看位置.jpeg

效果示例

openlocation.gif

示例代码

// API-DEMO page/API/open-location/open-location.json
{
    "defaultTitle": "查看位置"
}
<!-- API-DEMO page/API/open-location/open-location.axml-->
<view class="page">
  <view class="page-section">
    <view class="page-section-demo">
      <text>经度</text>
      <input type="text" disabled="{{true}}" value="{{longitude}}" name="longitude"></input>
    </view>
    <view class="page-section-demo">
      <text>纬度</text>
      <input type="text" disabled="{{true}}"  value="{{latitude}}" name="latitude"></input>
    </view>
    <view class="page-section-demo">
      <text>位置名称</text>
      <input type="text" disabled="{{true}}"  value="{{name}}" name="name"></input>
    </view>
    <view class="page-section-demo">
      <text>详细位置</text>
      <input type="text" disabled="{{true}}"  value="{{address}}" name="address"></input>
    </view>
    <view class="page-section-btns">
      <view type="primary" formType="submit" onTap="openLocation">查看位置</view>
    </view>
  </view>
</view>
// API-DEMO page/API/open-location/open-location.js
Page({
  data: {
    longitude: '120.126293',
    latitude: '30.274653',
    name: '黄龙万科中心',
    address: '学院路77号',
  },


  openLocation() {
    my.openLocation({
      longitude: this.data.longitude,
      latitude: this.data.latitude,
      name: this.data.name,
      address: this.data.address,
    })
  }
})

入参

Object 类型,属性如下:

属性 类型 必填 描述
longitude String 是 经度。
latitude String 是 纬度。
name String 是 位置名称。
address String 是 地址的详细说明。
scale Number 否 缩放比例,范围 3~19,默认为 15。
success Function 否 调用成功的回调函数。
fail Function 否 调用失败的回调函数。
complete Function 否 调用结束的回调函数(调用成功、失败都会执行)。