最近开发一个微信小程序项目的时候有一个需求就是逆地址解析和poi检索,一般来说微信小程序最好还是使用腾讯地图最合适,不会出现奇怪的地理位置偏移什么的。但本着折腾一下的心理去使用高德地图的微信插件,但万万没想到这一下直接掉坑里面去了。

这个坑主要体现在微信使用wx.getLocation()wx.chooseLocation()方法获取到的数据默认来说是纬度经度前面,导致数据直接给高德地图sdk使用,就会在失败的回调中报错误代码20011。然后就去翻高德的错误代码说明,说是”查询坐标或规划点(包括起点、终点、途经点)在海外,但没有海外地图权限”。但是我使用腾讯地图就很正常,那时我就在想有没有可能是单词写错了,但是经过排查发现并不是。于是我就在想有没有可能是经度纬度搞反了,但是我查了网上的帖子都是我这样的写的呀,不过我还是抱着试试的心态将经度纬度互换了一下位置。然后…… 然后……数据就出来了。这就让我很是无语了,于是再去翻看高德的文档最后还是在Web服务API下才看到这么一条信息。

image-20230612185003389

我只想说,“高德,你文档可以写的全一点嘛,我只是想在微信小程序上用上你的逆地址解析,真的犯不着把你的文档全部读一遍吧!”

最后提供一个简单的使用代码

  • 导入全局注册
1
2
3
4
5
6
7
8
9
10
// 导入下载的js文件
import amapFile from '../libs/amap-wx.130'

// 实例化
const amap = new amapFile.AMapWX({
key: '你的key'
})

// 导出实例
export default amap
  • 页面中使用它
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 导入amap
import amap from '../../../utils/amap'

// 自动获取
async getLocation() {
const {
latitude,
longitude
} = await wx.getLocation()
this.reverseGeocoder(latitude, longitude)
},
// 用户选择
async chooseLocation() {
const {
latitude,
longitude
} = await wx.chooseLocation()
this.reverseGeocoder(latitude, longitude)
},


// 逆地址解析
reverseGeocoder(longitude, latitude) {
amap.getRegeo({
// 经度在前,纬度在后
location: `${latitude},${longitude}`,
// 成功的回调
success: (data) => {
console.log('11', data);
this.setData({ address: data[0].name })
// poi
this.setData({ points: data[0].regeocodeData.pois })
},
// 失败的回调
fail: (info) => {
console.log('22', info);
}
})
},