定位失败?what

最近项目中有一需求要实现手机定位当前城市功能, 查了高德地图api,根据文档说明很快就做出来了。
AMap.plugin('AMap.CitySearch', function () {
var citySearch = new AMap.CitySearch()
citySearch.getLocalCity(function (status, result) {
if (status === 'complete' && result.info === 'OK') {
// 查询成功,result即为当前所在城市信息
}
})
})
然而在测试阶段,出现了一些问题:

当手机连接wifi的时候,明明在北京却定位到了上海,

或者在浙江的测试人员4g情况下无法定位

更或者河北的直接定位到了郑州......心里一片妈卖批。后台将高德的地图编码全都转成自己对应的数据了,这时候更改定位方式,保不齐要杀我祭天。

于是赶紧滚过去撸一下开发文档:

en ...似乎没什么问题

那么再去看看手机定位的原理吧。

手机定位的原理

一般情况下手机定位的方法有GPS定位、基站定位、WIFI定位、蓝牙定位、地磁定位等。其中蓝牙定位和地磁定位主要用于室内定位技术,在百度地图和高德地图的室内定位技术中应该都曾经尝试用过这两项技术,百度还专门投资了一家做地磁定位的芬兰新创企业IndoorAtlas。这两种方法一般人都用不到,可暂时略过。

1.GPS定位

利用手机中的GPS模块获取位置信息,不仅能获取经纬度,还能包括海拔高度、方向角度等信息。众多周知,GPS是通过三角定位的原理来实现定位的。即为了计算地面的空间坐标(x,y,z),理论上GPS接收机只要通过3颗卫星获取当前位置到三颗卫星的距离,就可以构造三个方程求解三个未知参数x,y,z。但实际上卫星钟与GPS接收机的石英钟是不同步,这样就会出现一个新的未知数-时钟差,因此就需要同时接收到4颗以上的卫星信号构造四个方程来求解定位点坐标。

在城市高楼林立的环境下,GPS信号遮挡严重,所以定位效果要比在开阔地差很多。除此观测卫星数量的原因外,复杂的环境也是降低GPS自身的精度的原因所在。

大气层影响

大气层中的电离层和对流层对GPS信号会起到延迟的作用,电离层对电磁波的折射效应使得GPS信号的传播速度发生变化,对流层同样会对电磁波产生折射效应,从而影响GPS信号的传播速度。

卫星星历误差

卫星星历是由地面监控站跟踪监测卫星求定的。由于卫星运行中要受到多种摄动力的复杂影响,而通过地面监控站又难以充分可靠地测定这些作用力或掌握其作用规律,因此在星历预报时会产生较大的误差。它不仅严重影响单点定位的精度,也是精密相对定位的重要误差来源。

卫星时钟误差

卫星钟差是指GPS卫星时钟与GPS标准时间的差别。为了保证时钟的精度,GPS卫星均采用高精度的原子钟,但它们与GPS标准时之间的偏差和漂移和漂移总量仍在1ms~0.1ms以内,由此引起的等效误差将达到300km~30km。这是一个系统误差必须加于修正。

多径效应

多径效应由于接收终端周围环境的影响,使得接收机所接收到的卫星信号中还包含有反射和折射信号的影响,这也是影响在室内和城市楼宇密集的地区定位偏差大的一大因素。

  1. 基站定位

基站定位主要是通过移动网络运营商搭建的基站实现定位。它的基本原理是通过移动设备测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of Arrival,到达时刻)或TDOA(Time Difference of Arrival,到达时间差),根据该测量结果并结合基站的坐标采用三角公式估计算法,就能够计算出移动设备的位置。一般而言,移动设备观测到的基站数目越多,测量精度越高,定位性能改善越明显。

所以基站定位精度依赖于基站的密度,密度越大,定位越精确。

  1. WIFI定位

它的原理大概如下:每一个无线AP都有一个全球唯一的MAC地址(中国山寨比较多,所以在中国的WIFI定位技术会更加复杂),并且一般来说无线AP在一段时间内是不会移动的; 设备在开启Wi-Fi的情况下,即可扫描并收集周围的AP信号,无论是否加密,是否已连接,甚至信号强度不足以显示在无线信号列表中,都可以获取到AP广播出来的MAC地址;设备将这些能够标示AP的数据发送到位置服务器,服务器检索出每一个AP的地理位置,并结合每个信号的强弱程度,计算出设备的地理位置并返回到用户设备.

WIFI定位的精度取决于位置服务商的数据库的准确度和实时性。有的时候你可能会发现自己搬家到了一个新的地方,把之前的路由器也带过来了,一段时间内手机定位总是把你定位到之前住的地方,就是这个原因。

各种定位方法自身的缺陷和误差都会导致定位结果的误差。当然国内为了国家安全的考量,会对电子地图供应商的定位结果进行非线性偏移,这种被称为火星坐标系的偏移也会造成定位精度的偏差。

排查问题

在仔细看完定位原理和高德地图api的文档, 发现高德的citySearch方法仅仅支持ip定位。

地理定位

高德地图的geolocation定位方式说明中提及了整合了浏览器定位、精确IP定位、sdk辅助定位多种手段;

看看文档:
mapObj = new AMap.Map('iCenter');
mapObj.plugin('AMap.Geolocation', function () {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true,//是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:无穷大
maximumAge: 0, //定位结果缓存0毫秒,默认:0
convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
showButton: true, //显示定位按钮,默认:true
buttonPosition: 'LB', //定位按钮停靠位置,默认:'LB',左下角
buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
zoomToAccuracy:true //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
});
mapObj.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息
});
在这段代码中有很多配置项,那么定位是否也能进行配置呢?

找到它 进行配置就可以了。

