为 iOS 创建自定义建筑地图的最佳方式
Posted
技术标签:
【中文标题】为 iOS 创建自定义建筑地图的最佳方式【英文标题】:Best way to create custom building's map for iOS 【发布时间】:2013-01-30 15:52:19 【问题描述】:我看到了一些方法:
1) 以编程方式使用 OpenGL 进行绘制。
2) 以编程方式使用 QuartzCore 和 CoreAnimation 进行绘制。
3) 在 AutoCad 中绘制地图,然后以某种方式将其连接到 ios。
4) 使用 SVG 绘制地图。
需求支持寻路和gps导航。
对于前两种方式,我认为它在性能方面很昂贵,在缩放时重绘所有元素;而且我认为这种方式可能不支持 GPS 导航。
对于我来说,使用 AutoCad 图示地图很难理解如何将其与图形\路径连接以进行寻路。
我的同事将使用 SVG 在网络上开发此应用程序。我找到了它 - https://github.com/SVGKit/SVGKit,但仍然不知道它将如何支持寻路和导航。
我将不胜感激。
【问题讨论】:
【参考方案1】:地图应用一般有两种:
A) 他们显示地图,(有或没有用户位置)而不需要像导航系统那样计算路径(见 B 点)
B) 使用地图矢量并计算某些内容的应用程序:例如找到最佳路径。最短连接,例如导航系统等
A) 的应用通常不如 B) 复杂,因为向量可能有些不准确、没有连接、有小间隙、边缘之间没有逻辑等。
1) 要仅显示建筑地图,您只需要边的列表。 (边是一对坐标 (x1,y1) - (x2,y2)。你是怎么得到的。例如 MapInfo Professional 格式 mif/mid。 甚至您可以显示包含建筑物地图的 pdf。使用内置 PDF 视图(也使用 SVG,但更难)。
如果不是相对地图,而是使用参考坐标系定位的地图,例如纬度/经度 (WGS84),事情就会变得复杂得多。 在这种情况下,您将使用工具(mapInfoProfessional,导入 AutoCad DXF 文件,并在房屋角落应用 3 个 GPS 测量参考点,并将其转换为 LatLong WGS84 坐标系。 使用 ios,您无法测量这 3 个点,因为您无法平均位置,当您站在房子的一个角落静止时,ios 会停止发送。 如果您居住在谷歌卫星照片具有高分辨率的地区,您可以尝试从谷歌地球卫星照片中提取位置。 (但这可能违反该卫星照片提供商的许可条件(主题:派生数据))
最后,您现在有了 Lat Lon 坐标系中的边列表。
对于显示,我个人会使用 1) OpenGL) 或 2) Quartz2D。
现在是路径查找部分。
您可能需要第二张“地图”来定义建筑物内的可能路径。 此结构必须是连接图(具有连接邻居的点)。 电脑游戏就是这样做的。 (有些甚至允许您在开发者模式下显示该路径)
可以在平面图的不同层中绘制路径。但这条路 有更高的要求:不允许有缝隙,都必须完美连接。
将该层称为“路径”并将其导出为自己的计划。 现在只使用这个路径层,然后导入并创建一个具有连接邻居的节点图。
使用 Dijkstra 算法搜索最短路径。
【讨论】:
感谢详细解答!所以,据我了解,我必须制作 AutoCad 地图,使用 mapInfoProfessional 将其转换为支持 LatLong 坐标系的东西,然后使用 OpenGL/Quartz2D 绘制它?我仍然无法理解如何让这张地图与 iOS 交互,只是在某个视图中绘制它?或任何指定的组件?而且LatLong坐标系必须准确应用于AutoCAD地图,还是iOS中已经绘制的地图? 是的,只是在视图中绘制它,CGRectlineTo。您也可以使用 Helmert 转换将地图转换为 LAtLong。绘制地图时,您还需要将 latLong 转换回屏幕坐标(使用圆柱投影) 非常感谢!但是缩放呢?我应该为每个缩放步骤创建不同分辨率的地图,然后使用另一个分辨率的自动 cad 地图按比例重绘地图的片段吗? 不,你不画位图,你画的是线条、矢量,它们通过简单地将坐标乘以缩放因子来缩放 或更好地使用视图的 setTransform(),使用ba CgAffineTransformationScale。然后,Apple 将为您扩展它。以上是关于为 iOS 创建自定义建筑地图的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
对于使用 Facebook iOS SDK 的混合 SSO 场景,为我们自己的自定义用户记录生成密码/密钥的最佳方式是啥?