大家都知道,HTML5 Geolocation 可以使用 IP 地址、基于 Web 的数据库、无线网络连接和三角测量或 GPS 技术来确定经度和纬度

问题:

在一个基于地理位置服务的个人业余项目(小伙伴在哪儿)中,发现用PC获取的地理位置与手机端获取的地理信息存在微小的差距,PC端会经常出现获取不到地理位置的情况,PC端和手机端的Geolocation是否有什么底层实现方面的差别呢,HTML5又是根据什么原则来确定应该采用何种方式来确定经度和纬度信息呢?

带着这个问题,作者查阅了一些资料,得出以下几个假设和结论:

一、HTML5 Geolocation API是如何工作的

根据您所使用的浏览器,HTML5地理位置API实现原理依赖于于多项因素,包括你的公网IP地址,手机信号塔的ID,GPS信息,一系列无线接入点,信号强度和MAC地址(Wifi/蓝牙)。然后它将该信息通过https协议传递到一个位置服务商并尝试将该信息与大量的相关数据库进行匹配查找。然后返回一个近似的位置信息,通过javascript的回调函数传递到代码。

举一个例子来验证一下HTML5 Geolocation到底给位置服务商发送了哪些信息,我用firefox11做了一些测试,firefox使用了google的位置服务。顺便提一下,到目前为止,firefox11不会再传送cookie到服务器。

firefox11发送了一个https请求:https://maps.googleapis.com/maps/api/browserlocation/json?

GET /maps/api/browserlocation/json?browser=firefox&sensor=true&wifi=mac:01-24-7c-bc-51-46%7Cssid:3x2x%7Css:-37&wifi=mac:09-86-3b-31-97-b2%7Cssid:belkin.7b2%7Css:-47&wifi=mac:28-cf-da-ba-be-13%7Cssid:HERESIARCH%20NETWORK%7Css:-49&wifi=mac:2b-cf-da-ba-be-10%7Cssid: ARCH%20GUESTS%7Css:-52&wifi=mac:08-56-3b-2b-e1-a8%7Cssid:belkin.1a8%7Css:-59&wifi=mac:02-1e-64-fd-df-67%7Cssid:Brown%20Cow%7Css:-59&wifi=mac:2a-cf-df-ba-be-10%7Cssid: ARCH%20GUESTS%7Css:-59 HTTP/1.1

二、浏览器使用哪个位置服务?

并不是所有geolocation 服务都是一样的,而且并不一定会使用同一个算法甚至不是一个数据库。正因为如此,通过浏览器获取到的位置信息可能会因为采用的位置服务不同而不同。

下面列举了一些浏览器使用的位置服务。虽然我没有做测试,根据我的经验,不同的浏览器、不同的设备包括智能手机、pad,即使是在同一地点都会返回不同的位置信息。有些位置服务在有一些城市会更精确,另一些位置服务在其他城市会更精确。

  • chrome使用google location services
  • window平台上firefox使用google location services
  • linux上的firefox使用GPSD - http://catb.org/gpsd/.
  • IE9+使用Microsoft location service
  • IOS上的safari浏览器使用Apple location services for iphone os3.2+
  • 我不确定window平台上的safari使用哪个位置服务。
  • opera使用google location services。Android平台上的opera使用GPS。

HTML5 geolocation需要联网。如果检测到设备没联网,有些时候浏览器会从缓存中获取位置信息,但是这个缓存的位置信息是最后一次联网时获取到的位置信息。

WIFI是否开启。如果在你的手机、桌面设备、平板上WIFI没有开启,Geolocation API会尝试用你的公网IP或者电话塔ID或GPS来查找你的位置信息。公网IP数据库通常会返回一个你的网络提供商的存在点或POP。另外,一些网络供应商会提供rotating ip address.所以,可以尝试在一段时间内使用一个ip地址,你会得到不同的结果。所以公网IP只适合来定位你位于哪个城市,或者该城市哪个区域,或者国家。

对于电话塔IDS,它依赖于你使用哪种手机以及供应商。有一些智能手机只会返回当前手机正在ping的电话塔位置,所以这有可能会不太精确的。

我注意到了Android内置的浏览器在没有wifi的情况下会比较不精确。精确程度只有1000+。如果我打开wifi之后(我在乡下区域),精确度立马增高到75m左右。

农村/城市。大部分用户都在城市,但是如果你的用户到乡下的地方去旅游,Geolocation就变得不太可靠了。即使用户打开了wifi,但是如果用户没有处于wifi接入点附近,geolocation service依然会尝试用其他方法去定位。乡下地方很难用三角定位的方法来获取位置信息,如果浏览器不实用GPS,精确度也会收到很大影响。

