腾讯地图类快递自动填写收发货地址功能

开发场景

获取当前位置信息或者某地的行政区划信息或者街道信息,实现类似电商平台填写收货地址功能。

技术选型

微信小程序JavaScript SDK

微信小程序插件

确定业务逻辑及页面设计

以简洁大气为主,样式选择weui。

image.png

详细开发过程

1、首先注册小程序,我以前有就没重新申请。

2、注册腾讯位置服务开发者

需要注意的是:个人开发者接口调用数是有限额的,免费额度1W,并发数5,申请成为企业用户可免费提升更大配额。

3、根据文档开发。

文档写的比较全,很多地方都是例子,不过需要注意以下几个点:

1)reverseGeocoder接口返回数据和文档不一致,需要根据实际返回值编写,另外有些字段在返回值中不一定有,最好用hasOwnProperty进行判断后赋值。

2)实际上文档有点乱,需要查看多个地方的文档。

文档参考地址:

https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html

https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview

JS代码

//index.js
//获取应用实例
const app = getApp()
const chooseLocation = requirePlugin('chooseLocation');
var QQMapWX = require('../../utils/qqmap-wx-jssdk.min.js');
var qqmapsdk = new QQMapWX({
  key: '申请的Key'
});
 
Page({
  data: {
    recommend:'无地址信息',
    address:'无地址信息',
    name:'无区划信息',
    adcode:'无代码信息',
    business_area_title:'无商圈信息',
    crossroad_title:'无路口信息',
    town:'无街道信息',
    jingweidu:'无经纬度信息',
    landmark:'无附近地标',
  },
  onShareAppMessage: function (res) {
    if (res.from === 'button') {
      // 来自页面内转发按钮
      console.log(res.target)
    }
    return {
      title: '行政区划、街道信息查询',
      path: '/page/index/index'
    }
  },
  onShareTimeline: function(){
    return {
      title: '行政区划、街道信息查询',
    }
  },
  onLoad: function () {
     // 实例化API核心类
      wx.getSetting({
        success: (res) => {
          // res.authSetting['scope.userLocation'] == undefined    表示 初始化进入该页面
          // res.authSetting['scope.userLocation'] == false    表示 非初始化进入该页面,且未授权
          // res.authSetting['scope.userLocation'] == true    表示 地理位置授权
          if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
            wx.showModal({
              title: '请求授权当前位置',
              content: '需要获取您的地理位置,请确认授权',
              success: function (res) {
                if (res.cancel) {
                  wx.showToast({
                    title: '拒绝授权',
                    icon: 'none',
                    duration: 1000
                  })
                } else if (res.confirm) {
                  wx.openSetting({
                    success: function (dataAu) {
                      if (dataAu.authSetting["scope.userLocation"] == true) {
                        wx.showToast({
                          title: '授权成功',
                          icon: 'success',
                          duration: 1000
                        })
                        //再次授权,调用wx.getLocation的API
                        this.getLocation();
                      } else {
                        wx.showToast({
                          title: '授权失败',
                          icon: 'none',
                          duration: 1000
                        })
                      }
                    }
                  })
                }
              }
            })
          } else if (res.authSetting['scope.userLocation'] == undefined) {
            //调用wx.getLocation的API
            this.getLocation();
          }
          else {
            //调用wx.getLocation的API
            this.getLocation();
          }
        }
      })
  },
  getLocation: function(){
    var vm = this;
    wx.getLocation({
      type:'gcj02',
      success: function(res){
          app.globalData.latitude=res.latitude;
          app.globalData.longitude=res.longitude;
          vm.getaddressinfo();
      },
      fail:function(res){
        console.log("获取经纬度失败"+JSON.stringify(res))
      }
    })
  },
  onShow: function(){
    var vm = this;
    const location = chooseLocation.getLocation();
    if(location!=null){
      app.globalData.latitude=location.latitude;
      app.globalData.longitude=location.longitude;
      this.getaddressinfo();
    }
  },
  getaddressinfo: function(){
    let vm = this;
    qqmapsdk.reverseGeocoder({
      location: {
        latitude:  app.globalData.latitude,
        longitude: app.globalData.longitude
      },
      get_poi: 1, //是否返回周边POI列表:1.返回;0不返回(默认),非必须参数
      success: function(res) {//成功后的回调
        var result = res.result;
        //推荐地址
        app.globalData.recommend = result.formatted_addresses.recommend;
        // 行政区划 name    
        app.globalData.name = result.ad_info.name;
        //常规地址 address 
        app.globalData.address = result.address;
        //行政区划代码 adcode 
        app.globalData.adcode = result.ad_info.adcode;
 
        if(result.address_reference.hasOwnProperty("business_area")){
          //商圈 business_area_title
          app.globalData.business_area_title = result.address_reference.business_area.title+" "+result.address_reference.business_area._dir_desc;
        }
 
        if(result.address_reference.hasOwnProperty("crossroad")){
        //路口 crossroad_title
          app.globalData.crossroad_title = result.address_reference.crossroad.title+" "+result.address_reference.crossroad._dir_desc;
        }
        //街道
        if(result.address_reference.hasOwnProperty("town")){
          //路口 crossroad_title
            app.globalData.town = result.address_reference.town.title+" "+result.address_reference.town._dir_desc;
          }
        if(result.address_reference.hasOwnProperty("landmark_l2")){
            app.globalData.landmark = result.address_reference.landmark_l2.title;
        }
        if(result.address_reference.hasOwnProperty("landmark_l1")){
            app.globalData.landmark = result.address_reference.landmark_l1.title;
        }
        vm.setData({
          recommend: result.formatted_addresses.recommend,
          name: result.ad_info.name,
          address: result.address,
          adcode: result.ad_info.adcode,
          business_area_title: app.globalData.business_area_title,
          crossroad_title: app.globalData.crossroad_title,
          town: app.globalData.town,
          jingweidu: result.location.lat+", "+result.location.lng,
          landmark: app.globalData.landmark,
        });
 
 
      },
      fail: function(error) {
        console.error(error);
      },
      complete: function(res) {
       // console.log(res);
      }
    })
  },
  onUnload () {
    // 页面卸载时设置插件选点数据为null,防止再次进入页面,geLocation返回的是上次选点结果
    chooseLocation.setLocation(null);
},
  getUserInfo: function(e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  },
  change: function(){
    const key = '使用在腾讯位置服务申请的key'; 
    const referer = '这是哪'; //调用插件的app的名称
    const location = JSON.stringify({
      latitude: app.globalData.latitude,
      longitude: app.globalData.longitude
    });
    const category = '生活服务,娱乐休闲';
    wx.navigateTo({
      url: 'plugin://chooseLocation/index?key=' + key + '&referer=' + referer + '&location=' + location + '&category=' + category
    });
  },
})

效果

image.png

作者:w_boyang

链接:https://blog.csdn.net/qq_34136569/article/details/111281654

来源:CSDN

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容