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


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 相关文章推荐
javascript 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
通过判断JavaScript的版本实现执行不同的代码
May 11 Javascript
JS对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
Javascript的严格模式strict mode详细介绍
Jun 06 Javascript
JavaScript获取DOM元素的11种方法总结
Apr 25 Javascript
聊一聊jQuery插件uploadify使用方法
Aug 24 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
vue-hook-form使用详解
Apr 07 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
Aug 12 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
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读取IMAP邮件
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
PHP 日常开发小技巧
2009/09/23 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
自制PHP框架之设计模式
2017/05/07 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
特殊情况下如何获取span里面的值
2014/05/20 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
SVG描边动画
2017/02/23 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
详解在Python程序中使用Cookie的教程
2015/04/30 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python正则简单实例分析
2017/03/21 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
使用Python构造hive insert语句说明
2020/06/06 Python
python初步实现word2vec操作
2020/06/09 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
自考生毕业自我鉴定
2013/10/10 职场文书
小学数学教学反思
2014/02/02 职场文书
关于爱国的标语
2014/06/24 职场文书
出国签证在职证明范本
2014/11/24 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
分享五个Node.js开发的优秀实践 
2022/04/07 NodeJs
python中使用redis用法详解
2022/12/24 Redis