【问题标题】:Way to calculate road distances in a city very quickly [closed]快速计算城市道路距离的方法[关闭]
【发布时间】:2015-07-28 19:19:49
【问题描述】:

所以我在一个城市(比如房屋或住宅)中有一组点,我想找到这些点之间的最短距离和商店的一组候选点。我正在寻找最好的商店位置,以最大限度地减少与布景中所有房屋的距离。所以我将迭代地移动候选商店点,然后重新计算每个商店和房子之间的距离(再次使用 Djikstra 算法)。由于计算量巨大,我无法在优化算法的每次迭代中一直访问数据库。

我已经多次使用 pgrouting 并且这会起作用,但是由于点数很多并且每次都必须搜索磁盘,所以它会太慢。

有没有一种工具可以让我在内存中加载一些小型 Open Street Maps 城市地图,然后计算内存中的最短路线?我需要一些快速的东西,所以最好在 C 或 python 中?但任何语言都可以,只要它有效。

【问题讨论】:

  • 计算这些“到达”问题的正常方法是从潜在的商店位置开始一对多的计算。这样做例如使用简单的 Dijkstra 并使用快速预处理图可以在毫秒内为您提供每个商店的响应。例如。看看 OSM 路由器wiki.openstreetmap.org/wiki/Routing

标签: python postgresql gis pgrouting


【解决方案1】:

在 python 中,您可以使用 networkx 进行图形工作。 它具有广度优先搜索功能。

https://networkx.github.io/

【讨论】:

  • 这里有一个有趣的想法。所以我会采用开放的街道地图片段并定义和边缘列表。但问题是 networkx 也可以处理 GIS 信息。所以我必须为路段以及房屋和其他东西提供纬度、经度坐标。它是否能够计算到网络上某个位置的距离,甚至是在地理上稍微远离网络的位置。
  • @krishnab 我不知道它是否可以考虑路线图信息本身。它可以处理具有坐标的节点列表,然后您可以基于此构建边缘列表,但它将是最短路径/直线。我想要合并在一条道路上的距离,您必须首先使用地图路线找到每个节点之间的边长。
【解决方案2】:

继承和想法。获取房子和所有商店的纬度。 以最大精度 (12) 计算所有点(房屋和商店)的 geohash,并检查任何商店的 geohash 是否与房屋的 geohash 匹配。如果没有,计算精度较低的 geohash (11),然后冲洗并重复,直到你得到一个与房子的 geohash 匹配的商店(可能是多个我稍后会进入)。

这是一个模糊距离计算。这将非常有效并且处理时间最短。但是,如果您获得两个或更多具有相同 geohash 且具有一定精度的商店,这将失败。所以我建议你这样做

  1. 精度降低的 geohash 循环。当商店的 geohash 与房子的 gohash 匹配时中断
  2. 如果(多个疮匹配)进行简单距离计算并找到最近的商店并返回
  3. ELSE 返回匹配 geohash 的一个商店

此方法的优点:将您的严格要求更改为模糊概率问题。如果你得到一个单一的疮,很好。如果你至少不减少距离计算的候选者数量

这种方法的缺点:如果所有商店都放在同一个 geohash 中怎么办?我们在这里引入相同的复杂性。

您将指望并非所有(或大多数)商店都在同一个 geohash 下的机会。实际上,劣势只是极端情况下的劣势。所以总的来说你应该提高性能

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2011-12-26
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多