7

我有一个包含订单的数据库,每个订单都有一个关联的位置。目前,当用户登录时,我正在使用 Bing Maps API 对每个订单位置进行地理编码,然后计算到登录用户的行驶距离。基于这些距离,用户可以通过下拉框指定最大距离,结果显示在网格视图中。但是,如果订单超过 100 个,则流程变得非常缓慢。我会很感激一些关于优化 bing 查询的技巧,可能缓存结果(这样它们可以在不重新访问 bing maps api 的情况下被重用)或利用 Ajax 以某种方式在后台处理订单。谢谢。

4

2 回答 2

1

我计划在不久的将来做类似的事情,所以我有一些建议,但还没有实际的代码可以分享。我希望它是有用的。

我希望将每个项目的纬度/经度存储在我的数据库中(因此它只被地理编码一次)。要选择距某个点一定距离内的项目,我将计算中心点北/南/东/西“x”英里的纬度/经度数。然后选择变得很简单,选择纬度/经度值介于我的正方形值之间的记录。

是的,我知道从技术上讲我应该使用一个圆圈来精确控制距离,但这更容易和更快。如果你真的需要用一个圆来做更精确的限制,先用这个方法,然后用更复杂的计算把圆外的角落里的项目剔除掉。

我不熟悉 Bing 的许可,但如果我没记错的话,您需要有一个付费(商业)许可来存储地理编码的结果。而且它并不便宜。所以这可能会否定我的建议可能具有的任何价值:(

编辑; 我只是更仔细地阅读了这个问题,我发现它是在谈论行驶里程,而不是线性里程。所以,我的回答并不适用,除非你想用它来缩小你必须做的行驶距离计算的数量。

此外,关于地理编码和许可证,您可以查看非常便宜的geocoder.us 。

于 2010-02-15T17:24:33.460 回答
0

您可能想要做的是创建一个最小生成树,假设您有相同的用户目标位置。MST 仍然是 O(V^2),但是您有效地缓存了许多最短路径,因为它们中的许多将重用相同的道路。

另一种选择是首先使用线性距离来代替道路里程来估计,但这完全取决于您发送回给用户的内容。

祝你好运 !

于 2010-02-15T17:25:55.687 回答