1

我是服务车辆调度网络应用程序的开发人员。它是用 .Net 4+、MVC4 编写的,使用 SQL 服务器。

数据库中存储了 2000 多个位置作为地理数据类型。假设我们将资源从位置 A 发送到位置 B,则需要在某一点显示行驶时间/距离等。如果我用 SQL Server 的 STDistance 计算距离,它只会给我“乌鸦飞”的距离。因此,系统需要访问 bing、Google 或 ESRI 等地理空间服务,并获取实际行驶时间或建议路线。问题是这是一个核心功能,并且会发生很多。

我应该使用预先计算的距离或平均行驶时间预先填充查找表吗?不利的一面是即使没有添加更多位置,每次需要信息时都要搜索 400 万条记录。

最重要的是,大多数时候目的地不是我们存储的地理空间坐标之一,而是可以是大陆上任何地方的地址或经度/纬度点,这使得预先计算变得不可能。

我试图避免性能问题不得不不断地触及一些 geoservies 端点。

关于如何最好地解决这个问题的任何建议?

-谢谢!

4

1 回答 1

1

以前看过这些问题,你不太可能把它们全部存储起来。

  1. 它通常针对几乎所有路由提供商的 TOS 来缓存结果。你有时可以协商这种能力,但它的成本很高。
  2. 鉴于您要搜索的点不是一组固定的,因此进行一次计算为您提供的下一次计算的信息很少。

我会说也许您可以在选择配对后存储路线,以便您可以在需要时再次显示该路线。交易完成后,我将从您的数据库中删除该路线。

如果您真的想缓存所有这些或对其进行更多控制,您可以使用 PGRouting(使用 Postgresql),然后获取街道数据。尽管我怀疑这是否值得您付出努力。

于 2013-06-02T02:15:41.360 回答