然而问题并非能这么快解决的, 高德的ip城市定位和地理定位方法返回的adcode值是不一致的;ip城市定位的adcode 仅仅代表市,比如北京市:110000, 而在地理定位中的adcode 可以直接定位到区,比如城市仍可以继续显示北京市,而adcode的值却变成了 110108。那么这时,就需要跟后端协商确认是否已经将所有的省市区的编码入库。另外仍需要考虑实际问题是全国的各种高新技术开发区或者区与区之间的合并都会引起数据错误,也都需要及时进行更新国家标准城市编码信息。

如何改善用户体验

在定位系统无法做到万无一失的情况下, 加入手动选择所在城市是一个不错的选择。

例如京东的定位功能然错把北京的我定位到了湖北,但它附加的手动选择很好的补全了定位不准的问题。

==嗯,得去跟产品设计好好聊会天了。

前端小白一枚, 欢迎指正。

转载于:https://www.cnblogs.com/lanhuona/p/9995844.html

用高德js api做h5定位功能相关推荐

  1. H5开发:调用高德地图api实现H5定位功能

    关于定位,分为GPS定位和网络定位.本文将详细描述的浏览器定位,属于网络定位.这是一种通过使用高德JS-API来实现位置定位.城市定位的方法,包含了IP定位,检索等多种网络定位方式.如果您的手机支持G ...

  2. 【高德地图API】从零开始学高德JS API(一)地图展现——仙剑地图,麻点图,街景,室内图...

    原文:[高德地图API]从零开始学高德JS API(一)地图展现--仙剑地图,麻点图,街景,室内图 摘要:关于地图的显示,我想大家最关心的就是麻点图,自定义底图的解决方案了吧.在过去,marker大于 ...

  3. 转载:高德地图API学习 从零开始学高德JS API(一)地图展现

    原文地址:https://www.cnblogs.com/milkmap/p/3687855.html [高德地图API]从零开始学高德JS API(一)地图展现--仙剑地图,麻点图,街景,室内图 摘 ...

  4. 【高德地图API】从零开始学高德JS API(四)搜索服务——POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索

    原文地址为: [高德地图API]从零开始学高德JS API(四)搜索服务--POI搜索|自动完成|输入提示|行政区域|交叉路口|自有数据检索 摘要:地图服务,大家能想到哪些?POI搜素,输入提示,地址 ...

  5. android开发之高德地图API篇:1、高德地图API之实时定位+轨迹可视化

    TIME:2020年7月6日 高德地图API之实时定位+轨迹可视化 前言: step1.工程的配置 step2.显示地图 step2.实现静态定位: step3.实时定位 step4.实现轨迹可视化: ...

  6. Android使用高德地图api实现基础定位

    Android使用高德地图api实现基础定位(一) 关于 会获取SHA1的可自行跳过这一步 第二步引用高德sdk 第三步修改MainActivity.java 关于 这篇主要讲如何使用高德sdk(不是 ...

  7. 【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物

    原文地址为: [高德地图API]从零开始学高德JS API(三)覆盖物--标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的 ...

  8. 关于百度地图js api的getCurrentPosition定位不准确的解决方法

    关于百度地图js api的getCurrentPosition定位不准确的解决方法 参考文章: (1)关于百度地图js api的getCurrentPosition定位不准确的解决方法 (2)http ...

  9. 高德地图API之IP定位

    高德地图API之IP定位(替换你的KEY) IP定位API:http://lbs.amap.com/api/webservice/guide/api/ipconfig package com.gdma ...

最新文章

  1. 如何在数据库中高效实现订座功能?
  2. c++ time函数_Python22个构造函数法助力数据挖掘与分析
  3. 苹果芯片工程师又被挖!这次是微软,要自研Azure服务器芯片
  4. HDU 4628 Pieces(DP + 状态压缩)
  5. Pycharm安装pip pip安装第三方模块
  6. ogg 故障解决一则
  7. Spark transformation算子案例
  8. html做转盘指针被压住,爸爸特制“写作业”转盘,被儿子反套路:愿赌服输!...
  9. 微信企业号第三方应用开发[一]——创建套件
  10. android int 首位值_Android中数值的精确计算
  11. windows系统bat批处理 mysql 脚本启动关闭
  12. oracle11g服务配置,oracle11g dg broker配置服务的高可用
  13. 亮宁机器人套件_亮宁机器人可视化平台V2.2第3讲(图文)
  14. 【历史上的今天】2 月 11 日:首款 Ubuntu 手机问世;苹果的天使投资人诞生;电子工业联盟正式停运
  15. (渣男渣女必备之)层次分析法AHP-Analytic Hierarchy Process操作流程及代码实现
  16. android studio透明背景,使用Android Studio时出现黑色的PNG透明背景
  17. c语言.jpg图片转成数组_jpg图片不仅能转成PDF文档格式,还可以一键合并!
  18. 机械设备网站建设多少钱
  19. 如何友好提示vue3.0不再支持IE11及以下的浏览器版本
  20. 锐捷BFD+VSU配置

热门文章

  1. 上海的“户口”和“居住证”到底有哪些不同?
  2. Word2016中添加目录
  3. 卷积神经网络(CNN)系列介绍之一 (LeNet-5 / AlexNet / GoogLeNet / VGGNet / BNInception / Inceptionv3)
  4. ChinaJoy凸显中国游戏业十大矛盾
  5. 基于javaweb的报销erp系统(java+ssm+jsp+layui+jquery+mysql)
  6. ORB-SLAM2 ORBmatcher.cc读代码一
  7. 设置图片和文本框垂直居中
  8. UE5 Meerkat狐獴演示Demo分析
  9. 腾讯Bugly 集成( Android SDK)
  10. 一边学计算机一边上班累的说说,上班累了的心情说说_上班的心情说说精选