【问题标题】:What data structure should be used to represent a street network?应该使用什么数据结构来表示街道网络?
【发布时间】:2015-01-23 10:11:49
【问题描述】:

我正在想办法在我的程序中表示街道网络,就像这样一个简单的方法: 一条主要街道 A,有几个十字路口,比如 a、b、c、d。 另一条街道 B 与 A 平行。所以看起来像这样:

----|a|---|b|----|c|-------------------
                    Street A
----|a|---|b|-----------------|d|------
    | |   | |                 | |
    | |   | |                 | |
----|a|---|b|-----------------| |------
                Street B
------------------------------|d|------

我在想也许我可以创建一个Street 类来代表两条主要街道,每条街道都有两个交叉点列表:左和右。 但我可以说,随着我向网络中添加更多街道,这会很快变得混乱。

所以建议将不胜感激! (可能无关紧要,但我使用的是 Java)

编辑 1: 此外,对于这个项目,允许的交通方向非常重要 - 即,数据结构应该能够判断街道是单向的还是单向的-方式在哪个方向。我应该能够从数据结构中轻松访问这些信息。

【问题讨论】:

  • 带权重的有向图?

标签: java data-structures data-modeling


【解决方案1】:

创建一个 Street 类和一个 Intersection 类。 Intersection 类将用作节点并引用与其相连的街道。这很可能是您可以使用的最灵活的设计。也可以为街道端点添加 (x,y) 坐标。

【讨论】:

    【解决方案2】:

    街道系统可以非常适合GraphDB。街道由边缘和交叉点表示为节点。也许像Neo4j 这样的东西会满足您的需求。如果您不需要这么重的东西,还有其他内存替代方案。

    【讨论】:

    • 假设我理解正确,如果我将交叉路口视为节点,那么除非我必须将该数据合并到“节点”类中,否则很难获得有关这些节点上的交通方向的信息.
    • @abcXYZ 十字路口没有交通路线,街道有。十字路口只是作为其他街道的附件。
    • 确切地说,在有向图中,边将包含有关交通行驶方式的信息。在 2 路街道上,您将在两个方向都有一个边缘,或者在 1 路街道上只有一个边缘。
    猜你喜欢
    • 2016-12-08
    • 1970-01-01
    • 2012-08-22
    • 2011-12-12
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2016-10-31
    相关资源
    最近更新 更多