h5 geolocation 的那些事~

在讲h5 的geolocation API之前,让我们先了解一下当前国内地理坐标系现状

当前国内地理坐标系

  1. 国际坐标系:国际标准,国际地图提供商使用的坐标系
  2. 火星坐标系:国内标准,国际坐标系通过GCJ-02算法(非线性)加密后得到的坐标系
  3. 百度坐标系:百度对火星坐标系进行二次加密得到的坐标系(隐约感觉到ie的身影)

<秦始皇都快要忍不住爬起来一统天下(坐标系)了>

让我们在同一个地点,看看三种坐标有什么地理位置的差别:

// 百度坐标系 火星坐标系
console.log(geolib.getDistance(
    {latitude:113.939446, longitude: 22.546171},
    {latitude: 113.932777, longitude: 22.540639}
), '百度坐标系 火星坐标系')


// 百度坐标系 国际坐标系
console.log(geolib.getDistance(
    {latitude:113.939446, longitude: 22.546171},
    {latitude: 113.9279875, longitude: 22.5436215}
), '百度坐标系 国际坐标系')

// 火星坐标系 国际坐标系
console.log(geolib.getDistance(
    {latitude: 113.932777, longitude: 22.540639},
    {latitude: 113.9279875, longitude: 22.5436215}
), '火星坐标系 国际坐标系')

//输出  (单位:m)
785 '百度坐标系 火星坐标系'
1283 '百度坐标系 国际坐标系'
551 '火星坐标系 国际坐标系'

可以看出同一地点,采用不同地理坐标系的偏差。因为采用的是非线性算法进行加密的,所以不同地区,偏差程度不一样,详细可自行进行查阅资料,或者自行进行测试。

那么从h5 的geolocation 获取的坐标系又是什么坐标系呢?w3c标准描述如下

The Geolocation API defines a high-level interface to location information associated only with the device hosting the implementation, such as latitude and longitude. The API itself is agnostic of the underlying location information sources. Common sources of location information include Glob al Positioning System (GPS) and location inferred from network signals such as IP address, RFID, WiFi and Bluetooth MAC addresses, and GSM/CDMA cell IDs, as well as user input. No guarantee is given that the API returns the device's actual location.

大致的意思是可以从 GPS、IP 地址、RFID、WiFi、蓝牙 MAC 地址、GSM/CDMA 卡 ID 等获取当前位置信息,具体获取的地理位置根据浏览器实现和设置有所不同。获取的坐标系为国际坐标系。

h5 获取的是国际坐标系不是不好吗?这个问题没有确定答案,主要取决于你开发的应用服务于国内,国外,还是国内外通用。举个栗子:

A同学开发一款移动应用,需要获取用户当前位置,根据当前位置去后端拉去用户周围的门店。简单,用h5 geolocatin 获取当前位置再去,后端拉去一下数据不就行行了。然而第二天就有用户用户投诉:我眼前就有1家门店,返回的门店却是1000m外的门店,难道有人山寨你们?A同学很是头痛,经过一番调查发现,国内坐标系还有多种,而h5 获取的坐标系和后端存储的门店坐标系不一致。

为了避免这种问题可以使用第三方地位服务,例如百度地图API的浏览器定位功能

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MixLab科技+设计实验室

从低保真原型中生成前端代码

今天聊下《 技术 Mix 设计 》的话题。技术与设计两者的边界,越来越模糊,从用机器视觉判断平面设计作品的视觉焦点,到用深度学习指导用户体验设计,还有用深度学习...

2926
来自专栏BestSDK

百度上线深度学习工具Visual DL,提供独立的Python SDK

百度PaddlePaddle & ECharts团队宣布上线深度学习可视化工具Visual DL,该工具可以使得深度学习任务变得生动形象,实现可视分析。百度希望...

3519
来自专栏非著名程序员

Python 如何快速入门?

在过去的几年里 Python 一直在快速增长,尤其是在去年跃居为排名第一的编程语言。在 Stack Ovehrflow 上,关于 Python 相关问题的访问数...

3346
来自专栏企鹅号快讯

只看Java视频资料能成为Java程序员吗

目前国内从事软件开发,Java的占比是越来越高,不说别的在培训视频的绝对量上,Java几乎占据了半壁江山,很多刚接触Java的同学直接从网上搜到一些教程视频,然...

1847
来自专栏诸葛青云的专栏

人生苦短,我用Python

据 IEEE Spectrum 发布的研究报告显示,2017年,Python成为最受欢迎的编程语言,而2016年,Python也是高居第三,可见Python受众...

50
来自专栏玉树芝兰

如何高效学Python?

如果你一直想学Python,但是不知道如何入手,那就别犹豫了。这篇文章就是为你写的。

752
来自专栏九彩拼盘的叨叨叨

听说你想学前端?--非同寻常的前端入门法

但是,学习的效果并不好。最近我读了些关于学习方面的书,觉得学习需要方法。下面我按照重要程度一个个来说。

793
来自专栏程序员维他命

《如何有效整理信息》- 读书笔记

本书作者(奥野宣之)介绍了一个关于整理笔记的方法:“一元笔记法”。该方法摒弃了将笔记进行分类整理的方式,而是采用了一元化的方案:不采用分类记录的方式,而是将所有...

791
来自专栏大数据钻研

想学编程并不难 这样做就可以了

不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之...

2729
来自专栏微信音视频小程序

心随手动,驱动短视频热潮的引擎

在 AlphaGo 名声大噪之前,围棋是一项少有人问津的娱乐项目,不信你可以在记忆里细数一下,当时身边有多少个朋友会下围棋(AlphaGo 出名后一时兴起下两把...

23.4K14

扫码关注云+社区