uniapp开发小程序获取定位信息(腾讯地图)

这篇具有很好参考价值的文章主要介绍了uniapp开发小程序获取定位信息(腾讯地图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定位一直是一个让人头疼的问题,不是这个有问题就是那里有问题。这里结合我多方查找和实际运行,获得的一些经验给予分享。

怎么进行定位?基本流程是:

1.去腾讯位置服务的控制那里创建一个应用

腾讯位置服务 - 立足生态,连接未来 (qq.com)

uni-app 小程序获取精准位置方案,uni-app

2.添加一个key,并开通WebServiceAPI服务

这个key是到时候用来定位的标识(必要的)。开发的哪种就选择哪种就行。

uni-app 小程序获取精准位置方案,uni-app

uni-app 小程序获取精准位置方案,uni-app

3.下载微信jssdk(这里会用到逆地址解析等等)

微信小程序JavaScript SDK | 腾讯位置服务 (qq.com)

点击去下载其中之一即可。

uni-app 小程序获取精准位置方案,uni-app

 下载好后,我将它放在这个文件夹中进行使用,放在其它文件夹也行(不一定跟我一样),看自己习惯,只要到时候导入路径写对。

uni-app 小程序获取精准位置方案,uni-app

4.去小程序后台管理开启安全域名

小程序 (qq.com)

uni-app 小程序获取精准位置方案,uni-app

uni-app 小程序获取精准位置方案,uni-app

将这个域名添加进去

	
https://apis.map.qq.com

uni-app 小程序获取精准位置方案,uni-app

5.修改配置manifest.json文件

将位置接口勾选了

uni-app 小程序获取精准位置方案,uni-app

还要修改其源码,将以下这段代码添加:

"permission" : {
            "scope.userLocation" : {
                "desc" : "为了您更好的体验,请确认获取您的位置信息"
            }
        },
        "requiredPrivateInfos" : [
            "getLocation",
            "chooseLocation",
            "onLocationChange",
            "startLocationUpdateBackground"
        ]

具体在这里下面添加: 

uni-app 小程序获取精准位置方案,uni-app

6.在使用到的页面引入sdk

import QQMapWX from "../../common/qqmap-wx-jssdk.js"

不过这里有个坑,这样导入会报错,我查阅了一下,使用require导入也不行,具体是这样操作之后就可以了。

找到刚才你下载的sdk源文件,打开它滑倒最下面,将

module.exports = QQMapWX;注释掉,换成

export default QQMapWX;

uni-app 小程序获取精准位置方案,uni-app

7.使用uni.getLocation获取经纬度信息给QQMapWX实例进行使用

uni.getLocation(OBJECT) | uni-app官网 (dcloud.net.cn)

uni.getLocation(OBJECT)

获取当前的地理位置、速度。

OBJECT 参数说明

参数名 类型 必填 说明 平台差异说明
type String 默认为 wgs84 返回 gps 坐标,gcj02 返回国测局坐标,可用于 uni.openLocation 和 map 组件坐标,App 和 H5 需配置定位 SDK 信息才可支持 gcj02。
altitude Boolean 传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度 抖音小程序、飞书小程序、支付宝小程序不支持
geocode Boolean 默认false,是否解析地址信息 仅App平台支持(安卓需指定 type 为 gcj02 并配置三方定位SDK)
highAccuracyExpireTime Number 高精度定位超时时间(ms),指定时间内返回最高精度,该值3000ms以上高精度定位才有效果 App (3.2.11+)、H5 (3.2.11+)、微信小程序 (基础库 2.9.0+)
timeout String 默认为 5,定位超时时间,单位秒 仅飞书小程序支持
cacheTimeout Number 定位缓存超时时间,单位秒;每次定位缓存当前定位数据,并记下时间戳,当下次调用在cacheTimeout之内时,返回缓存数据 仅飞书小程序、支付宝小程序支持
accuracy String 默认为 high,指定期望精度,支持 high,best。当指定 high 时,期望精度值为100m,当指定 best 时期望精度值为20m。当定位得到的精度不符合条件时,在timeout之前会继续定位,尝试拿到符合要求的定位结果 仅飞书小程序支持
isHighAccuracy Boolean 开启高精度定位 App (3.4.0+)、H5 (3.4.0+)、微信小程序 (基础库 2.9.0+)
success Function 接口调用成功的回调函数,返回内容详见返回参数说明。
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数 说明
latitude 纬度,浮点数,范围为-90~90,负数表示南纬
longitude 经度,浮点数,范围为-180~180,负数表示西经
speed 速度,浮点数,单位m/s
accuracy 位置的精确度
altitude 高度,单位 m
verticalAccuracy 垂直精度,单位 m(Android 无法获取,返回 0)
horizontalAccuracy 水平精度,单位 m
address 地址信息(仅App端支持,需配置geocode为true)

address 地址信息说明

属性 类型 描述 说明
country String 国家 如“中国”,如果无法获取此信息则返回undefined
province String 省份名称 如“北京市”,如果无法获取此信息则返回undefined
city String 城市名称 如“北京市”,如果无法获取此信息则返回undefined
district String 区(县)名称 如“朝阳区”,如果无法获取此信息则返回undefined
street String 街道信息 如“酒仙桥路”,如果无法获取此信息则返回undefined
streetNum String 获取街道门牌号信息 如“3号”,如果无法获取此信息则返回undefined
poiName String POI信息 如“电子城.国际电子总部”,如果无法获取此信息则返回undefined
postalCode String 邮政编码 如“100016”,如果无法获取此信息则返回undefined
cityCode String 城市代码 如“010”,如果无法获取此信息则返回undefined

示例

uni.getLocation({
	type: 'wgs84',
	success: function (res) {
		console.log('当前位置的经度:' + res.longitude);
		console.log('当前位置的纬度:' + res.latitude);
	}
});

使用type:'gcj02 '会准确一些。

以下是完整demo代码,其中参考了这位老哥的文章【uniapp小程序实战】—— 使用腾讯地图获取定位_uniapp 腾讯地图-CSDN博客

<template>
  <view class="content">
    <view class="address" @click="getposition">
      获取定位
    </view>
    当前的定位是:{{position}}
  </view>
</template>

<script>
  import QQMapWX from "../../common/qqmap-wx-jssdk.js"
  export default {
    data() {
      return {
        title: 'Hello',
        position:''
      }
    },
    methods: {
      async getposition() {
        const location = await this.getLocationInfo()
        console.log("lo",location)
        this.position = location.formatted_addresses
        console.log("po",this.position)
      },
      async getLocationInfo() {
        return new Promise((resolve) => {
          let location = {
            longitude: 0,
            latitude: 0,
            province: "",
            city: "",
            area: "",
            street: "",
            address: "",
            formatted_addresses:""
          };
          // 使用uni.getLocation获取经纬度
          uni.getLocation({
            type: "gcj02",
            isHighAccuracy: true,
            success(res) {
              location.longitude = res.longitude;
              location.latitude = res.latitude;
              // 创建实例
              const qqmapsdk = new QQMapWX({
                key: 'ONXBZ-6G2L3-7OT3O-ODZDC-K35HK-5KBF5' //这里填写自己申请的key
              });
              // 使用腾讯的逆地址解析
              qqmapsdk.reverseGeocoder({
                location,
                success(response) {
                  console.log("成功!",response.result)
                  let info = response.result;
                  console.log(info);
                  location.province = info.address_component.province;
                  location.city = info.address_component.city;
                  location.area = info.address_component.district;
                  location.street = info.address_component.street;
                  location.address = info.address;
                  location.formatted_addresses = info.formatted_addresses.standard_address
                  resolve(location);
                },
              });
            },
            fail(err) {
              console.log(err)
              resolve(location);
            },
          });
        });
      }
    }
  }
</script>

<style scoped>
  .address{
    width: 50px;
    height: 50px;
    background-color: aqua;
  }
</style>

8.为了防止不同步配置,在微信小程序开发者平台检查一下,如果没有同步过来可以关了重新编译。

uni-app 小程序获取精准位置方案,uni-app

点击获取定位,能够成功获取到定位信息。 

uni-app 小程序获取精准位置方案,uni-app 具体返回的json文件可以点开这里查看保存下来,因为请求的腾讯api每天的额度有上限(具体额度在下面有说明),双击打开保存下来可以参考使用。

uni-app 小程序获取精准位置方案,uni-app

9.可能存在位置发生偏移(不准确)的问题

我将获取到的经纬度拿去坐标拾取器里面复原位置是准确的,也就是说经纬度对应逆地址解析的位置是正确的,问题出现在获取到的经纬度不准确。综合来看,就是uni.getLocation的问题。

uni-app 小程序获取精准位置方案,uni-app

uni-app 小程序获取精准位置方案,uni-app

为此,查看了一下其它文章,在编辑器中获取的定位信息确实是有偏差,我这里就去真机调试了一番,我这里的结果是真机调试的位置误差小于100,而在编辑器中却是有2公里左右的误差。具体的解决方案有待讨论。 (比较菜,暂时找不到方案解决)

uni-app 小程序获取精准位置方案,uni-app

10.存在真机调试getLocation报错

真机调试控制台窗口

uni-app 小程序获取精准位置方案,uni-app

我也是多次几次才成功的! (这个位置就比较准确)

 uni-app 小程序获取精准位置方案,uni-app

报错的原因可能是:

uni-app 小程序获取精准位置方案,uni-app

也就是说30秒内仅一次有效。  

11. 调用额度说明

具体是这个模块

uni-app 小程序获取精准位置方案,uni-app

这里为接口分配额度,普通开发者只有最高每天10000的额度,升级为企业级会多一些。

uni-app 小程序获取精准位置方案,uni-app

uni-app 小程序获取精准位置方案,uni-app

uni-app 小程序获取精准位置方案,uni-app

调用了多少,可以在这里看到,这里主要使用逆地址解析接口:

uni-app 小程序获取精准位置方案,uni-app 

以上就是使用腾讯地图进行定位的完整过程,其它方案如果有好的,也欢迎分享交流。文章来源地址https://www.toymoban.com/news/detail-836534.html

到了这里,关于uniapp开发小程序获取定位信息(腾讯地图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包