H5 移动端获取当前位置
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则需要公众号才行,各有优缺点。更多详细的内容,可以查看相关的文档
参考:https://blog.csdn.net/Jioho_chen/article/details/83592630
H5 移动端获取当前位置的更多相关文章
- H5高德地图获取当前位置
<!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...
- H5 高德地图获取当前位置信息
返回结果:jsonp_393330_({"status":"1","info":"OK","infocode& ...
- 亲历H5移动端游戏微信支付接入及那些坑(二)——获取Openid和授权
第一篇中将一些坑说明,那么这篇开始正式进入接入步骤.具体的参数说明,我不会列出,毕竟微信官方文档都有,我想大家都看的懂,而且这接口也有可能微信会变动,所以不列出来,也是不想引起大家的误解,接入步骤只起 ...
- FineReport移动端如何获取地址位置
对于企业大多数员工来说,由于其工作位置是固定的,可以有多种方式进行上班打卡签到以保证该员工有按时正常来上班,但是对于经常需要出差,去客户现场的员工来说,就无法保证他们是否有去上班,所以希望能通过手机位 ...
- 调用微信JsAPI端获取位置
public partial class test : BasePage { protected test() { AccessPage = PageWebType.WX; } protected s ...
- pc和移动端获取滚动条的位置
移动端获取滚动条:document.body.scrollTop pc端获取滚动条:document.documentElement.scrollTop
- H5移动端知识点总结
H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解display:box的布局 理解flex布局 Flex布局兼容知识点总结 回到顶部 移动开 ...
- 【全面总结】js获取元素位置大小
[js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...
- CAS 单点登录 移动端获取TGT、ST 已经移动端登录页面不进行跳转的设置
一.设置移动客户端验证ST通过后,页面不进行302重定向跳转 修改web.xml <!--**************************************************** ...
随机推荐
- 入职9月,旷视孙剑106分钟讲述CV创业科研的5大区别
雷锋网按:本文为旷视科技首席科学家孙剑日前在 CCF-ADL上做的题为<如何在大公司和创业公司做好计算机视觉研究>的分享,主要介绍了近期计算机视觉的发展现状,ResNet基本原理和设计,旷 ...
- day38 15-Spring的配置文件引入的问题
配置文件内容过多修改起来维护起来很麻烦.Struts 2可以在总的配置文件中引入其他的配置文件.这是一种办法.第二种办法在加载配置文件的时候,里面可以一次性传多个. <?xml version= ...
- prestashop 首页轮播幻灯片图片修改
后台 -> Modules -> Modules 搜索 home(中文则搜幻灯片)
- 接口测试 Postman 做接口自动化测试_入门篇
可能是目前最好用的web接口调试工具 无需注册(注册后可多终端同步用例) 免费(每年付费$60可用云服务,30天免费试用) 保存历史记录 支持录制请求 基于Chrome的V8引擎,支持JS脚本(基本支 ...
- 使用vscode书写markdown文件
插件推荐 markdown-preview-enhanced 打开 vscode 编辑器,在插件页搜索 markdown-preview-enhanced,接着点击 Install 按钮. 该插件的中 ...
- python 通过.pth文件修改搜索路径
- PHPCMS快速建站系列之pc:get标签的应用
GET标签使用方式如下: {pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$ ...
- Auto CAD 安装问题 “acad.exe - 系统错误 ”
Auto CAD 安装不上,提示“cad装不上 提示无法启动此程序,因为计算机中丢失 ac1st16.dll” 解决方法: 我的电脑——>右键 属性——>高级选项卡(win7的是高级系统设 ...
- ROW_NUMBER(),不允许并列名次、相同值名次不重复,结果如123456……
将score按ID分组排名:row_number() over(partition by id order by score desc) 将score不分组排名:row_number() over(o ...
- 模板—tarjan求割点
int dfn[MAXN],low[MAXN],cnt,root; bool iscut[MAXN]; void tarjan(int x) { dfn[x]=low[x]=++cnt; ; for( ...