在微信小程序的项目开发中,我们需要定位用户的位置,

而微信小程序内置了可以获取用户经纬度的函数:

1
2
3
4
5
6
7
8
9
wx.getLocation({
type: 'wgs84',
success (res) {
const latitude = res.latitude
const longitude = res.longitude
const speed = res.speed
const accuracy = res.accuracy
}
})

其中latitudelongitude分别是经度和纬度。但是仅凭经纬度无法到达定位城市的效果,必须借助第三方地图商的API,如高德、百度、腾讯等等。

腾讯地图定位城市API

推荐使用腾讯地图,毕竟跟微信小程序是一家的。

注册腾讯地图API平台

直接注册就行,注册好后在控制台=>应用管理=>我的应用里添加一个应用并获取一个KEY

接下来需要到配额管理中分配额度,个人用户每天有5000条api请求额度,需要分配到不同的请求单位,不然每天只能请求一次

这里我把全部额度分配给了IP定位,因为我暂时只使用这一个API模块

IP定位接口

城市定位是最简单的一个API,就是一个简单的GET请求

url:https://apis.map.qq.com/ws/location/v1/ip

请求参数

参数 必填 说明 示例
key 开发密钥(Key) key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-*****
ip IP地址,缺省时会使用请求端的IP ip=111.206.145.41
output 返回格式:支持JSON/JSONP,默认JSON output=json
callback JSONP方式回调函数 callback=function1

响应结果

名称 类型 必有 说明
status number 状态码,0为正常,其它为异常,详细请参阅状态码说明
message string 对status的描述
result object IP定位结果
ip string 用于定位的IP地址
location object 定位坐标。注:IP定位服务精确到市级,该位置为IP地址所属的行政区划政府坐标。
lat number 纬度
lng number 经度
ad_info object 定位行政区划信息
nation string 国家
nation_code number 国家代码(ISO3166标准3位数字码)
province string
city string
district string
adcode number 行政区划代码

调用示例

GET请求,注意参数值要进行URL编码
https://apis.map.qq.com/ws/location/v1/ip?ip=111.206.145.41&key=[你的key]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//响应示例:
{
"status": 0,
"message": "Success",
"result": {
"ip": "111.206.145.41",
"location": {
"lat": 39.90469,
"lng": 116.40717
},
"ad_info": {
"nation": "中国",
"province": "北京市",
"city": "北京市",
"district": "",
"adcode": 110000
}
}
}

微信小程序中的使用

有了第三方api接口,我们就不需要再用内置方法获取经纬度了,但需要注意在微信小程序管理平台上将域名添加上,否则可能获取失败

此外,还需要在app.json中加上

1
2
3
4
5
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
}

来获取用户授权定位

示例代码:

map.wxml

1
<button type="primary" bindtap="getLocation" class="btn">定位</button>

map.js

1
2
3
4
5
6
7
8
9
getLocation: function() {
wx.request({
url:'https://apis.map.qq.com/ws/location/v1/ip?key=PENBZ-C7WK5-C5UIF-IDZWF-ZR6KV-M6BLQ',
method:'get',
success: function(res) {
console.log(res.data.result.ad_info.city);
}
})
}

点击按钮即可获取当前城市名字

注意:当前版本的开发者工具需要安装第三方腾讯插件才能将res打印到控制台上,如果没有安装插件,只能在真机调试中打印查看