对于iPhone地图应用程序,如何创建图形?

时间:2012-04-25 00:42:57

标签: ios data-structures graph map

我想制作一个基本版Google地图的应用程序,用于商场或机场等室内场所。我知道我必须从平面图中创建一个图形,并使用最短路径查找算法绘制从一个位置到另一个位置的最短路径。 我如何将商场或机场表示为图表?我是否将每个商店或门或某物作为节点和走道作为边缘?或者我必须更加具体,例如每5-10英尺制作一个节点?我需要具体如何以及我应该如何制作节点和边缘?

2 个答案:

答案 0 :(得分:0)

我建议将平面图视为一个网格,其中每个单元格代表 x 平方米。在可访问区域内的每个单元上放置一个节点。边缘位于每个neigbouring单元格之间,并且所有单元都具有 x 的成本。

这种方法的优点是你可以有效地将它放在记忆中(你可以把它放在一个矩阵中,而不是必须使用相应的列表等)。对于寻路,您可以使用一个简单的A *实现,该实现使用两点之间的欧几里德距离作为启发式。

答案 1 :(得分:0)

您想在这里解决几个不同的问题。首先,两个地方之间存在结构关系,其次是几何结构关系。最短路径部分取决于几何形状,部分取决于结构。例如。通路不必是直线。对于结构,您可以将商城商店和大门表示为节点,将路径表示为边缘。将节点之间的实际距离作为边的“权重”,并使用Dijstra's algorihtm来查找最短路径。

如果您只需要以文本方式呈现结果,例如“转到A,然后转到B”,或者在地铁(地下)风格的拓扑图上,这很好。但是,如果要在几何精确的地板表示上显示结果,则需要使结构与几何体之间的连接更加牢固。我建议您使用路径转弯处的附加节点扩充上述结构,并使用x,y坐标标记节点以及是否为中间节点的bool。仅将真实节点选为源和目标,但使用Dijkstra的整个图形。在屏幕上绘制结果时,迭代最短路径中的节点并使用它们的坐标从源到目标绘制分段直线。