让我们考虑一个地图引擎系统。。。

传统的GIS数据库,如ArcGIS这种传统桌面型的软件,主要还是强调测绘模型数据的规范化输入。GIS的本质上在于多维索引,对一个最简单的平面地图来说,主要就是靠最原始的GPS芯片返回的经纬度坐标。问题是,即使静止在同一个位置,由于地球在自转(?),卫星反射返回的信号时间可能不一样,这样得到的经纬度坐标不能保持一模一样。更不用说移动中的目标(汽车)了。中国的GPS坐标还会涉及到一个非线性的加密扰乱,人为地降低精度。

PostgreSQL(pg)数据库有一个插件,可以用于存储POI(Place of Interest,或Point of Interest),即附带了经纬度坐标属性的数据记录。经纬度坐标可以认为是2维的数值型数据,但是坐标系本身却又有额外的问题:经纬度坐标是球面的,并且它有多不同的国际标准。假如我们不考虑这个,即不要求绝对精确的网格系统,只要求保证每个维度上的严格偏序关系成立即可,则GIS数据库引擎本身的目标就是:

给定一个POI查询位置,快速返回一个包含此POI的最小区域范围?

考虑SQL数据库里的key,它是一个1维的value range index。而GIS的key是2维的,如何实现索引呢?一般就是R树(包围盒)、k-d树(相当于扩展的B+树,每个维度轮流索引)或者是某些混合方案,当然还有一个基于GeoHash的快速定位。原则上,不同的最小区域在边界处可能是有重叠的,因此,为保证查询结果不会遗漏,需要查询一个POI所在区域的9宫格邻域,当然也有使用6边形的,不规则多边形、三角形当然也可以(数学的离散几何里的平面镶嵌)。

对R树而言,最简单的是基于实时计算机图形学里的BSP概念的划分,当然,也可以使用4叉树、八叉树,n叉树,其本质就是对于一个2维的(x,y)坐标,划分函数,要求能够高效决定查询落在哪个子范围内,如此就可以快速地以log复杂度定位最终的最小包围区域了。考虑到实际这些最小区域中的POI对象的密度不均匀,这些划分方案最好应该是自适应的,即:原生的就解决掉数据倾斜(分布不均匀)的问题。

当需要将一个平面地图绘制出来时,无非就是一个分层问题,以及每个图元的2D图形学绘制。三角形、矩形这类简单的对应建筑物的,以及河流、道路对应的Bezier曲线。GIS中可能需要额外考虑高度维度,即等高线的绘制(很容易联想到机器学习里的梯度下降),而城市交通地图里建筑物虽然有简单的根据高度绘制的3D效果,但是实际上却没有室外与室内的无缝对接,以及室内每一层的平面结构示意图。

好吧,现在考虑地图引擎里的导航模块,From anywhere to anywhere。通常每个道路的对接点可以看作图的一个顶点,道路就是边,而道路的长度,或者依据交通工具的不同(步行、自驾、公交)所花费的时间作为权重,这样就可以运行一个Dijkstra算法。但是这个算法对于对于所有的道路连接情况而言,显然规模太大了,需要做一个“预聚类/聚合”处理,即小路优先合并到大路,最后汇并到主干道/高速公路什么的。

