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


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 相关文章推荐
JS URL传中文参数引发的乱码问题
Sep 02 Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
Oct 22 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
jQuery中ajax的load()与post()方法实例详解
Jan 05 Javascript
深入浅析JavaScript中的arguments对象(强力推荐)
Jun 03 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 Javascript
JS获取并处理php数组的方法实例分析
Sep 04 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 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的declare控制符和ticks教程(附示例)
2014/03/21 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
解决Laravel5.5下的toArray问题
2019/10/15 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
python实现根据用户输入从电影网站获取影片信息的方法
2015/04/07 Python
python实现Floyd算法
2018/01/03 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python二元赋值实用技巧解析
2019/10/25 Python
python数值基础知识浅析
2019/11/19 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
strlen的几种不同实现方法
2013/05/31 面试题
几个判断型的面试题
2012/07/03 面试题
大学生入党思想汇报
2014/01/01 职场文书
高校教师自荐信范文
2014/03/13 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
运动会加油稿20字
2014/11/15 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
员工安全责任协议书
2016/03/22 职场文书