愚公系列2022年04月 微信小程序-项目篇(公交查询)-02周边站点-获取位置和城市信息

网友投稿 504 2022-05-30

前言

1.相关API

逆地址解析:提供由经纬度到文字地址及相关位置信息的转换能力,广泛应用于物流、出行、O2O、社交等场景。服务响应速度快、稳定,支撑亿级调用。

可以满足以下相关业务场景:

【愚公系列】2022年04月 微信小程序-项目篇(公交查询)-02周边站点-获取位置和城市信息

满足传统对省市区、乡镇村、门牌号、道路及交叉口、河流、湖泊、桥、poi列表的需求。

提供通过知名地点、地标组合形成的易于理解的地址,如:北京市海淀区中钢国际广场(欧美汇购物中心北)。

提供精准的商圈、知名的大型区域、附近知名的一级地标、代表当前位置的二级地标等。

请求地址:https://apis.map.qq.com/ws/geocoder/v1/?location=

请求参数:

详情请看相关接口网址:https://lbs.qq.com/service/webService/webServiceGuide/webServiceGcoder

一、获取位置和城市信息

获取位置方法:getLocationInfo

getLocationInfo() { var _this = this app.showLoading("拉取路线列表") wx.getLocation({ type: 'gcj02', success: function (res) { var locationInfo = _this.data.locationInfo locationInfo.latitude = res.latitude locationInfo.longitude = res.longitude // 调用接口 qqmap.reverseGeocoder({ location: { latitude: locationInfo.latitude, longitude: locationInfo.longitude }, success: function (res) { locationInfo.city = res.result.address_component.city locationInfo.address = res.result.formatted_addresses.recommend _this.setData({ locationInfo: locationInfo }) _this.getStationList() }, fail: function (res) { console.log(res); app.hideLoading(locationInfo) }, complete: function (res) { // complete // console.log(_this.data.locationInfo) } }) } }) },

逆地址解析方法:reverseGeocoder

reverseGeocoder(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { coord_type: options.coord_type || 5, get_poi: options.get_poi || 0, output: 'json', key: that.key }; if (options.poi_options) { requestParam.poi_options = options.poi_options } var locationsuccess = function (result) { requestParam.location = result.latitude + ',' + result.longitude; wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam })); }; Utils.locationProcess(options, locationsuccess); }

Utils相关工具类:

/** * 回调函数默认处理 */ polyfillParam(param) { param.success = param.success || function () { }; param.fail = param.fail || function () { }; param.complete = param.complete || function () { }; }, /** * 构造微信请求参数,公共属性处理 * * @param {Object} param 接口参数 * @param {Object} param 配置项 */ buildWxRequestConfig(param, options) { var that = this; options.header = { "content-type": "application/json" }; options.method = 'GET'; options.success = function (res) { var data = res.data; if (data.status === 0) { param.success(data); } else { param.fail(data); } }; options.fail = function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, result.errMsg)); }; options.complete = function (res) { var statusCode = +res.statusCode; switch(statusCode) { case ERROR_CONF.WX_ERR_CODE: { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); break; } case ERROR_CONF.WX_OK_CODE: { var data = res.data; if (data.status === 0) { param.complete(data); } else { param.complete(that.buildErrorConfig(data.status, data.message)); } break; } default:{ param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)); } } } return options; }, /** * 处理用户参数是否传入坐标进行不同的处理 */ locationProcess(param, locationsuccess, locationfail, locationcomplete) { var that = this; locationfail = locationfail || function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); }; locationcomplete = locationcomplete || function (res) { if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); } }; if (!param.location) { that.getWXLocation(locationsuccess, locationfail, locationcomplete); } else if (that.checkLocation(param)) { var location = Utils.getLocationParam(param.location); locationsuccess(location); } } /** * 构造错误数据结构 * @param {Number} errCode 错误码 * @param {Number} errMsg 错误描述 */ buildErrorConfig(errCode, errMsg) { return { status: errCode, message: errMsg }; }, /** * 获取location参数 */ getLocationParam(location) { if (typeof location == 'string') { var locationArr = location.split(','); if (locationArr.length === 2) { location = { latitude: location.split(',')[0], longitude: location.split(',')[1] }; } else { location = {}; } } return location; },

小程序

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java享元模式
下一篇:Terraform 最佳实践
相关文章