目前,该应用程序显示光栅地图图像并提供移动地图导航功能.我们现在想通过整合矢量图进一步,但不知道从哪里开始.
具有GPS导航经验的开发人员的指导将是巨大的.
以下是有关要求的简介:
目标设备:
iOS版.核心为了将来与其他平台的兼容性,C是优选的.
数据整合与包装:
地图资料来源:
– NAVTEQ
– OpenStreetMap
文件格式:
– 适用于考虑设备限制的移动设备.
– 找到已经建立的格式,或者在内部创建一个格式.
编译:
– 确定源数据的格式(Shp,MapInfo等)
– 将源格式编译为所需格式.
地图渲染引擎:
地图显示:
– 矢量地图视图将与当前栅格图视图分开.
– 将数据实时渲染成线,点,多边形.平铺或预渲染是不可接受的.
– 2D鸟瞰图. (3D是为未来版本计划的).
– 阴影浮雕说明高程.
– 显示用户生成的数据,如路线,跟踪记录,路点.
– 比例,例如500米.
– 快速的性能对于提供更好的用户体验至关重要.
– 很好的例子是Tom Tom iOS应用程序.
地图互动:
– 平移,缩放,旋转.
– 使用多点触控功能.
搜索
– 地址,位置,POI(地理编码)
– 地址(反向地理编码)
样式表
– 轻松自定义地图的外观显示.
– 每一个元素都可以被细细化.
我们想知道从哪里开始研究.什么图书馆和SDK在那里值得花时间调查?
解决方法
源数据格式:您可能希望能够从ESRI shapefile和OpenStreetMap导入数据(以XML或更紧凑但相当的二进制格式). NAVTEQ数据可以作为ESRI形状文件获得.可以通过处理USGS高度数据(http://dds.cr.usgs.gov/srtm/)获得阴影浮雕.
2D与3D:从一个到另一个是一个很大的步骤. 2D数据几乎总是以纬度和经度提供,并投影到一个平面上:Google Maps和OpenStreetMap使用了一个非常简单但却非常讽刺的球形墨卡托投影.移动到3D需要根据地球的形状决定坐标系 – 投影平面加上高度与真实的3D,以及涉及细节水平的问题.一个很好的方法可能是将地球(丘陵和山谷)的形状绘制为三角形网格,然后将其上的其余地图作为纹理来绘制.您可能想要考虑“两个半D” – 使用透视变换来显示地图,就像从高处查看一样.
图书馆:有很多地图渲染库here,包括商业和非商业(披露:我的是其中之一).许多这些库具有用于自定义地图外观和风格的样式表系统.
一个非常好的开源渲染库(不是我的)是Mapnik,但我不知道这是否会很容易地移植到iOS.然而,了解Mapnik和其他渲染库如何工作是一个很好的主意,以便了解问题. OpenStreetMap wiki是了解更多关于该领域的好门户.
地图上的文本渲染几乎总是使用FreeType,一个具有无限制许可证的开源光栅化库.