如何建立一个室内3d导航项目(一)
如何建立一个室内3d导航项目(一)
本文主要分享建立室内3d导航项目的探索过程,默认可以从后台获取到定位数据和导航数据,技术偏前端
一、项目目标
参考百度高德地图app,建立一个类似的导航程序,可以接收自定义的定位数据和导航数据,达到类似的导航效果
手机端可以使用
带3d效果,必要时可以导入并显示3d模型
带语音导航功能
二、初期探索
1.技术选型
1.地图框架
开发地图类应用,首先想到是地图框架,要实现导航组件和地图的显示,又要支持3d效果,最好还是开源,满足这些条件的地图框架其实并不多。
大厂的闭源地图框架,往往给予的自定义开发的权限少之又少,他们虽然组件成熟却并不开放对应的使用方法,比如我想使用他们的导航组件,但定位数据、室内地图、路线都是自己提供,但并没有任何可以上手的方案,除非直接去谈商务合作,这对一个普通的码农不现实,更别说动辄5w一年的商用授权。
闭源不行,那找开源,主流多端就是ios、android、web端(全平台),ios直接pass,剩下的就是android和web端。
在android端,我找到了organicmaps这个开源地图,不得不说这是一个非常优秀的开源地图,组件齐全,开源,界面也好看,我下载了它的开源代码并编译成apk(需要学习一下android项目部署),安装到手机如图。

这个地图框架默认使用的是OpenStreeMap,懂的都懂的原因国内是无法访问的,所以必须修改核心代码,让其接入国内的地图如天地图,看了一阵子代码,直接放弃,毕竟是dalao写的app,代码巨多,没有文档,全凭自己探索,等自己吃透这些代码,猴年马月了。
那有没有有方便开发的文档,又开源的地图框架呢?
android端,我是没找到,当然手搓也是可以实现的,也仅限2d效果,开源的室内导航项目github上是有的,提供了2d地图的旋转,导航,路径规划等,可以参考类似的去实现,如图是笔者手搓的app界面:

手搓自然是效率低下,远不如web端组件方便,好处是纯原生开发,方便调用硬件,比如手机的蓝牙和gps信号。
那么来看web端的框架:
1.leaflet,2d地图框架,比较流行的开源老框架了,可以接入天地图等国产地图,组件丰富,开发方便,2d地图推荐,但是3d是不用想了
2.Cesium,流行的开源web GIS框架(虚幻引擎也可以使用),可以在上面开发导航应用,倾斜摄影推荐,不过我想要的是国内主流的导航界面类似的应用,Cesium更偏向实景应用,比如智慧城市、矿山,3dtiles模型的导入非常成熟,无人机航拍一下,直接导入使用。
3.three.js,流行的3d webgl框架,理论上可以实现任何想要的3d效果,实现导航应用当然也可以,但导航组件只能手搓吧,想基本找不到现成的组件,笔者尝试过手搓,费时费力,想完成一整套导航应用并非易事,不过探索过程中,理通了three.js世界坐标和经纬度坐标的转换,也算是颇有收获,关于three.js世界坐标和经纬度坐标的转换,我会另写一篇博文详细介绍。
4.mapbox,曾经开源免费,现在收费,组件丰富,提供官方文档,支持3d,关键是老版本开源免费,基本的功能也都有,使用新文档进行开发也没有问题,支持国内主流地图的引入,免费的天地图也可以引入,3d模型也能引入,v1.13.3 –免费开源的最新版,推荐使用.
5.其他web地图框架,多数收费或者我没找到,免费开源还支持3d的地图框架,可真是个宝
综上,选定mapbox v1.13.3作为该导航应用的地图框架
2.开发平台
配合地图框架的选型,使用web端进行开发,前端主流开发就行js、ts,vue3、react随便,只要能导入mapbox库便可。
既然是web端,小程序和手机app可以用内嵌网页的方式接入该导航应用
3.关于室内外一体化导航的可能性
室内室外导航无缝切换,首先是统一坐标系,所以统一采用经纬度坐标系。
室外导航部分android端有主流的百度高德导航sdk,可以直接拿来用,web端无导航api,只能实现显示定位点这类简单的功能。
android端已实现初步的室内外一体化导航demo,就是高德导航自动切换手搓室内2d导航。
organicmaps可以自带OpenStreeMap的路线数据,非常不错,是个好框架,吃透这个开源项目后开发室内外一体化导航确实是android端的最优解。
web端理论上也可以通过mapbox手搓出室外导航组件,可是室内导航的路线数据可以我们自己采集,室外数据,你是没法采集的。
综上,笔者想快速实现室内3d导航功能,这个web端一体化导航还是暂时放在一边吧。
三、功能分析
1、定位模式
既然是导航应用,进入界面第一眼看到的便是自己的位置和方向所在。
具体来说,得实现一个带方向的定位点,显示到地图上。
2、导航模式
路线显示、文字提示、语音提示、带方向的定位点、定位点沿路线移动、导航进度条等。
核心是路线显示,从后端请求经纬度列表连成路线显示到地图上。
3、效果优化
定位点等其他组件的动态移动加入动画平滑的效果
四、结束语
通过一系列的探索,笔者初步确定了实现室内3d导航应用的方向,由此可见技术选型十分重要,千万不要在一个方向死磕,合适的技术选型能使项目开发事半功倍。
接下来,可以开始上手实践了!
笔者后续的文章,将会介绍基于mapbox的室内导航的具体实现。