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

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

优点:

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

缺点:

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

JS:

  1. // 获取当前经纬度
  2. getLocation: function () {
  3. var that = this
  4. if (navigator.geolocation) {
  5. navigator.geolocation.getCurrentPosition(function (position) {
  6. alert('经度:'+ position.coords.latitude)
  7. alert('纬度:'+ position.coords.longitude)
  8. }, function (error) {
  9. switch (error.code) {
  10. case error.PERMISSION_DENIED:
  11. alert('用户拒绝对获取地理位置的请求。')
  12. break;
  13. case error.POSITION_UNAVAILABLE:
  14. alert('位置信息是不可用的。')
  15. break;
  16. case error.TIMEOUT:
  17. alert('请求用户地理位置超时。')
  18. break;
  19. case error.UNKNOWN_ERROR:
  20. alert('未知错误。')
  21. break;
  22. }
  23. }, { enableHighAcuracy: false });
  24. } else {
  25. alert('Geolocation is not supported by this browser.')
  26. }
  27. },

2、通过地图定位 

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

代码部分:

引入地图js(百度地图)<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=密钥"></script>

  1. if (navigator.geolocation) {
  2. var geolocation = new BMap.Geolocation();
  3. geolocation.getCurrentPosition(function(r){
  4. if(this.getStatus() == BMAP_STATUS_SUCCESS){
  5. alert('您的位置:'+r.point.lng+','+r.point.lat);
  6. }else {
  7. alert('failed'+this.getStatus());
  8. }
  9. },{enableHighAccuracy: true})
  10. } else {
  11. alert('Geolocation is not supported by this browser.')
  12. }

结果: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 => 获取定位

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

  

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

参考:https://blog.csdn.net/Jioho_chen/article/details/83592630

H5 移动端获取当前位置的更多相关文章

  1. H5高德地图获取当前位置

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  2. H5 高德地图获取当前位置信息

    返回结果:jsonp_393330_({"status":"1","info":"OK","infocode& ...

  3. 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权

    第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...

  4. FineReport移动端如何获取地址位置

    对于企业大多数员工来说,由于其工作位置是固定的,可以有多种方式进行上班打卡签到以保证该员工有按时正常来上班,但是对于经常需要出差,去客户现场的员工来说,就无法保证他们是否有去上班,所以希望能通过手机位 ...

  5. 调用微信JsAPI端获取位置

    public partial class test : BasePage { protected test() { AccessPage = PageWebType.WX; } protected s ...

  6. pc和移动端获取滚动条的位置

    移动端获取滚动条:document.body.scrollTop pc端获取滚动条:document.documentElement.scrollTop

  7. H5移动端知识点总结

    H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解display:box的布局 理解flex布局 Flex布局兼容知识点总结 回到顶部 移动开 ...

  8. 【全面总结】js获取元素位置大小

    [js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...

  9. CAS 单点登录 移动端获取TGT、ST 已经移动端登录页面不进行跳转的设置

    一.设置移动客户端验证ST通过后,页面不进行302重定向跳转 修改web.xml <!--**************************************************** ...

随机推荐

  1. 入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别

    雷锋网按:本文为旷视科技首席科学家孙剑日前在 CCF-ADL上做的题为<如何在大公司和创业公司做好计算机视觉研究>的分享,主要介绍了近期计算机视觉的发展现状,ResNet基本原理和设计,旷 ...

  2. day38 15-Spring的配置文件引入的问题

    配置文件内容过多修改起来维护起来很麻烦.Struts 2可以在总的配置文件中引入其他的配置文件.这是一种办法.第二种办法在加载配置文件的时候,里面可以一次性传多个. <?xml version= ...

  3. prestashop 首页轮播幻灯片图片修改

    后台 -> Modules -> Modules 搜索 home(中文则搜幻灯片)

  4. 接口测试 Postman 做接口自动化测试_入门篇

    可能是目前最好用的web接口调试工具 无需注册(注册后可多终端同步用例) 免费(每年付费$60可用云服务,30天免费试用) 保存历史记录 支持录制请求 基于Chrome的V8引擎,支持JS脚本(基本支 ...

  5. 使用vscode书写markdown文件

    插件推荐 markdown-preview-enhanced 打开 vscode 编辑器,在插件页搜索 markdown-preview-enhanced,接着点击 Install 按钮. 该插件的中 ...

  6. python 通过.pth文件修改搜索路径

  7. PHPCMS快速建站系列之pc:get标签的应用

    GET标签使用方式如下: {pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$ ...

  8. Auto CAD 安装问题 “acad.exe - 系统错误 ”

    Auto CAD 安装不上,提示“cad装不上 提示无法启动此程序,因为计算机中丢失 ac1st16.dll” 解决方法: 我的电脑——>右键 属性——>高级选项卡(win7的是高级系统设 ...

  9. ROW_NUMBER(),不允许并列名次、相同值名次不重复,结果如123456……

    将score按ID分组排名:row_number() over(partition by id order by score desc) 将score不分组排名:row_number() over(o ...

  10. 模板—tarjan求割点

    int dfn[MAXN],low[MAXN],cnt,root; bool iscut[MAXN]; void tarjan(int x) { dfn[x]=low[x]=++cnt; ; for( ...