入职新公司以来的第一项任务就是参与原有导航系统的重构。原有的导航系统基本上就是在高德地图API的基础上做了一次封装,现在希望能慢慢建立自己的导航系统。

一般来说,导航系统可分为以下部分:

1、地理基础数据。包括地图、天气数据、交通数据、行政规划数据等。国外来看的话,地图数据较为开放。国内的话,地图数据的保密性比较高。一般具有测绘资质的公司才有资格进行地图测绘,拥有地图数据。获取地理基础数据的通道就是通过这些公司,例如高德、百度等。或者有些有钱的直接购买地图数据,但是这样一来地图更新的难度就比较大了。另外一方面,可以通过开源地图的方式获取地理数据,通过OSM(Open Street Map)等平台可以下载数据,但是这些数据在精度的和实时性上是没有办法保证的。(数据下载地址: http://download.geofabrik.de/);

2、底层算法实现。当我们拥有地图数据的时候,就要考虑如何通过相关的算法实现例如:最短时间、最短距离、最低成本等功能。这些都可看做为导航系统的基础功能。说道最短理解算法,不得不提到的是迪杰斯特拉算法,可以算法最短路径算法鼻祖一般的存在。但是由于其本身的效率问题,在工业应该中往往不会直接使用迪杰斯特拉算法,而是对算法进行改进。目前应用比较多的有:A*算法,CH(Contraction Hierarchies)算法,以及由微软硅谷研究院三名工程师提出的Crp(customizable route planning) 算法,这个算法目前被应用在Bing地图中。

3、业务系统实现。有了地理基础数据,并且实现了算法之后,你就可以结合实际的业务需求,真正开始导航系统的开发。

分析完导航系统的组成部门之后,我们来探讨以下具体的实现方案。我将实现方案分为三种:

1、完全借助第三方API来实现,借由第三方的地图数据和算法接口实现,例如上面提到高德以及百度API。优点:开发难度低,地图数据更新效率高,算法应用较为成熟,精度度高;缺点:财力成本大,核心技术难以掌握,对第三方依赖大,难以加入具有本身特色的导航系统,因为是通过远程web服务调用实现的,请求响应速度无法保证;

2、借助第三方提供的地图数据,自己完成算法和业务逻辑实现。优点:开发财力成本低,核心算法实现自己掌握,可加入自身已有运营数据,本地部署服务,响应速度快;缺点:开发技术难度较大,人力成本高,算法实现效率可能需要稳步提升;

3、借助开发数据和自身已有运营数据整合为地理基础数据,自己实现算法。优点:导航系统架构自己控制,无需额外购买第三方资源,缺点:地图数据准确性无法保证,开发技术难度大。

在具体的实现中,可以根据自己公司的特色进行导航系统的开发。个人比较倾向于第二种方案。此外,这里推荐一些开源的地图导航算法库:

https://wiki.openstreetmap.org/wiki/Routing,对基于OSM数据的导航实现库进行了一个总结,开源在这里找到很多有用的资源;

推荐两个不错的开源库:

OSRM(Open Source Routing Machine),https://github.com/Project-OSRM/osrm-backend

C++编写的导航路径计算库。给定两个地理坐标,通过OSRM可以计算其间的路径、距离、交通时间,并提供 HTTP 和 C++ 的接口,提供的服务:

Nearest :根据坐标查找最近的匹配目标;

Route:查找坐标间最快的路径

Table :计算路径上坐标之间的时间和距离

Match:捕捉GPS噪点

Trip:旅行商问题(Travelling SalesMan problem),寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。

Tile :生成Mapbox矢量切片

优点:

导航文本支持中文,支持汽车、自行车、步行模式,也可以通过profile定义进行定制化

GraphHopper(https://github.com/graphhopper/graphhopper/):GraphHopper是一种快速且内存有效的Java导航引擎,默认使用OSM和GTFS数据,也可导入其他的数据源。支持CH(Contraction Hierarchies)、A*、Dijkstra算法。

分为两个版本:开源和商业版本,

具体情况参照另一篇博客:https://blog.csdn.net/haochajin/article/details/99851216

如何开发一个地图导航系统相关推荐

  1. Orchard:使用VS2010来生成一个地图Content Part

    本篇介绍使用VS2010来开发一个地图Map part,然后在一个内容项中显示一个地图图片.在本文最后我将附上本示例的模块代码,大家可以下载进行查看.如果你还不知道如何生成一个Content part ...

  2. flutter 获取定位_从头开发一个Flutter插件(二)高德地图定位插件

    在上一篇文章从头开发一个Flutter插件(一)开发流程里具体介绍了flutter插件的具体开发流程,从创建项目到发布.接下来将会为Flutter天气项目开发一个基于高德定位sdk的flutter定位 ...

  3. [python] 开发一个跟随角色移动的地图游戏demo

    用python开发一个2D角色游戏的地图Demo 如今很多大学生大学学习了编程语言,想做游戏却迟迟做不出一个游戏雏形来,接下来就和大家谈论下游戏中地图移动的简单原理并用python这一门非常火的语言进 ...

  4. vc6开发一个抓包软件_开发一个软件多少钱?传统app开发与0代码app制作方法对比...

    开发一个软件多少钱?app开发难吗?app制作需要哪些流程? app开发很难:按照传统的开发方式需要最少5名以上的技术人员,团队配合花费3个月左右的时间才能搞定,成本20万以上. app开发也很简单: ...

  5. 用Java开发一个停车场系统

    作者:亰 blog.csdn.net/weixin_43951778/article/details/109643951 现开发一个停车系统,用户根据车位停车 1)车主查看现在有无车位(最多100个车 ...

  6. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应

    (转)IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油 ...

  7. IOS开发百度地图API

    IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...

  8. 室内地图导航系统基础功能与衍生服务详解

    室内地图导航系统的开发和使用不仅弥补了室内寻路困难的问题,室内地图作为信息化.智能化应用的基础,在其基础上开发出如:人员位置.营销推广.公共安全等衍生功能,为智慧生活添砖加瓦.随着智慧城市的推进,室内 ...

  9. JavaFX开发的地图编辑器WiTKMapEditor(更新GitHub地址)

    其实早在几年前就有开发一个自己的游戏地图编辑器的想法,当时使用JavaSE开发的,纯属练手.结果后来笔记本出问题了,数据丢失,代码都找不回来了. 于是便准备重新开发一个游戏地图编辑器的,因为自己偶尔会 ...

最新文章

  1. photoshop CS5 Dreamweaver CS5序列号及完美破解方法
  2. acwing1086||HDU4507数位dp[恨7不成妻]
  3. 数学(莫比乌斯反演):HAOI 2011 问题B
  4. ICLR 2020 开源论文 | 多关系图神经网络CompGCN
  5. 微信读书vscode插件_跟我一起读源码 – 如何阅读开源代码
  6. 温故知新,.Net Core遇见WinForms客户端窗体框架,在DotNet Core大一统基础上老树发芽...
  7. 数据库中字段类型Number(n,m)大概说明
  8. 快速锁屏电脑快捷键_电脑小技巧
  9. Windows下Python3.6安装PIL
  10. python如何去某一列的元素
  11. IC卡防复制 设备联网 动态密钥方案说明 一卡通 门禁卡防破解Mifare卡低成本动态加密实现思路
  12. 在线英英词典完整代码
  13. 你应该知道的十大常见黑客技术
  14. 优化计算机组策略,Windows 10神州网信版优化
  15. SharePoint2016 - How to create App Catalog site?
  16. 同学们上课,今天我们学习:UI 操作一定要在 UI 线程吗?
  17. 微软2015校园招聘 技术类职位在线笔试-题目1 : Browser Caching
  18. 学习笔记之——李群与李代数的理解
  19. 『开发技巧』全网最详尽手把手教你在Ubuntu安装搜狗输入法
  20. 动态规划多段图和货郎担问题

热门文章

  1. UDS诊断故障码及诊断服务介绍(14h, 19h, 85h)
  2. 天然气故障代码大全_天然气故障码表
  3. Linux学习之错误与解决记录(持续更新)
  4. TIA博途中无法添加HSP硬件支持包的解决办法
  5. Error while importing package: Couldn’t decompress package
  6. iOS QQ 扫一扫 捷径URL
  7. 上dj是什么意思_这个世界上根本没有迪迦奥特曼什么梗?抖音迪迦奥特曼的梗什么意思...
  8. P4711 「化学」相对分子质量
  9. 从飞思卡尔到NXP,经久不衰的i.MX系列产品背后的“成功学”
  10. 腾讯云部署hexo博客系统