微信小程序城市定位的实现实例(获取当前所在国家城市信息)


Posted in Javascript onMay 17, 2017

前言

在微信小程序中,我们可以通过调用wx.getLocation()获取到设备当前的地理位置信息,这个信息是当前位置的经纬度。如果我们想获取当前位置是处于哪个国家,哪个城市等信息,该如何实现呢?

实现方法

微信小程序中并没有提供这样的API,但是没关系,有wx.getLocation()得到的经纬度作为基础就够了,其他的,我们可以使用其他第三方地图服务可以来实现,比如腾讯地图或百度地图的API。

以腾讯地图为例,我们可以去腾讯地图开放平台注册一个账号,然后在它的管理后台创建一个密钥(key)。

然后在顶部菜单里面,可以找到WebServiceAPI菜单:

微信小程序城市定位的实现实例(获取当前所在国家城市信息)
腾讯地图WebServiceAPI

腾讯地图提供了很多WebServiceAPI,比如按照地址获取经纬度,根据经纬度找地址,我们将要用到的就是根据经纬度找地址,也称作“逆地址解析”:

微信小程序城市定位的实现实例(获取当前所在国家城市信息)
逆地址解析

逆地址解析提供由坐标到坐标所在位置的文字描述的转换,调用形式就是一个HTTP URL形式的API,基本用法如下:

http://apis.map.qq.com/ws/geocoder/v1/?location=39.984154,116.307490&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

这个URL的基本参数就是一个经纬度坐标地址。你可以将这个URL中的key换成你自己的key,直接在浏览器中查看,就能看到类似这样的结果,还可以根据传入不同的参数选项,得到更丰富的信息:

{
 "status": 0,
 "message": "query ok",
 "request_id": "6225548022856589453",
 "result": {
 "location": {
  "lat": 39.984154,
  "lng": 116.30749
 },
 "address": "北京市海淀区北四环西路66号彩和坊路",
 "formatted_addresses": {
  "recommend": "海淀区中关村彩和坊路中国技术交易大厦",
  "rough": "海淀区中关村彩和坊路中国技术交易大厦"
 },
 "address_component": {
  "nation": "中国",
  "province": "北京市",
  "city": "北京市",
  "district": "海淀区",
  "street": "彩和坊路",
  "street_number": "北四环西路66号"
 },
 "ad_info": {
  "adcode": "110108",
  "name": "中国,北京市,北京市,海淀区",
  "location": {
  "lat": 39.984154,
  "lng": 116.307487
  },
  "nation": "中国",
  "province": "北京市",
  "city": "北京市",
  "district": "海淀区"
 },
 "address_reference": {
  "business_area": {
  "title": "中关村",
  "location": {
   "lat": 39.984058,
   "lng": 116.307518
  },
  "_distance": 0,
  "_dir_desc": "内"
  },
  "famous_area": {
  "title": "中关村",
  "location": {
   "lat": 39.984058,
   "lng": 116.307518
  },
  "_distance": 0,
  "_dir_desc": "内"
  },
  "crossroad": {
  "title": "彩和坊路/北四环西路辅路(路口)",
  "location": {
   "lat": 39.985001,
   "lng": 116.308113
  },
  "_distance": 104.2,
  "_dir_desc": "西南"
  },
  "village": {
  "title": "稻香园北社区",
  "location": {
   "lat": 39.983269,
   "lng": 116.301979
  },
  "_distance": 480.1,
  "_dir_desc": "东"
  },
  "town": {
  "title": "海淀街道",
  "location": {
   "lat": 39.984154,
   "lng": 116.307487
  },
  "_distance": 0,
  "_dir_desc": "内"
  },
  "street_number": {
  "title": "北四环西路66号",
  "location": {
   "lat": 39.984119,
   "lng": 116.307503
  },
  "_distance": 6.9,
  "_dir_desc": ""
  },
  "street": {
  "title": "彩和坊路",
  "location": {
   "lat": 39.984154,
   "lng": 116.308098
  },
  "_distance": 49.1,
  "_dir_desc": "西"
  },
  "landmark_l1": {
  "title": "北京中关村创业大街",
  "location": {
   "lat": 39.984055,
   "lng": 116.306992
  },
  "_distance": 43.9,
  "_dir_desc": "东"
  },
  "landmark_l2": {
  "title": "中国技术交易大厦",
  "location": {
   "lat": 39.984154,
   "lng": 116.307487
  },
  "_distance": 0,
  "_dir_desc": "内"
  }
 }
 }
}

