iOS 中基于矢量的实时 OSM 渲染器(使用 OpenGL ES)
Posted
技术标签:
【中文标题】iOS 中基于矢量的实时 OSM 渲染器(使用 OpenGL ES)【英文标题】:Real time vector-based OSM renderer in iOS (using OpenGL ES) 【发布时间】:2013-04-24 15:30:09 【问题描述】:我正在寻找一种解决方案,它允许使用 OpenStreetMap 数据在 ios 中渲染基于矢量的 2D 俯视图,而不是使用来自服务器的预渲染图块。类似于 iOS6+ 中的 Apple 和 Google 地图。
我已经对这个问题进行了广泛的研究,但没有找到太多信息。 有许多 iOS 应用程序可以做到这一点,但没有关于它们如何实现它的信息。其中一些应用是:
ForeverMap 2 by skobbler Galileo Offline Maps OffMaps 2前 2 个应用程序的工作方式类似于 Apple 和 Google 地图。只要缩放比例发生变化,地图就会实时绘制。 最后一个似乎使用了稍微不同的方法。它以特定的缩放级别渲染矢量数据并创建切片,然后将其用作从切片服务器下载的普通切片。因此,渲染引擎实际上可以是 Route-Me 库的瓦片源,但不是下载瓦片,而是动态渲染它们。
首选第一种方法。
[Q] 我想一旦 OpenGL ES 渲染器就位,就可以很容易地在方法之间切换。我的意思是您可以将渲染器用作 Route-Me 的源来创建图块,或者您可以将其用作实时抽屉,类似于游戏。我说的对吗?
我找到的最接近的解决方案是OpenStreetPad。但是,它使用的是 Core Graphics 而不是 OpenGL ES,因此渲染不是硬件加速的。
Mapbox 表示他们正在研究矢量图块,他们可能会提供 iOS 渲染解决方案,但它可能会使用 Mapnik,所以我不确定它的效率如何。自 2013 年年中以来就没有 ETA。
[Q] 您是否知道任何其他库、论文、指南、示例或其他有关如何处理此问题的有用信息?基本上如何处理 OSM 数据以及如何实际使用 OpenGL ES / GLKit 在设备上绘制该数据。也许一些做过它的人可以分享一些东西?
【问题讨论】:
嘿@Calin,我想知道您最终选择了哪种解决方案?我仍处于研究阶段,但我有点困惑。 @manar 就实施而言,我找不到任何好的解决方案。至于最终结果,ForeverMap 2 应用程序最接近我的需要,主要是因为它具有完全矢量渲染引擎,如 Google 或 Apple Maps。鉴于这一切,我认为我最好的办法是使用 Apple 技术从头开始编写渲染引擎。到目前为止,这看起来是一项艰巨的任务,任何帮助仍然非常感谢。我希望这个问题最终会得到一些有用的答案,让事情变得更容易。 感谢您的回答,您应该看看 Mapnik,它不是专有的;)但实现似乎很棘手。 是的,我知道 Mapnik 是开源的。然而,在没有任何真实文档的情况下,可能比实际实现它更难理解它的实现。此外,Mapnik 有许多我不需要的功能,至少在开发的早期阶段是这样。而这些特性让事情变得更加复杂。 【参考方案1】:老问题,但有一个新答案。 WhirlyGlobe-Maply 将在 iOS 上渲染基于瓦片的矢量地图。 http://mousebirdconsulting.blogspot.com/2014/03/vector-maps-introduction.html
【讨论】:
【参考方案2】:支持 skobbler 的 ForeverMap 2 及其当前 GPS 导航和地图应用的技术现在可以按使用付费。见他们的developer platform。 注意:他们还有一个免费层,可用于开发/启动小型应用程序。
他们使用 OpenGL 和“矢量数据图块”渲染地图。此矢量数据图块包含有关道路几何形状(因此您可以拥有路线)、POI 数据和其他地图特征的信息。 (例如边界限制)。
【讨论】:
它不是开源的,需要他们提供 API 密钥。不是我要找的。span> 【参考方案3】:有一个OSM-based applications for iOS 的列表。它还包括一些开源项目,例如Navit。 Navit 似乎使用 SDL/OpenGL 渲染地图。请参阅Navit iOS wiki page 了解更多信息。
【讨论】:
有趣.. 不幸的是,Navit 是该页面上唯一的开源应用程序,而且它是一个跨平台应用程序,这显然是一件好事,但我对仅限 iOS 的技术更感兴趣,能够利用一些非常酷的 iOS 框架,比如 GLKit。不过值得调查。谢谢 我想一旦你弄清楚如何检索/处理原始 OSM 数据,与使用 GLKit 渲染其他东西相比,使用 GLKit 渲染 OSM 道路并没有什么特别之处。以上是关于iOS 中基于矢量的实时 OSM 渲染器(使用 OpenGL ES)的主要内容,如果未能解决你的问题,请参考以下文章
我的渲染技术进阶之旅Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用matc命令自动将.mat文件转换为.filament文件?