地图数据检索接口-地图引擎
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地图数据检索接口-地图引擎相关的知识,希望对你有一定的参考价值。
参考技术A update 时间:2020,7,25在自动驾驶平台中,高精地图数据坐标通常采用平面坐标,如UTM,目的是方便坐标的转换以及几何计算。
因此,地图数据模块为了能够方便的提供给其他模块使用,建议输出UTM或者车身坐标系。
在Apollo中,Map数据源数据采用UTM坐标存储,在程序启动时会在内存中构建KDTree空间索引。
KDTree空间索引支持快速的最近邻搜索,并且可以直接利用平面坐标构建KDTree。这为后续坐标计算提供了便利。
而s2geometry,虽然同样支持平面坐标索引,但其平面坐标单位并非是“meter”,而是采用一种s2geometry内定的一种平面坐标。
综上,采用KDTree索引+UTM坐标是一种更为方便与高效的组合。
update 2020年7月17日09:32:50
上面方法构造的空间索引,是不支持最近邻搜索的。因此,我们构建s2ShapeIndex索引,这是s2geometry提供的一种内存空间索引,支持最近邻搜索。这就需要我们在程序启动时,把数据加载到内存里,再构建内存空间索引。暂时没有找到s2geometry最近邻搜索的其他方法。
以下原文:
在之前的文章,使用sqlite3+spatialte+wxsqlite3的方案实现了一个地图数据查询的接口。后来基于性能和数据处理灵活度的考虑,对接口库进行了重构,改为使用sqlite3+s2geometry+protobuf。
这里简单介绍一下方案
总体分为两步,1. 数据导入 2. 数据检索
优化:
GIS中的引擎:地图引擎
什么是地图引擎?它和地图软件有什么区别?
引擎一词是英文单词engine的音译,通常指发动机,就是动力输出设备。诸如汽车、轮船、飞机的动力提供的核心设备就是引擎。IT领域中,常听说的有搜索引擎、图形引擎等。软件中引擎就是提供一套特定底层功能的实现和接口,其往往基础而强大,充分满足上层的应用需要。而通常说的地图引擎和导航引擎都属于GIS引擎的一部分。GIS引擎就像汽车的发动机,数据就像油料,只是这个发动机与油料是唯一对应的。
地图引擎,从应用层层来看,就是一套提供了驱动和管理地理数据,实现渲染、查询等功能的一套函数库,所有的应用层软件只需要调用地图引擎提供的功能接口就能较容易的完成其功能。常见的地图引擎有Google Maps API、百度地图API、高德地图API、HereMap等。
地图软件是架构在地图引擎之上的应用。地图软件可以没有独立的地图引擎,而在软件中实现地图引擎的功能,但独立的地图引擎可以使软件的架构更清晰,扩展性和可维护性都有极大的提升。尤其对于多平台的地图软件,独立的地图引擎必不可少,否则维护成本倍增。地图引擎通常会封装和保护地理数据的组织管理机制,对上层提供地图移动、放缩、渲染、空间查询等功能。
通常,在移动GIS中,地图引擎还包括了导航引擎。导航引擎与地图引擎的概念一致,导航引擎驱动和管理是拓扑数据,提供的是路线和导引信息。导航引擎通常会封装和保护几何数据的拓扑关系和导引数据,对上层提供路线分析、拓扑分析、引导信息的功能。
在GIS的架构的设计中,除了地图引擎和导航引擎外,有的设计者会把图形渲染单独分出来,封装成独立的渲染引擎,如2D渲染引擎、3D渲染引擎等。这样做没有任何问题,只要能和地图引擎很好的衔接,这样的设计是更好的。
通常嵌入式上GIS引擎对其数据要求都是专有的,目的是提高引擎运行效率。各公司或各设计师的引擎设计会与引擎所需数据格式设计紧密衔接,其实通常都是同一团队在设计。这份数据格式设计是GIS引擎的核心技术之一,数据格式的优劣很大程度上决定到了引擎的效率,所以基本上没有公司或设计师会公开他们的设计方案,因为这是核心技术机密!所以,你要想在嵌入式设备上开发GIS引擎,就要设计自有的GIS数据格式。
那么我们能不能就拿MapInfo的MIF或ArcInfo的E00数据做引擎的数据源?答案是肯定的,能!但是你将很难保障引擎的运行效率。通常一些完善的GIS引擎都会提供一些外围软件,其中就包括各个大厂交换格式导成自有GIS引擎格式数据的工具,这也是判定一个GIS引擎完整度的一个重要标志。
以上是关于地图数据检索接口-地图引擎的主要内容,如果未能解决你的问题,请参考以下文章