前了个端我爱编程

微信小程序地图之逆地理编码

2018-05-29  本文已影响22人  刘勇虎

首先说一下,我微信自带map的api中并没有相关接口可调用。文中的方法建立于高德地图。(顺便吐槽,微信开发文档相比支付宝家的显得好烂!)

最近做项目用到地图定位相关的需求,为了搞定需求看了下相关的文档。最后选择高德地图小程序api,腾讯、百度地图应该也可以并且相似但是我没有深入研究。

首先看到的是逆地理编码的api,看到注释不免小小的兴奋了一下。
看图不要看我
但是看到了api,瞬间感觉不和谐,指定位置在哪呢?怎么传入经纬度?
看图不要看我
最后研究高德插件的js文件的方法,提取出了相关方法:
AMapWX.prototype.getRegeo = function(a) {
    function c(c) {
        var d = b.requestConfig;
        wx.request({
            url: "https://restapi.amap.com/v3/geocode/regeo",
            data: {
                key: b.key,
                location: c,
                extensions: "all",
                s: d.s,
                platform: d.platform,
                appname: b.key,
                sdkversion: d.sdkversion,
                logversion: d.logversion
            },
            method: "GET",
            header: {
                "content-type": "application/json"
            },
            success: function(b) {
                var d, e, f, g, h, i, j, k, l;
                b.data.status && "1" == b.data.status ? (d = b.data.regeocode, e = d.addressComponent, f = [], g = "", d && d.roads[0] && d.roads[0].name && (g = d.roads[0].name + "附近"), h = c.split(",")[0], i = c.split(",")[1], d.pois && d.pois[0] && (g = d.pois[0].name + "附近", j = d.pois[0].location, j && (h = parseFloat(j.split(",")[0]), i = parseFloat(j.split(",")[1]))), e.provice && f.push(e.provice), e.city && f.push(e.city), e.district && f.push(e.district), e.streetNumber && e.streetNumber.street && e.streetNumber.number ? (f.push(e.streetNumber.street), f.push(e.streetNumber.number)) : (k = "", d && d.roads[0] && d.roads[0].name && (k = d.roads[0].name), f.push(k)), f = f.join(""), l = [{
                    iconPath: a.iconPath,
                    width: a.iconWidth,
                    height: a.iconHeight,
                    name: f,
                    desc: g,
                    longitude: h,
                    latitude: i,
                    id: 0,
                    regeocodeData: d
                }], a.success(l)) : a.fail({
                    errCode: b.data.infocode,
                    errMsg: b.data.info
                })
            },
            fail: function(b) {
                a.fail({
                    errCode: "0",
                    errMsg: b.errMsg || ""
                })
            }
        })
    }
    var b = this;
    a.location ? c(a.location) : b.getWxLocation(a, function(a) {
        c(a)
    })
}
提取出的方法如下
                                wx.request({
                                        url: 'https://restapi.amap.com/v3/geocode/regeo',
                                        data: {
                                                key: key,
                                                location: that.data.longitude + "," + that.data.latitude ,
                                                extensions:"all",
                                                s:"rsx",
                                                sdkversion:"sdkversion",
                                                logversion:"logversion"
                                                
                                        },
                                        success: function (res) {
                                                that.setData({
                                                        textData: {
                                                                name: res.data.regeocode.pois[0].name,
                                                                desc: res.data.regeocode.formatted_address
                                                        }
                                                })
                                                console.log(JSON.stringify(res.data.regeocode.formatted_address));
                                        },
                                        fail: function (res) {

                                        }
                                })

   
   
高德地图demo地址
   
   
   

友情链接:

技术博客        简书主页

上一篇下一篇

猜你喜欢

热点阅读