小程序如何定位所在城市及发起周边搜索


Posted in Javascript onFebruary 11, 2020

request封装

为小程序get/post的promise封装

rq.js

/*
 * url {String} 请求地址接口 
 * data {Object} 请求参数 
 * param {Object} request参数
 * method {String} 指定使用post或者是get方法
*/
export function request(url, data={}, param={}, method='POST') {
 return new Promise((resolve, reject)=>{
  let postParam = {
   url, 
   method,
   data,
   // timeout
   // dataType
   // responseType
   header: {
    'content-type': 'application/json' // 默认值
   },
   success(res) {
    resolve(res)
   },
   error: function (e) {
    reject(e)
   }
  }
  postParam = Object.assign(postParam, param)
  postParam.fail = postParam.error
  if (postParam.url) wx.request(postParam)
 })
}

module.exports = {
 get(url, data, param){
  return request(url, data={}, param={}, method='GET')
 },
 
 post(){
  return request.apply(null, arguments)
 }
}

位置服务方法

需要开通小程序的位置服务功能,在小程序控制台

小程序如何定位所在城市及发起周边搜索

简单的封装了三个位置服务的方法

  • 所在地城市
  • 地区搜索
  • 范围搜索
// request的promise封装
const iKit = request('./rq.js') 

// key为开通位置服务所获取的查询值
// 下面这个key是随便写的
let key = 'JKDBZ-XZVLW-IAQR8-OROZ1-XR3G9-UYBD5'

/*
 * 搜索地区... 
 * 搜索地区的商圈, 如搜索 kfc 广州市
 * key {String} 搜索内容 
 * region {String} 搜索区域 
*/
export function searchRegion(kw, region) {
 let opts = {
  keyword: encodeURI(kw),
  boundary: region ? `region(${encodeURI(region)}, 0)` : '', // 0 为限定范围搜搜索,1为开放范围搜素偶
  page_size: 10, // 搜索结果分页最大条数
  page_index: 1, // 指定分页
  key
 }

 return new Promise((resolve, rej)=>{
  iKit.get('https://apis.map.qq.com/ws/place/v1/search', opts).then(res=>{
   resolve(res.data.data)
  })
 })
}

/*
 * 搜索附近的... 
 * 以当前位置的经纬度搜索附近商圈,如附近的酒店,快餐等等
 * key {String} 搜索内容 
 * params {Object} 搜索参数 包含三个参数 lat纬度,lng经度,distance范围(单位米) 
*/
export function searchCircle(kw, params={}) {
 let {lat, lng, distance} = params
 if (!lat && !lng) return 
 if (!distance) distance = 1000 // 搜索范围默认1000米
 let opts = {
  keyword: encodeURI(kw),
  boundary: `nearby(${lat},${lng},${distance})`,
  orderby: '_distance', // 范围搜索支持排序,由近及远 
  page_size: 20, // 搜索结果分页最大条数 
  page_index: 1, // 指定分页 
  key
 }

 return new Promise((resolve, rej)=>{
  iKit.get('https://apis.map.qq.com/ws/place/v1/search', opts).then(res=>{
   resolve(res.data.data)
  })
 })
}

// 所在地的城市,省份等区域信息
/*
 * 所在地的城市,省份等区域信息 
 * 如当前地址所在省份、城市 
 * lat {Number} 纬度
 * lng {Number} 经度 
*/
export function myCity(lat, lng) {
 return new Promise((resolve, rej)=>{
  let opts = {
   location: `${lat},${lng}`,
   key
  }
  
  iKit.get(`https://apis.map.qq.com/ws/geocoder/v1/`, opts).then(res => {
   resolve(res.data.result)
  })
 })
}

调用

wx.getLocation({
  type: 'wgs84',
  success(location) {
   locationPosition = location
   
   // 所在地信息
   myCity(location.latitude, location.longitude).then(res => {
    let myCityInfo = res.ad_info
    let {city, nation, province, city_code, adcode} = myCityInfo
    console.log({title: `国家: ${nation},省份: ${province},城市: ${city}`})
   })
   
   // 附近搜索
   searchCircle('快餐', {
    lat: location.latitude,
    lng: location.longitude,
    distance: 500
   }).then(res=>{
    console.log(res)
   })
   
   // 地区搜索
   searchRegion('酒店', '广州').then(res=>{
    console.log(res)
   })
  }
})

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

Javascript 相关文章推荐
浅谈jQuery 中的事件冒泡和阻止默认行为
May 28 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
Angular.js跨controller实现参数传递的两种方法
Feb 20 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
vue自定义filters过滤器
Apr 26 Javascript
深入浅析Vue.js计算属性和侦听器
May 05 Javascript
vue ssr 指南详读
Jun 29 Javascript
vue实现动态显示与隐藏底部导航的方法分析
Feb 11 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
JS+DIV实现拖动效果
Feb 11 #Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 11 #Javascript
原生js拖拽实现图形伸缩效果
Feb 10 #Javascript
js实现单元格拖拽效果
Feb 10 #Javascript
详解Vue template 如何支持多个根结点
Feb 10 #Javascript
JavaScript canvas动画实现时钟效果
Feb 10 #Javascript
JavaScript canvas仿代码流瀑布
Feb 10 #Javascript
You might like
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
js实现点击链接后窗口缩小并居中的方法
2015/03/02 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
2019/04/08 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
JS实现给数组对象排序的方法分析
2019/06/24 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
python简单实现刷新智联简历
2016/03/30 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
python中partial()基础用法说明
2018/12/30 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python使用requests.session模拟登录
2019/08/09 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
如何使用localstorage代替cookie实现跨域共享数据问题
2018/04/18 HTML / CSS
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
大学生活学习的自我评价
2013/12/03 职场文书
采购内勤岗位职责
2013/12/10 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
Netty结合Protobuf进行编解码的方法
2021/06/26 Java/Android
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL