因为之前做过微信小程序,对小程序稍微有一些了解,最近一个朋友叫我帮他在他们原有小程序的基础之上新增一些功能,本着学习的态度,那就应下来吧。
这次的需求是获取用户当前的地理位置,做过微信小程序的都知道,原生 API 只给我们提供了wx.getLocation来获取用户当前经纬度,那么要获取地理位置的话,就需要把我们获取到的经纬拿去调用地图服务接口,这里就比较多了,如腾讯、百度、高德、谷歌等,这里我们来对比一下高德和腾讯这种的实现方式。 这里先看看高德怎么给我们说的
![1ed96029647a881850acba9c3e2d21a6.png](https://i-blog.csdnimg.cn/blog_migrate/db201ddea2bfe5e47f5ca278a4975ca8.jpeg)
其他的就不说了,我们还是先去申请一个 key 吧
![ee945717f95637b9808f5e0d23e12f3c.png](https://i-blog.csdnimg.cn/blog_migrate/1f67486b95ade20a7a8a88eddaf97f79.jpeg)
然后按照官网说的,下载相应的 js sdk 解压放置对应的目录中
我们继续来看看腾讯地图
![0c4379e0771538ac875d91cfabd52f2d.png](https://i-blog.csdnimg.cn/blog_migrate/12cac83d9bd2bd801500e313a8046c8d.jpeg)
方式和高德其实也是类似,需要去申请 key
![94a150eb6c31685fa9376edf99f7e388.png](https://i-blog.csdnimg.cn/blog_migrate/ab5dcb3251ade6eb9288c4f54646d405.jpeg)
这里需要按照文档中的说明,勾选webserviceAPI,然后也是下载相应的 js sdk,
现在就来一起编码啦,这里我的根目录有一个小小的配置文件,名叫config.json
const Config = {qqMapKey: 'VJYBZ-B2Q35-7XVIU-QFBM3-NDV77-FTFBO',AMapkey:'bdd6ce34b877d456eb16370a8b129964'}module.exports = Config;
在utils文件夹下新家一个util.js文件,这就开始撸代码
const Config = require('../config.js');const QQMapWX = require("./qqmap-wx-jssdk.min.js");const AMap=require("./amap-wx.js");const getAddressByCoord = (lng, lat) => { let qqmapsdk = new QQMapWX({ key: Config.qqMapKey // 必填 }); return new Promise((resolve, reject) => { qqmapsdk.reverseGeocoder({ location: { latitude: lat, longitude: lng }, success: (addressRes) => { if (addressRes.status !== 0) { reject(addressRes); return; } resolve(addressRes); }, fail: (err) => { reject(err); console.error(err); } }) })}const getAmapAddress=() => { console.log(Config.AMapkey); let amapsdk = new AMap.AMapWX({key: Config.AMapkey}); return new Promise((resolve, reject) => { amapsdk.getRegeo({ success: (addressRes) => { resolve(addressRes); }, fail: (err) => { reject(err); console.error(err); } }) })}module.exports = { getCoordinate, getAmapAddress}
这里我把amap-wx.js和qqmap-wx-jssdk.min.js文件都放在utils文件夹中,接下来新建一个页面来调用两个地图
onLoad: function (options) { let that = this; /**腾讯接口需要先获取经纬度 */ wx.getLocation({ type: 'wgs84', success: res => { utils.getAddressByCoord(res.longitude, res.latitude).then(addressRes => { let address = addressRes.result.address_component; console.log(address); that.setData({ qqAddress: address.street_number }); }).catch(err => { wx.showToast({ title: '经纬度转换地址失败', icon: 'none', }) }) }, fail: res => { wx.showModal({ title: '提示', content: '授权获取地理位置失败', }) } }); /**高德地图直接获取 */ utils.getAmapAddress().then(addrData => { console.log(addrData) that.setData({ amapAddress: addrData[0].name }); }).catch(() => {}); }
在运行前要记得前往微信小程序后去把这两个地址加上
![131da46045bbc63545dc77d9db4be83d.png](https://i-blog.csdnimg.cn/blog_migrate/6bad5bff46c5b8bc7a27b01572c51989.jpeg)
然后在运行
![cf777409b9eaa5c7fe97c052025d6f8c.png](https://i-blog.csdnimg.cn/blog_migrate/8f252b70b9811c5925a877afb1e119ce.jpeg)
因为这是在电脑上运行的,所以离我的位置偏差比较大,我们用手机来看看
![735af19fde33ea7d2971305abd30cb8a.png](https://i-blog.csdnimg.cn/blog_migrate/e81c3f31d7483437460ccb8714d87589.jpeg)
我只是记录我的学习过程,由于书读得少,可能很多地方表述或者是理解得不对,请轻喷并指正。