移动/静止。geolocation api在静止的城市区域会提供一个更精确的位置。当我在城镇周边驾驶的时候,我的android原生浏览器中很难获取到精确的位置信息。但是如果你停止在一个点的时候偶尔会返回一个结果。当我在告诉公路上以每小时50公里的速度驾驶的时候,我很难得到一个结果。

是否开启了VPN。如果VPN打开了,geolocation会根据VPN的公网ip去寻址。

自定义的Geolocation作为备用。根据自身的实际情况,可能你会想要使用一些商业服务来获取位置信息,例如IP2Location。或者使用第三方的geolocation service,比如Skyhook。记住IP Geolocation只会返回城市或区域级别精度的位置信息。

如果HTML5满足不了我的需求,怎么办?如果你有较高的精度需求,我推荐使用native app。

【转载】http://www.cnblogs.com/keva/p/html5-geolocation-accurary.html

HTML5 Geolocation API工作原理[转载]的更多相关文章

  1. HTML5 Geolocation API地理定位整理(一)

    HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. 浏览器支持 Internet Explorer 9+, ...

  2. HTML5 Geolocation API地理定位整理(二)

    Geolocation 实例demo 1.使用watchPosition()监听客户端位置 var watchOne=null; if (navigator.geolocation) { //watc ...

  3. 深入浅出HTTPS工作原理(转载)

    转载自: https://blog.csdn.net/wangtaomtk/article/details/80917081 深入浅出HTTPS工作原理 HTTP协议由于是明文传送,所以存在三大风险: ...

  4. html5 geolocation API

    清单 1. 检查浏览器支持性if (navigator.geolocation) 清单 2. 单次定位请求 API void getCurrentPosition(updateLocation, op ...

  5. HTML5 canvas游戏工作原理

    HTML5已经不是一个新名词.它看上去很cool,有很多feature,大多数人普遍看好它的发展.对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面. 我们可以在 ...

  6. 简单的HTML5 canvas游戏工作原理

    HTML5已经不是一个新名词.它看上去很cool,有很多feature,大多数人普遍看好它的发展.对于我来说,最感兴趣的是它的canvas标签,可以结合Javascript来绘制游戏画面. 我们可以在 ...

  7. 利用HTML5 Geolocation API在百度地图中显示你的位置

    代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <met ...

  8. jQuery UI Widget(1.8.1)工作原理--转载

    先看下代码的相关注释: /*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/abo ...

  9. 1-趣味解读DNS工作原理——转载疯猫网络科技

    因为只要我们输入百度.腾讯.淘宝的名字,无论它们的服务器在哪里,历经多少轮查询,我们都能找到并访问之.这就是计算机网络中著名的域名系统DNS(Domain Name System),它能实现把一个网站 ...

随机推荐

  1. 第1回-使用ThinkPHP的3.1.3版本轻松建网站

    使用ThinkPHP的3.1.3版本轻松建网站 首先,从ThinkPHP官网下载一个ThinkPHP3.1.3版本框架包. 其次,取出ThinkPHP3.1.3包中的核心部分,部署你的服务器项目下. ...

  2. Linux入门之常用命令(2)

    (三) 链接文件 ln [-s] [源文件] [目标文件]       -s表示符号链接 没有则是硬链接 硬链接是一个独立文件 (相当于一个副本) 符号链接是一个链接文件(相当于一个快捷方式) 但是修 ...

  3. P1013

    问题 D: P1013 时间限制: 1 Sec  内存限制: 128 MB提交: 33  解决: 21[提交][状态][讨论版] 题目描述 " 找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手 ...

  4. VBA 中窗体模式切换,一次设计2种表现

    Sub ModelChange() Then DoCmd.RunCommand acCmdSubformFormView ''''就这句 Me.Form.AllowEdits = True ' Mod ...

  5. HDU1789 Doing Homework again

    基础单调队列: #include<cstdio> #include<cstdlib> #include<iostream> #include<algorith ...

  6. Java面向对象 Main函数 静态的应用 单例设计模式

     Java面向对象 Main函数 静态的应用与单例设计模式 知识概要             (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...

  7. 使用MVVM减少控制器代码实战(减少56%)

    减少比例= (360(原来的行数)-159(瘦身后的行数))/360 = 56% 父类 MVC 和MVVM 前后基本不动 父类主要完成如下三个功能: 1)功能:MJRefrsh +上拉下拉没有更多数据 ...

  8. 【原创】自用css reset

    自己工作中常用的reset,和一些设置,实际用时会根据网站页面进行增删. /* Common style */html{ overflow-y:scroll; overflow-x:auto;}bod ...

  9. 【特效】单选按钮和复选框的美化(只用css)

    表单的默认样式都是比较朴素的,实际页面中往往需要美化他们.这里先说说单选按钮和复选框,有了css3,这个问题就变的好解决了.利用input与label相关联,对label进行美化并使其覆盖掉原本的in ...

  10. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...