weapp原生开发-逆地理解析坐标定位

话不多说,直接上手开发

拿到经纬度

微信小程序中提供了三个小程序获取定位的方式

wx.chooseLocation // 打开地图查看位置
wx.getLocation // 获取当前的位置
wx.openLocation // 试用地图查看当前位置

如果只是做定位的话,推荐用第二种wx.getLocation,在成功回调中只能拿到经纬度

逆地理解析

我们还需要做逆地理解析,这里试用腾讯地图做展示

https://lbs.qq.com/console/mykey.html

增加key的配置,我们主要试用的是webServive的功能

key的设置信息:
屏幕快照 2018-12-17 下午1.54.27

注意白名单里面的域名一定要填写

webService配置

https://lbs.qq.com/webservice_v1/guide-gcoder.html

请求URL:

https://apis.map.qq.com/ws/geocoder/v1
请求参数
参数 必填 说明 示例
location 位置坐标,格式: location=lat<纬度>,lng<经度> location= 39.984154,116.307490
get_poi 是否返回周边POI列表: 1.返回;0不返回(默认) get_poi=1
poi_options 用于控制POI列表: 1 poi_options=address_format=short 返回短地址,缺省时返回长地址 2 poi_options=radius=5000 半径,取值范围 1-5000(米) 3 poi_options=page_size=20 每页条数,取值范围 1-20 4 poi_options=page_index=1 页码,取值范围 1-20 注:分页时page_size与page_index参数需要同时使用 5 poi_options=policy=1/2/3/4/5 控制返回场景, policy=1[默认] 以地标+主要的路+近距离POI为主,着力描述当前位置; policy=2 到家场景:筛选合适收货的POI,并会细化收货地址,精确到楼栋; policy=3 出行场景:过滤掉车辆不易到达的POI(如一些景区内POI),增加道路出入口、交叉口、大区域出入口类POI,排序会根据真实API大用户的用户点击自动优化。 policy=4 社交签到场景,针对用户签到的热门地点进行优先排序。 policy=5 位置共享场景,用户经常用于发送位置、位置分享等场景的热门地点优先排序 6 poi_options=category=分类词1,分类词2, 指定分类,多关键词英文逗号分隔; (支持类别参见:附录) 【单个参数写法示例】: poi_options=address_format=short 【多个参数英文分号间隔,写法示例】: poi_options=address_format=short;radius=5000; page_size=20;page_index=1;policy=2
key 开发密钥(Key) key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
output 返回格式:支持JSON/JSONP,默认JSON output=json
callback JSONP方式回调函数 callback=function1

最后献上完成的函数功能

fetchLocation () {
      wx.getLocation({
        type: 'wgs84',
        altitude: false,
        success: res => {
          var locationString = res.latitude + ',' + res.longitude
          wx.request({
            url: 'https://apis.map.qq.com/ws/geocoder/v1',
            method: 'GET',
            data: {
              'key': 'Y7WBZ-GEZ3X-V634Z-ZR5HB-ZTY4F-YBFGA',
              'location': locationString,
              'get_poi': 1
            },
            header: 'application/x-www-form-urlencoded',
            success: (res) => {
              console.log('您当前在' + res.data.result.address)
            },
            fail: () => {
              console.log('获取地址失败')
            }
          })
        }
      })
    }