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


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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
用JavaScript隐藏控件的方法
Sep 21 Javascript
js 编写规范
Mar 03 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
基于javascript实现listbox左右移动
Jan 29 Javascript
jquery attr()设置和获取属性值实例教程
Sep 25 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
Jan 10 Javascript
js实现交通灯效果
Jan 13 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
Sep 19 Javascript
javascript中闭包closure的深入讲解
Mar 03 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
php判断当前操作系统类型
2015/10/28 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
捕获关闭窗口的脚本
2009/01/10 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
python接口自动化之ConfigParser配置文件的使用详解
2020/08/03 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
物理专业大学生职业生涯规划书
2014/02/07 职场文书
小学生元旦感言
2014/02/26 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
公民授权委托书范本
2014/09/17 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
运动会观后感
2015/06/09 职场文书
《搭石》教学反思
2016/02/18 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技