0

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2015-07-28T20:01:21.257 回答
1

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

https://networkx.github.io/

于 2015-07-28T19:37:34.653 回答