当实现实时导航功能时,需要及时作出转弯/直行的提醒,为了实现这个目标,数据库除了需要adjacency查询性能高效以外,还需要能够根据当前的速度作为合理的预测,就像雷达预测空中飞机的下一个时刻的位置一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蝉知企业门户系统是由业内资深开发团队开发的一款专向企业营销使用的企业门户系统,企业使用蝉知系统可以非常方便地搭建一个专业的企业营销网站,进行宣传,开展业务,服务客户。蝉知系统内置了文章、产品、论坛、评论、会员、博客、帮助等功能,同时还可以和微信进行集成绑定。功能丰富实用,后台操作简洁方便。蝉知系统还内置了搜索引擎优化必备的功能,比如关键词,摘要,站点地图,友好路径等,使用蝉知系统可以非常方便的搭建对搜索引擎友好的网站。 蝉知的特点: 1. 首先,我们是专门做企业营销网站。 蝉知系统是专门面向企业营销网站的,所以功能更具有针对性。我们内置了文章、产品、会员、论坛、评论、帮助、博客等诸多功能,完全可以应对企业营销网站的各种需求。 蝉知系统特别重视搜索引擎优化,内置了关键词管理、摘要、站点地图等功能。同时只要环境支持url重写,就可以生成搜索引擎非常喜欢的路径结构,比如/news/123.html这样的路径。 蝉知系统后续会内置基本的统计数据,哪怕网站只有一个用户访问,也要让您清清楚楚的知道网站有人在访问。这样网站不再是死的网站。 2. 其次,蝉知系统是真正的开源免费 蝉知系统是目前唯一开源免费的企业门户系统。 蝉知系统协议宽松,商业友好,代码完全开放,是真正的开源。 蝉知系统不限制商用,也不会为了推我们后续的一些收费功能或者服务故意的在产品中做很多限制。 3. 蝉知系统技术先进,注重用户体验 蝉知系统使用自主开发的框架搭建,架构更加合理。 内置完善的扩展机制,方便企业后续的二次开发。蝉知系统的首要定位是帮助企业解决营销问题,当营销问题解决之后,企业会考虑在蝉知系统上搭建自己的业务系统,比如报名、订单之类的业务。这时候在蝉知系统基础上进行二次开发是非常容易的事情。 蝉知团队不断的学习业内先进的设计理念,给大家提供简洁方便的产品。 4. 使用支持有保障 别人做开源,也许只是兴趣。而我们做开源,是专职在做,以正规的公司形式来运作。 我们有将近十年的开源软件开发和维护经验,对开源软件的后续开发、支持有丰富的经验。 我们团队和系统足够开放,后续我们会着手打造一个面向企业营销市场的小生态系统,吸引第三方的设计师、网站建设公司参与。   安装环境:php5.3-5.6  蝉知企业门户系统 v8.1 修改记录: 1.功能模块中增加对用户案例模块的控制项 2.调整控制台区块展示 3.调整后台整体的配色方案 4.将LOGO和幻灯片分成两个模块展示 5.设置js和设置css按钮移到了“更多”操作里 6.英文版的所有页面标题中添加空格 7.优化某些浏览器下加载抖动的问题 8.优化后台右下角的蝉知LOGO 9. 修复开启必须登陆设置后,微信登陆无法使用的BUG  10. 修复其他BUG
### 回答1: 开发一款地图导航应用需要掌握以下技术: 1. 地图引擎:使用地图引擎技术,如Google Maps API、OpenStreetMap等,可以实现地图的显示和操作。 2. 定位技术:使用GPS、Wi-Fi、蓝牙等技术来实现用户的位置定位。 3. 路径规划:使用算法,如Dijkstra算法、A*算法等,来实现从用户当前位置到目的地的最优路径规划。 4. 数据库技术:存储和维护地图数据,如道路信息、POI信息等。 5. 移动开发技术:使用移动开发技术,如Android、iOS、React Native等,来实现导航应用的界面设计和功能实现。 这些技术结合在一起,可以实现一款完整的地图导航应用。 ### 回答2: 开发一款地图导航应用需要以下技术: 首先,需要掌握地图数据的获取和处理技术。这包括获取地理数据源(如谷歌地图、百度地图等)、解析和处理地图数据,并将其转换为可供使用的格式(如矢量图、栅格图等)。 其次,需要了解地理信息系统GIS)的技术。GIS技术包括地图投影、坐标系统转换、地图缩放、地理空间分析等,这些技术能够提供更精确和高效的地图导航功能。 还需要掌握全球定位系统(GPS)的技术。GPS技术可以获取用户的位置信息,并提供导航服务。需要了解GPS定位原理、GPS数据处理技术和GPS信号捕捉技术等。 另外,需要熟悉移动应用开发技术。地图导航应用通常是在移动设备上运行的,所以需要掌握移动应用开发技术,如Android开发(Java或Kotlin)、iOS开发(Objective-C或Swift)等。这些技术可以实现地图的显示、用户位置的定位与显示、导航路线的规划与显示等功能。 最后,需要掌握网络编程技术。地图导航应用通常需要获取实时的交通信息、路况信息等,这就需要通过网络进行数据的获取和传输。需要掌握网络通信协议(如HTTP)、数据传输格式(如JSON或XML)等技术。 总之,开发一款地图导航应用需要掌握地图数据处理技术、GIS技术、GPS技术、移动应用开发技术和网络编程技术等多个方面的技术知识。 ### 回答3: 开发一款地图导航app需要涉及多个技术方面,以下是一些主要的技术考虑: 1. 地图数据:需要获取地图数据并进行处理,可以使用地图API(如谷歌地图API、百度地图API)来获取和显示地图数据。 2. 定位技术:为了实现导航功能,需要使用定位技术获取用户当前位置信息。可以使用GPS定位、基站定位或WIFI定位等技术。 3. 导航算法:导航app需要实现路径规划和导航指引等功能,因此需要使用一些导航算法,如Dijkstra算法、A*算法等来计算最短路径。 4. 数据存储:地图数据、用户信息、历史记录等需要进行存储和管理,可以使用数据库来存储这些数据。 5. 用户界面设计:一个好的用户界面设计能增加用户体验,因此需要考虑用户导航交互界面的设计和实现。 6. 移动端开发:地图导航app一般需要在移动设备上使用,可以使用移动端开发技术进行开发,如Android开发、iOS开发等。 7. 前端开发:如果是使用web技术进行开发,还需要考虑前端开发技术,如HTML、CSS、JavaScript等。 8. 后端开发:地图导航app需要与服务器进行数据交互,因此需要考虑后端开发技术,如Java、Python、Node.js等。 总之,开发一款地图导航app需要涉及多个技术方面,包括地图数据处理、定位技术、导航算法、数据存储、界面设计和移动端开发等。具体选择哪些技术取决于开发团队的技术栈和目标平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值