美文网首页
H5 移动端获取当前位置

H5 移动端获取当前位置

作者: 文芬 | 来源:发表于2020-12-08 09:53 被阅读0次

3种方法:

1、H5自带的方法,获取经纬度
2、通过地图提供的JS。获取位置
3、通过微信的API(这个需要公众号 / 小程序)

1、通过H5自带的获取经纬度的方法

优点:
需要引用的资源较少,H5自带的方法

缺点:
1、获取的经纬度偏差较大,如果需要配合地图使用,还需要使用地图提供的经纬度转换方法
2、目前大多数浏览器(包括手机端),已经不支持http的请求获取用户地址,必须为https域名的才能发起请求。目前测试,在安卓手机的微信打开的浏览器和IE浏览器还能支持获取经纬度

JS:

// 获取当前经纬度
getLocation: function () {
    var that = this
    if (navigator.geolocation) {               
        navigator.geolocation.getCurrentPosition(function (position) {
            alert('经度:'+ position.coords.latitude)
            alert('纬度:'+ position.coords.longitude)
        }, function (error) {
            switch (error.code) {
                case error.PERMISSION_DENIED:
                    alert('用户拒绝对获取地理位置的请求。')
                    break;
                case error.POSITION_UNAVAILABLE:
                    alert('位置信息是不可用的。')
                    break;
                case error.TIMEOUT:
                    alert('请求用户地理位置超时。')
                    break;
                case error.UNKNOWN_ERROR:
                    alert('未知错误。')
                    break;
            }
        }, { enableHighAcuracy: false });
    } else {
        alert('Geolocation is not supported by this browser.')
    }
}

2、通过地图定位

简单说下:
其实所有地图的定位,也是基于H5的定位(所以很多时候引入地图定位的时候,可能会报一个警告,和H5一样,报错信息如上图),在进行的坐标计算,那如果是不支持H5获取定位的呢?那么地图的API则会根据IP,查询粗略位置,定位的准确度为城市级。详情可以看下百度地图的API。

代码部分:
引入地图js(百度地图)

<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=密钥"></script>

if (navigator.geolocation) {
   var geolocation = new BMap.Geolocation();
   geolocation.getCurrentPosition(function(r){
       if(this.getStatus() == BMAP_STATUS_SUCCESS){
           alert('您的位置:'+r.point.lng+','+r.point.lat);
       }else {
           alert('failed'+this.getStatus());
       }       
   },{enableHighAccuracy: true})
} else {
   alert('Geolocation is not supported by this browser.')
}

结果:http地址下ios定位比较准确,Android 定位在地级市。
解决:http 换成 https

3、微信提供的API (这个必须有公众号才能实现)

1、确保公众号的配置一切正常(合法域名、token、回调地址、JS合法域名…)

2、引入相关的JS文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

3、获取签名 => 初始化需要请求的API => 获取定位

// 这里的ajax请求,是为了获取签名(都是后端的工作了。根据文档生成签名等)
  $.ajax({
    type: "post",
    url: "你自己的生成签名的地址",
    data: {
      // 这里好像是需要回调的地址
      'askUrl': encodeURIComponent(location.href.split('#')[0])
    },
    dataType: "json",
    success: function (data) {
     
     // 生成签名后,开始使用微信的  wx.config 。其中jsApiList就是我们要用的API的列表,因为只需要取经纬度,所以用getLocation就可以了
      wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。  
        appId: data.appId, // 必填,公众号的唯一标识
        timestamp: data.timestamp, // 必填,生成签名的时间戳
        nonceStr: data.nonceStr, // 必填,生成签名的随机串
        signature: data.signature, // 必填,签名,见附录1
        jsApiList: [
          'getLocation'
        ]
      });
      wx.error(function (res) {
        alert("失败:"+res.msg");
      });
     
    // wx.config 检测无误后,会进入到  ready 方法 。 注意type参数。微信多数的坐标体系都为gcj02
      wx.ready(function () {
        wx.getLocation({
          type: "gcj02",
          success: function (res) {
            latitude = res.latitude;
            longitude = res.longitude;
          },
          cancel: function (res) {
             alert("定位失败,权限不足")
          },
        });
      });
    }
  });

总结:目前的H5获取定位,都需要HTTPS的支持。而微信的api则需要公众号才行,各有优缺点。更多详细的内容,可以查看相关的文档

参考来源

相关文章

  • H5 移动端获取当前位置

    3种方法: 1、H5自带的方法,获取经纬度2、通过地图提供的JS。获取位置3、通过微信的API(这个需要公众号 /...

  • (转载)h5手机端或PC端利用高德地图获取当前定位位置

    h5手机端或PC端利用高德地图获取当前定位位置原创西鱼 发布于2019-08-22 15:33:13 阅读数 12...

  • 动画函数

    一、动画实现原理 核心原理:通过定时器不断移动盒子位置 (1)获取盒子当前位置 (2)让盒子在当前位置加上一个移动...

  • iOS开发之 WebViewJavascriptBridge 原

    当前移动端 H5 与原生混合开发已成常态,这其中自然就少不了原生与 H5 的交互问题。iOS 端 WebViewJ...

  • 位置同步

    情景假设: a 客户端发送位置移动消息(包括当前位置和当前速度),经过服务器 s ,发到客户端 b,因为网络延迟而...

  • cesium 2 获取鼠标当前位置的经纬度高度

    2 获取鼠标当前位置的经纬度高度 鼠标移动时,实时获取当前鼠标位置的经纬度,相机高度与地图层级。可以在info.v...

  • 鼠标操作

    1、position:获取当前鼠标位置 2、move/moveRel/moveTo:移动鼠标move()方法按照传...

  • 21/10/11 - 21/10/15 零碎知识记录

    1.pc端实现移动端拖动效果思路 moveDown记录鼠标按下位置记录当前状态为按下拖动+moveUp记录当前状态...

  • H5移动端爬坑

    H5移动端爬坑

  • 工具函数

    判断当前终端是否PC 判断当前设备平台 判断当前浏览器类型 获取浏览器版本信息 判断是否IphoneX 移动端键盘...

网友评论

      本文标题:H5 移动端获取当前位置

      本文链接:https://www.haomeiwen.com/subject/iadiiktx.html