整 理:朱 兵
时 间:2016-02-05
说 明: 定位的相关知识
摘要:关于定位,分为GPS定位和网络定位2种。GPS定位,精度较高,可达到10米,但室内不可用,且超级费电。网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点。定位数据库可以不断完善不断补充,所以,越定位越准确。
一、常见的定位:
①GPS全球定位。
常见的GPS定位的原理可以简单这样理解:由24颗工作卫星组成,使得在全球任何地方、任何时间都可观测到4颗以上的卫星, 测量出已知位置的卫星到用户接收机之间的距离,然后综合多颗卫星的数据就可知道接收机的具体位置。
在露天环境下效果较好,获取位置信息非常精确。适合移动设备。
缺点:在地铁等位置效果较差
②IP地址定位。
适用于接入互联网的设备,通过浏览器是将位置信息发送给 ISP 服务商来解析,其IP 地址与服务商所在位置有关,可能与用户所在位置不同,所以这种方式的解析容易出现偏差。
③WiFi定位。
设备只要侦听一下附近都有哪些热点,检测一下每个热点的信号强弱,然后把这些信息发送给网络上的服务端。服务器根据这些信息,查询每个热点在数据库里记录的坐标,然后进行运算,就能知道客户端的具体位置了。一次成功的定位需要两个先决条件:客户端能上网 ,侦听到的热点的坐标在数据库里有。
优点:这种方式与GPS效果同样精确,适用于室内环境的移动设备。
- 你的这个wifi信号,如果在数据库中没有被记录在案,那就没法定位了。比如,如果你买了个新的无线路由器,靠它肯定是没法帮助你的移动设备定位的。
- 数据更新有延迟,WIFI覆盖并不大,局限
原理说明:当你的移动设备需要使用wifi定位的时候,它会搜索周围的wifi信号,同时在数据库中搜索,得到地理位置的数据,加上定位提供商收集的海量数据,能够构建出信号的“指纹”,比基站定位更精准。
④基站定位
我们把手机基站的覆盖范围想像成一个个以基站为圆心的圆,需要定位时,手机就向周边多座基站发送测量信号,并计算这些测量信号到达基站所需要的时间,推算出手机距离基站的直线距离,再经过数学运算,手机位置坐标就可由3个基站圆的交点来确定。
优点:LBS定位的优势是方便、成本低,因为它是通过手机进行定位的。理论上说,只要计算三个基站的信号差异,就可以判断出手机所在的位置,而且用户所持终端只需一部手机即可。因此,只要用户手机有信号,就可以随时进行位置定位,而不受天气、高楼、位置等影响。
缺点:定位精度随所处位置基站数不同会有变化。
百度地图等在web开发时并不提供相关api
二、测试结果:
初步得到的结果:GPS>WiFi/基站>IP
三、业务说明:
2、web开发的话
浏览器定位插件,封装了标准HTML5定位,并且包含纠偏模块。
备注:获取经纬度数据,想获得地址,需要纠偏,再使用接口获得。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。
Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。
注释:对于拥有 GPS 的设备,比如 iPhone,地理定位更加精确。
更多可参考geekman的文章:http://blog.geekman.vip/archives/446
★浏览器定位,最好使用在手机浏览器上,会更加准确,也更加符合使用场景。PC浏览器上,建议使用IP定位。
通过网络获取IP信息,然后查询IP数据库,获取相应的地址信息。
IP数据库也是可以完善补充,越来越丰富的,所以也是越使用越准确的。
但如果IP有跳转,有篡改等,那么IP定位就会不准确了。
demo:http://developer.baidu.com/map/jsdemo.htm#i8_2
具体api地址在:http://api.xinfotek.com/apidoc/doc/
1、js是浏览器端,而web是服务端。
2、在使用上Web更简单,若只想使用服务,直接通过调用接口获取结果的话,并且需求量并不大的 时候,建议使用web。(百度js调用次数不限)
3、想展示地图,或者超过接口限制,比较复杂的web开发,想要的功能并没有提供相应的接口,会需要用到js。
秘钥分为浏览器端,服务端,
引用微信js即可使用
示例一:使用微信内置地图查看位置接口
wx.openLocation({
latitude: 0, // 纬度,浮点数,范围为90 ~ -90
longitude: 0, // 经度,浮点数,范围为180 ~ -180。
name: '', // 位置名
address: '', // 地址详情说明
scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
});
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
success: function (res) {
var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
var speed = res.speed; // 速度,以米/每秒计
var accuracy = res.accuracy; // 位置精度
}
});
四、其他说明