草庐IT

关于小程序移动端调用微信API及腾讯地图实例,获取当前位置、逆地址解析、路线规划、地图展示

Ricky-chen 2023-04-20 原文

前言:记录使用腾讯地图定位的逻辑思路讲解

以下内容会分为三部分讲解:

  • 小程序调用微信API获取经纬度

  • 小程序调用腾讯地图API地址转坐标解析

  • 小程序调用腾讯地图API获取目的地交通线路

  • 移动端H5调用微信API获取经纬度

  • 移动端H5调用腾讯地图API逆地址解析


小程序调用微信API获取经纬度

小程序是使用HBuilder X开发软件,相关技术栈:vue2+uview+sass

使用uniapp自带的API:uni.getLocation获取当前所谓位置的经纬度

const that = thisuni.getLocation({    type: 'gcj02',    success: function(res) {    that.latitude = res.latitude    that.longitude = res.longitude  }})

小程序调用腾讯地图API地址转坐标解析

首先需要申请密钥:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/jsSdkOverview

步骤:打开链接---注册---申请密钥---编辑---配置信息---WebServiceAPI(选择白名单:这个地址必须要加上:servicewechat.com, 还有你的接口API)---勾选微信小程序填写AppID---登录小程序---开发(开发管理)填写信息:IP白名单、服务器接口、腾讯地图接口api---点击左边菜单设置---第三方设置(添加插件腾讯地图)

项目:打开manifest.json文件---选择小程序配置---设置权限配置

基本设置完成

JSSDK下载:下载JSSDK---打开腾讯地图---下载JSSDK放置项目中---页面引入

代码部分:

// 引入下载好的JSSDK(看清楚路径)var QQMapWX = require('@/untils/qqmap-wx-jssdk.js');var qqmapsdk = new QQMapWX({    key: 'Y3MBZ-EJ56V-V2SPC-XXXX-XXXX-XXXXX' // 腾讯地图创建的KEY密钥});// 逆地址解析 以:广东省深圳市龙园中心城吉祥中路588号为例getAddrss() {  const _that = this  qqmapsdk.geocoder({    address: '广东省深圳市龙园中心城吉祥中路588号', // 地址 必填    region: '深圳市', // 所属城市 非必填    sig: '6c9LCIGA6t2nEtBUG4XXXXXXXXX', // 签名 非必填    success: function(res) {},    fail: function(res) {},    complete: function(res) {      // 获取经纬度成功      const latitude = res.result.location.lat      const longitude = res.result.location.lng    }  )}}

小程序调用腾讯地图API获取目的地交通线路

步骤:获取当前位置坐标(略)---获取目标位置坐标(略)---调用相关接口---解析数据

// 获取当前位置坐标以及目标位置坐标,上边有写就略过// 调用计算距离接口qqmapsdk.direction({  mode: 'driving', //可选值:'driving'(驾车)、'walking'(步行)、'bicycling'(骑行),不填默认:'driving',可不填  from: form,  // 不填默认当前位置,出发地 非必填  to: to, // 目的地 必填  success: function(res) {},  fail: function(res) {},  complete: function(res) {    console.log(res) // 路线详细信息    // 此处取你所需,以下是我提取的详细路线(细节有待完善)    const ret = res    // 驾车路线    const  drivingRoutre = ret.result.routes[0].polyline    pl = []    // 坐标解压(返回的点串坐标,通过前向差分进行压缩)    const kr = 1000000;    for (var i = 2;i < drivingRoutre.length;i++ ) {      drivingRoutre[i] = Number(drivingRoutre[i-2]) + Number(drivingRoutre[i]) / kr    }    // 将解压后的坐标放入点串坐标组pl中    for (var i = 0;i < drivingRoutre.length;i++ ) {       pl.push({        latitude:drivingRoutre[i],        longitude:drivingRoutre[i+1]      })    }    // 设置polyline属性,将路线显示出来,将解压坐标第一个数据作为起点    _that.longitude = pl[0].longitude    _that.latitude = pl[0].latitude    _that.polyline = [{      points:pl,      color:'#4bc37b',      width:4,      iconPath:'' // 坐标点图    }]  }})

附上公交详细代码

_that.card = arr // 获取数组数组最外层便利const distance = '' // 步行长度const duration = '' // 步行市场// const via  = [] // 途经线路const receive = []const ant = []arr.forEach(item => {  item.steps.forEach(item => {    if (item.mode == 'TRANSIT') {       item.lines.forEach(item => {       _that.via = ant.push(item.title)       // receive.push(item.title)       // _that.via = receive.join('-')      })    }  })})

截图效果

 

移动端H5调用微信API获取经纬度

安装依赖:https://www.npmjs.com/package/weixin-js-sdk

公众号设置:登录公众号---左侧设置与开发---公众号设置---设置业务域名、js安全域名

代码部分:安装依赖---引入---鉴权---调用微信API

// 安装依赖 npm install weixin-js-sdk// 引入 import wx from 'weixin-js-sdk'// 鉴权async signPackage () {  const pageUrl = location.href.split('#')[0] // 页面地址,即线上地址  const res = await getSignPackage({ url: pageUrl })  if (res.data.code == 200) {    let config = res.data.data    wx.config({      debug: true, // 调试时候建议开启debug      appId: config.appId, // 必填,公众号的唯一标识      timestamp: config.timestamp, // 必填,生成签名的时间戳      nonceStr: config.nonceStr, // 必填,生成签名的随机串      signature: config.signature, // 必填,签名      jsApiList: ['checkJsApi', 'getLocation'] // 必填,需要使用的JS接口列表  'checkJsApi',    })    // 检验调用的接口    wx.ready(function () {      wx.checkJsApi({        jsApiList: ['getLocation'], // 需要检测的JS接口列表,所有JS接口列表见附录2,        success: function (res) {}      })    })  }}

校验完成---调用相关API

getLocations () {  const _this = this  wx.getLocation({    type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'    success: function (res) {    // 接收      _this.latitude = res1.latitude // 纬度,浮点数,范围为90 ~ -90      _this.longitude = res1.longitude // 经度,浮点数,范围为180 ~ -180。    }  })}

移动端H5调用腾讯地图API逆地址解析

H5调用逆地址解析,调用的方法有点出入

vue调用腾讯API要使用JSONP

地址链接:https://www.npmjs.com/package/vue-jsonp

// 根据获取到的坐标// 安装npm install vue-jsonp --save// 在main.js引入import {VueJsonp} from 'vue-jsonp'Vue.use(VueJsonp)// 调用formSubmit () {  var _this = this  this.$jsonp('https://apis.map.qq.com/ws/geocoder/v1/?', {    location: _this.latitude + ',' + _this.longitude, // 经纬度    key: 'HPIBZ-DU3LP-NDJDN-XXXX-XXXX-XXX', // 创建应用的钥匙    output: 'jsonp' // output必须jsonp   不然会超时  }).then(res => {    // console.log(res, '腾讯地图')  })}

以上内容均为本人项目上所遇到,点个赞呗

结束,祝各位前端老友前程似锦,升职加薪!!!!

有关关于小程序移动端调用微信API及腾讯地图实例,获取当前位置、逆地址解析、路线规划、地图展示的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  5. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  6. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  7. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  8. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  9. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  10. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

随机推荐