优化Bing Maps Geocode和RouteMapping请求

时间:2010-02-15 17:11:54

标签: c# sql ajax optimization bing-maps

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

2 个答案:

答案 0 :(得分:1)

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

我希望为我的数据库中的每个项目存储lat / lon(因此它只进行一次地理编码)。要选择距离点一定距离内的项目,我将计算中心点北/南/东/西'x'英里的纬度/经度数。然后选择变成一个简单的问题,即选择记录,其中纬度/经度值落在我的方格值之间。

是的,我知道技术上我应该使用圆圈来精确控制距离,但这更容易,更快。如果您确实需要使用圆圈来获得更精确的限制,请首先使用此方法,然后使用更复杂的计算来清除角落中圆圈外的项目。

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

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

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

答案 1 :(得分:0)

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

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

祝你好运!