从这个API的返回结果中,我们可以看到它包含了我们想要的地址信息,如国家,城市,区等。

接下来,我们要在我们的代码中调用这个API。该API可以通过JSONP的方式调用,也可以在服务器端发起调用。我是在我自己的服务端中调用的,下面是我的代码,使用Node.js Express实现的,仅供参考:

// 服务调用地址:http://localhost:3000/lbs/location

router.get('/lbs/location', function (req, res, next) {
 let lat = req.query.latitude
 let lng = req.query.longitude

 request.get({
 uri: 'https://apis.map.qq.com/ws/geocoder/v1/',
 json: true,
 qs: {
 location: `${lat},${lng}`,
 key: '你的腾讯地图密钥key'
 }
 }, (err, response, data) => {
 if (response.statusCode === 200) {
 responseUtil.jsonSuccess(res, data)
 } else {
 responseUtil.jsonError(res, 10001, '')
 }
 })
})

然后,可以看一下在小程序端的Page代码:

Page({

 data: {
 address: {}
 },

 onLoad: function () {
 //获取当前经纬度信息
 wx.getLocation({
 success: ({latitude, longitude}) => {

 //调用后台API,获取地址信息
 wx.request({
  url: 'http://localhost:3000/lbs/location',

  data: {
  latitude: latitude,
  longitude: longitude
  },

  success: (res) => {
  let info = res.data.data.result.ad_info
  this.setData({ address: info })
  },

  fail: () => {
  },

  complete: () => {
  }
 })
 }
 })
 }

})

以及一个简单的小程序界面,用于显示这些地址信息:

<view>
 <view>{{address.nation}}</view>
 <view>{{address.city}}</view>
 <view>{{address.district}}</view>
</view>

运行结果如下所示:

微信小程序城市定位的实现实例(获取当前所在国家城市信息)
运行结果

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习微信小程序能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
找出字符串中出现次数最多的字母和出现次数精简版
Nov 07 Javascript
JavaScript如何从listbox里同时删除多个项目
Oct 12 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
jquery动态添加option示例
Dec 30 Javascript
jQuery实现购物车表单自动结算效果实例
Aug 10 Javascript
理解JavaScript中worker事件api
Dec 25 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
Angular中使用$watch监听object属性值的变化(详解)
Apr 24 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
Aug 30 Javascript
express.js中间件说明详解
Mar 19 Javascript
详解vue 命名视图
Aug 14 Javascript
基于react项目打包css引用路径错误解决方案
Oct 28 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 #Javascript
bootstrap轮播图示例代码分享
May 17 #Javascript
bootstrap警告框示例代码分享
May 17 #Javascript
微信小程序中做用户登录与登录态维护的实现详解
May 17 #Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 #Javascript
原生JS实现层叠轮播图
May 17 #Javascript
JavaScript手风琴页面制作
May 17 #Javascript
You might like
zend framework中使用memcache的方法
2016/03/04 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
jQuery extend 的简单实例
2013/09/18 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
Node.js 如何利用异步提升任务处理速度
2019/01/07 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
python学生管理系统学习笔记
2019/03/19 Python
Python字符串对象实现原理详解
2019/07/01 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
大二自我鉴定范文
2013/10/05 职场文书
教师自我鉴定范文
2013/11/10 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
行政办公室岗位职责
2014/03/18 职场文书
营销与策划专业求职信
2014/06/20 职场文书
鸟的天堂导游词
2015/01/31 职场文书
体育教师个人总结
2015/02/09 职场文书
好员工观后感
2015/06/17 职场文书
安全生产学习心得体会
2016/01/18 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
Python if else条件语句形式详解
2022/03/24 Python