小程序获取当前位置加搜索附近热门小区及商区的方法


Posted in Javascript onApril 08, 2019

本文详细的介绍了小程序获取当前位置加搜索附近热门小区及商区的方法,分享给大家

两种方法:一种是腾讯地图获取,另一种是百度地图获取

我用的是腾讯地图获取步骤如下

小程序获取当前位置加搜索附近热门小区及商区的方法

1、话不多说,直接上干货

实现上图效果,主要技术是获取微信小程序地理位置,得到经纬度,使用微信小程序JavaScript SDK逆地址解析和地点搜索实现

2、微信小程序JavaScript SDK

申请开发者密钥(key):https://lbs.qq.com/qqmap_wx_jssdk/method-reverseGeocoder.html手机号注册即可使用。

下载微信小程序JavaScriptSDK,微信小程序JavaScriptSDK v1.0 下载完成后放入utils文件夹下引用即可

安全域名设置,在“设置” -> “开发设置”中设置request合法域名,添加https://apis.map.qq.com

小程序获取当前位置加搜索附近热门小区及商区的方法

3.详细代码

<view >
   <!-- 搜索框 -->
 <view class='search'>
  <view class='search_box'>
   <image src='../../../images/search.png' class='search_image'></image>
   <input type='text' confirm-type="search" class='search_input' placeholder='搜索地点' placeholder-class='input_placeholder' bindinput="bindInputSchool" ></input>
  </view>
 </view>

 <view class='btn1' bindtap='BackTap2'>
  不显示位置
 </view>
 <view class='btn2' wx:for="{{pois}}" wx:key="" bindtap='BackTap' data-item='{{index}}'>
   <view >{{item.title}}</view>
   <view class='hint'>{{item.address}}</view>
 </view>
</view>
//获取应用实例
const app = getApp();
var timer = false;
var QQMapWX = require('../../../utils/qqmap-wx-jssdk.js');
var qqmapsdk;
Page({
 data: {
  statusBarHeight: getApp().globalData.statusBarHeight,
  page:1,
  pois:[]
 },
 //返回按钮
 BackTap: function (e) {
  // console.log(this.data.lists[e.currentTarget.dataset.item])
  app.globalData.addAddr=[]
  app.globalData.addAddr.push(this.data.pois[e.currentTarget.dataset.item])
  wx.navigateBack({
   delta: 1
  })
 },
 BackTap2: function (e) {
  // console.log(this.data.lists[e.currentTarget.dataset.item])
  app.globalData.addAddr=[]
  wx.navigateBack({
   delta: 1
  })
 },
 backTap3:function(){
  wx.navigateBack({
   delta: 1
  })
 },
 onLoad: function () {
  qqmapsdk = new QQMapWX({
   key: 'IOJBZ-VOT3Q-2G55W-G5FJ2-7UIKH-6JBGU'
  });
 },
 onShow: function () {
  let vm = this;
  vm.getUserLocation();
 },
 getUserLocation: function () {
  let vm = this;
  wx.getSetting({
   success: (res) => {
    console.log(JSON.stringify(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
        })
        vm.BackTap2()
       } 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
           vm.getLocation();
          } else {
           wx.showToast({
            title: '授权失败',
            icon: 'none',
            duration: 1000
           })
           vm.BackTap2()
          }
         }
        })
       }
      }
     })
    } else if (res.authSetting['scope.userLocation'] == undefined) {
     //调用wx.getLocation的API
     vm.getLocation();
    }
    else {
     //调用wx.getLocation的API
     vm.getLocation();
    }
   }
  })
 },
 // 微信获得经纬度
 getLocation: function () {
  let vm = this;
  wx.getLocation({
   type: 'wgs84',
   success: function (res) {
    console.log(JSON.stringify(res),'获得经纬度')
    var latitude = res.latitude
    var longitude = res.longitude
    vm.setData({
     latitude: latitude,
     longitude: longitude
    })
    vm.getLocal(latitude, longitude)
   },
   fail: function (res) {
     vm.BackTap2()
   }
  })
 },
 // 获取当前地理位置
 getLocal: function (latitude, longitude) {
  let vm = this;
  wx.showLoading({
   title: '加载中',
  })
  qqmapsdk.reverseGeocoder({
   location: {
    latitude: latitude,
    longitude: longitude,
   },
   coord_type:1,
   get_poi: 1,
   poi_options: 'page_size=20;page_index='+vm.data.page,
   success: function (res) {
    console.log(res,'地理位置');
    wx.hideLoading()
    let pois = res.result.pois
    vm.setData({
     pois: vm.data.pois.concat(pois),
    })

   },
   fail: function (res) {
    console.log(res);
   },
   complete: function (res) {
    // console.log(res);
   }
  });
 },
 //根据坐标查询位置
 bindInputSchool(e) {
  var val = e.detail.value;
  let vm = this
  clearTimeout(timer);
  timer = setTimeout(function () {
   if(val.length>0){
    qqmapsdk.search({
     keyword: val , //搜索关键词
     location: {
      latitude: vm.data.latitude,
      longitude: vm.data.longitude,
     }, 
     page_size:20,
     success: function (res) {
      console.log(res, '搜索位置');
      let pois = res.data
      vm.setData({
       pois: pois,
      })
     },
    });
   }else{
    vm.setData({
     pois:[],
    })
    vm.getLocal(vm.data.latitude, vm.data.longitude)
   }

  }, 500);
 },
 onReachBottom:function(){
  let vm = this;
  vm.setData({
   page:vm.data.page+1
  })
  vm.getLocal(vm.data.latitude, vm.data.longitude)
 },
})

这样就一步一步实现了微信地理位置选择

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
Mar 18 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
js调用iframe实现打印页面内容的方法
Mar 04 Javascript
常见的原始JS选择器使用方法总结
Apr 09 Javascript
js中的getAttribute方法使用示例
Aug 01 Javascript
使用百度地图api实现根据地址查询经纬度
Dec 11 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
Mar 31 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
js实现秒表计时器
Dec 16 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
Jul 15 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 #Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 #Javascript
面试题:react和vue的区别分析
Apr 08 #Javascript
vue router 组件的高级应用实例代码
Apr 08 #Javascript
JavaScript中的一些实用小技巧总结
Apr 07 #Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 #Javascript
JavaScript数组去重的几种方法
Apr 07 #Javascript
You might like
php函数的常用方法及注意之处小结
2011/07/10 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP获取文件行数的方法
2015/06/10 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Ajax基础知识详解
2017/02/17 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
js判断是否是手机页面
2017/03/17 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
安全生产汇报材料
2014/02/17 职场文书
安全生产月宣传标语
2014/10/06 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python