0

有一些地方我可以选择。我想选择一个作为我的来源地,并且选择驾驶时间成本小于30分钟。所以也许有些地方我可以开车去那里,费用不到 30 分钟。

那么,我应该保存所有这些地方数据并在特定条件下查询它们的最佳方法是什么?

在我问这个问题之前,我已经尝试保存所有这些地方的纬度和经度。每当一个新地点被保存到数据库中时,我都会请求 HERE 地图路由 API 来计算新地点与数据库中所有旧地点信息之间的距离和行驶时间,然后将它们保存在距离表中。

当用户想要像上面的例子一样查询地点时。我将加入地点表和距离表进行查询,例如:

SELECT place.id, place.name from place join distance on place_id = place.id where distance cost_time < 30;

有一些问题让我心烦意乱。如果旧地方的数量太大(实际上会),那么将一个地方保存到数据库后挂起的时间会更多。

所以,我知道我使用了一种糟糕的方法来实现我的目标。但我不知道我该怎么办,有人可以帮我解决这个问题吗?

最后但并非最不重要的一点,忘记我糟糕的英语,如果有什么不清楚的地方,我会尽力描述它。谢谢你。

4

1 回答 1

0

您可能需要构建一个连通图并即时计算到其他点的距离。

添加新点时,仅计算其与 X 个最近邻的距离并将它们存储在数据库中。

然后,您可以使用Dijkstra之类的算法来查找距离源不到 30 个单位的所有点。

你会失去一些精度,因为从 A 到 C,然后 C 到 B 的成本通常会大于从 A 到 B 的直接路径。而且你在添加新点时节省的时间,你会“失去”它进行 Dijkstra 算法的计算。

于 2019-11-01T08:59:38.767 回答