代码之家  ›  专栏  ›  技术社区  ›  Adis

城市地图图式化算法

  •  6
  • Adis  · 技术社区  · 14 年前

    这是一个长期的尝试,但我想我可能会尝试之前开始肮脏的工作。

    我有一个项目要构建一个应用程序,对于一个定义的输入站(顶点)和线(边),也就是说,一个公共交通的真实地图,将一个给定的地图规划成一个地铁地图。我对这个问题做了一些研究,它是一个NP完全问题,相当于3-SAT问题。我对如何生成这样的地图也有一些理论上的想法,但是它们不够详细。

    我要寻找的是这个问题的任何其他现有的解决方案,一些伪代码,一些(几乎)任何其他编程语言中的真实代码,任何可以减少我花在算法本身上的时间的东西,这会给我更多的时间来处理应用程序的其他方面。

    如果有人见过任何能帮助我的东西,我会非常感激的。

    4 回复  |  直到 12 年前
        1
  •  6
  •   Dr. belisarius    12 年前

    如果你用谷歌搜索“地铁地图布局问题”和“地铁地图线路交叉点”,你会发现很多参考资料,因为它在过去的10年里被非常积极地研究过。

    这个问题看起来一点也不平凡,将“艺术”特征转化为数学约束似乎是最困难的任务之一。

    不管怎样,这里有三种我觉得有趣的出版物(在许多其他出版物中):

    Metro Map Layout Using Multicriteria Optimization

    Line Crossing Minimization on Metro Maps

    The Metro Map Layout Problem

    嗯!

        2
  •  2
  •   Adrian McCarthy    14 年前

    与你的主题类似的研究: http://graphics.stanford.edu/papers/routemaps/

        3
  •  0
  •   Rafe    14 年前

    这只是一些用手挥挥手的建议——用一小撮盐吃。

    我对“地铁”地图的概念是,线路倾向于八个基本方向之一,车站之间有规律的间隔。

    我假设你要把一组实际坐标转换成“地铁”坐标。

    我将从您的主要路线(例如,城市环路)开始,然后按重要性顺序逐步添加其他路线。

    对于每条路线,您希望找到最接近的近似值,该近似值使用沿八个基本方向行进的最少直线数。您可以从实际坐标的边界框开始,将其分割成一个网格,然后找到一条从网格广场到网格广场的“地铁”路线,然后连续地细化该路线,以减少弯折的数量,而不会过度扭曲地图,并且尽可能不引入与其他路线的交叉口。

    完成后,按比例缩放每条线路,使连续的车站在“地铁”视图上相距相同的距离。

    我猜你还是想支持手动调整结果。

    祝你好运!

        4
  •  0
  •   Geoffrey De Smet    14 年前

    感觉像是计划问题。 看起来你的硬约束是:

    • 每个车站都必须在一个点上。A点位于网格上,点之间的距离为X(我将在2cm处使此静态)

    • 同一地点不应有两个车站

    • 应该有足够的空间绘制站点标签。请注意,标签可以从分配站点的点分配不同的方向。

    • 应该有足够的空间画地铁线路。

    看起来您的软约束是:

    • 对于每个站点,尽量减少到分配给站点的点的实际地理位置距离。

    然后把像“口水计划”之类的东西扔在上面, here's an example of hard and soft constraints for nurse rostering .