草庐IT

手绘地图制作的关键点之“导航智能纠偏”

轻轻的烟雾 2023-03-28 原文
这里再来聊一聊关于手绘地图导航的智能纠偏问题。
其实这个问题,在《手绘​地图制作的关键点之“实时导航”》一文中,已经有过简述,这里再来细聊一下。本文纯属方案探讨,也是景运管家手绘地图智慧导览系统的导航功能的具体实现,但不作为技术标准。

作者:景运管家 ● 轻轻的烟雾(z281099678)


 

一、智能纠偏的原因
1.设备因素
终端导航设备(一般是手机)的定位,不可能达到十分精确。即便是军用,也会有一个误差区间,而民用当然误差会更大一些。其中原因大体上可能为如下几类:
一是出于安全、保密等因素,不允许民用设备定位过于精准;
二是出于成本因素,要达到高精度的定位,不单对于终端设备(手机)的性能要求很高,对于定位卫星的要求也很高;
三是技术原因,目前的技术从根本上来说,不可能达到分米、厘米级别的精度。当然,从这个角度来说,“精度”本身也是一个模糊的概念,达到十米级、米级算是高精度吗,到底精度要达到多少才是所谓的“高精度”?这就已经不是一个技术问题了。
而换个角度来说,对于民用,过高的定位精度需求其实并无多大意义。比如最常用的导航使用场景来说,定位精度达到了几米甚至十几米,完全几乎不影响正常使用。比如导航到某个饭店、某个学校大门等,绝大部分目的地,使用者都可以在几米、十几米甚至几十米之外发现,而过于精确的定位在这时其实就几乎没有实质意义了(这里强调的过于精确,如精确到米级甚至更高)。
2.常见原因
而一些常见的因素,更会放大设备因素导致的误差,比如设备本身的性能千差万别、当地信号的强弱、天气状况、是否有高大遮挡物等情况。因此导致设备的定位,不会是一个固定的值,而是在一个区间范围内不停的变化。
因此,如果按照手机返回的经纬度来定位,则用户会非常快速的在一定范围内不停跳跃。这容易让人感觉非常不解,当然也很影响体验,严重降低实用效果。

 

因此,智能纠偏就显得至关重要,需要设计方案来进行处理。

设备没有移动,但是系统返回的经纬度一直在不停的变化

 

二、智能纠偏的现象
既然设备不能做到稳定而高精准的定位,那在导航软件的使用上,有没有什么证据可以证明也使用了智能纠偏吗?我个人认为答案是肯定的。比如说这些现象:
1.位置初始化
当打开导航软件的时候,在初始化的时候,经常能看到自己的位置会做几次跳跃。
2.导航路线切换
当使用导航模式的时候,特别是驾车时,经常会有这样的场景:本来正常路线是向右上高架,但是驾驶人走错道而直行了。这时候导航软件并不会立即发现,而是显示定位跟随着正常的路线向右上高架,一直要偏离到较远的距离时,导航软件好像才“如梦初醒”一样反应过来,重新规划切换路线。
这一点表现,特别的说明智能纠偏的现象。在最开始驾驶人走错路线的时候,导航软件会认为这是设备的定位出现了“正常的偏差”,因此智能的纠偏到了“正确的路线”上。只不过这种时刻,智能纠偏反而是真正的出错了。
 
 
 
三、智能纠偏的技术方案
智能纠偏既然是“势在必行”的方案,那具体如何实现智能纠偏呢?我认为,这是一个比较复杂的问题。需要综合考虑。大致会有这几个方面因素:
1.地图平台系统预置的路线
当用户定位初始化完成后,地图系统会判断用户当前位置最近的路线,而用户规划了导航路线之后,系统就会寻找最近的路线的点位,当用户处于导航状态而且开始移动之后, 地图就会把用户的位置自动“锁定”到系统预置的路线点位之上。
2.用户的前进方向、速度、海拔、地形等因素
虽然系统把导航状态的用户位置“锁定”到了路线点位上,但是用户在路线上的位置的更新和移动,还需要结合用户的设备本身定位及当前前进速度来计算。
比如设备偶尔会出现定位误差较大的点,对于这样的异常状况,系统算法会识别出来,并做过滤及纠偏处理。不会让用户感觉到自己突然“飞”到一个很远的地方去了。而具体如何纠偏,就需要结合用户当前的各种状态:
根据用户是前进方向,判断当前的移动方位;根据用户的速度,结合用户所在的海拔、地形等因素,计算当前移动的距离,再通过用户上次的位置,就能综合计算出当前应该所在的位置,把用户的位置控制在真实而友好的位置。
当然,对于确实偏移过大的情况,也不能强行纠偏。因为这种情况,我们其实是不知道到底是用户确实已经偏离太大,还是手机定位出现的较大误差。这时可以根据实际情况提示用户已经偏移路线,或者待手机定位自动恢复正常。
 
 
四、智能纠偏的效果
通过智能纠偏,清洗过滤掉异常定位,增加了定位精度,加强了定位的稳定度,极大的提升了用户体验。甚至可以说,没有智能纠偏,定位就无法真正的投入使用,无法产生真正的实用价值。因此智能纠偏的效果,可以说从根本上决定和发挥了定位的真正使用价值。
下面两个对比图,可以明显的看出,定位的误差已经达到米级其实(这是一个小学的门口,注意看地上的交叉的标线)。

 

 

手绘地图制作系列文章:
1、景区手绘地图(电子地图、智慧导览系统)如何制作 :https://zhuanlan.zhihu.com/p/545799211
2、景区手绘地图的绘制流程https://zhuanlan.zhihu.com/p/547783146
3、手绘地图制作的关键点之“图层覆盖”: https://zhuanlan.zhihu.com/p/550856377
4、手绘地图制作的关键点之“实时导航”https://zhuanlan.zhihu.com/p/554833306

有关手绘地图制作的关键点之“导航智能纠偏”的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  3. ruby - Ruby 的 AST 中的 'send' 关键字是什么意思? - 2

    我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的

  4. ruby - 为什么 return 关键字会导致我的 'if block' 出现问题? - 2

    下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson

  5. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  6. ruby - 在 Ruby 中跳过额外的关键字参数 - 2

    我定义了一个方法:defmethod(one:1,two:2)[one,two]end当我这样调用它时:methodone:'one',three:'three'我得到:ArgumentError:unknownkeyword:three我不想从散列中一个一个地提取所需的键或排除额外的键。除了像这样定义方法之外,有没有办法规避这种行为:defmethod(one:1,two:2,**other)[one,two,other]end 最佳答案 如果不想写**other中的other,可以省略。defmethod(one:1,two:2

  7. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  8. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  9. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  10. ruby - 如何在ruby中制作动态多维数组? - 2

    我有一个关于多维数组的初学者ruby​​问题。我想按年份和月份对条目进行排序。所以我想创建一个包含年->月->月条目的多维数组所以数组应该是这样的:2009->08->Entry1->Entry209->Entry32007->10->Entry5现在我有:@years=[]@entries.eachdo|entry|timeobj=Time.parse(entry.created_at.to_s)year=timeobj.strftime("%Y").to_imonth=timeobj.strftime("%m").to_itmparr=[]tmparrentry}@years.pu

随机推荐