【问题标题】:Is it possible to get travel distance (not crow files) between two lat & lng in sql是否有可能在 sql 中获得两个 lat & lng 之间的旅行距离(不是乌鸦文件)
【发布时间】:2015-01-28 17:37:49
【问题描述】:

我一直在sql中使用crow文件距离函数来获取以KM为单位的距离。我想知道是否有可能在 sql server 2008 r2 中获得旅行距离而不是乌鸦文件距离?

【问题讨论】:

  • 什么是行驶距离?道路或地球曲率上两点之间的距离?
  • 你的意思是“乌鸦”?

标签: c# google-maps sql-server-2008-r2 bing-maps geocode


【解决方案1】:

不是直接的,因为 SQL Server 本身不知道道路或路线。您需要调用一些外部 API(例如问题标签中的 Google Maps 或 Bing Maps),通过两个端点并询问最短路线,然后根据他们的响应确定距离。

让我们考虑一下这张非常粗糙的图画。

用户在 A 点,他们想到达 B 点。直接路线(紫色)要翻越一座山。所以我们需要绕山走一圈。

但还有其他考虑因素。也许 1 号公路沿线有一座桥。也许这条路本身就是搓衣板,而 2 号公路是高速公路。

关键是,有大量非功能性需求构成路由决策,而 SQL Server 无法为您做出决定。

【讨论】:

【解决方案2】:

您可以在 .NET 中创建一个 SQL 函数,该函数调用 Bing Maps REST 路由服务并根据需要检索距离/时间信息。这是一篇博文,展示了如何使用地理编码服务创建这样的功能:https://alastaira.wordpress.com/2012/05/04/geocoding-in-sql-server-with-the-bing-maps-locations-api/

您可以在此处找到有关路由服务的文档以及在 .NET 中使用它的提示:

https://msdn.microsoft.com/en-us/library/ff701717.aspx

https://msdn.microsoft.com/en-us/library/jj819168.aspx

https://msdn.microsoft.com/en-us/library/jj870778.aspx

现在,这可能会产生大量请求。明智的做法是创建一个函数,该函数包含计算距离所需的所有位置,然后通过将位置合并到单个多点路线中来优化计算。必应地图允许在单个路线请求中指定多达 25 个位置。如果您需要从 A 到 B、C、D 的距离,您可以计算从 A-B-A-C-A-D 的路线。响应将为每两个位置返回一个路线支路。奇数索引路线段将是您从 A 到其他位置的距离。这将允许您将多达 12 个位置合并到一个请求中。这将使事情变得更快,并减少您提出的请求/交易的数量,这也将降低所涉及的许可成本。

【讨论】:

    猜你喜欢
    • 2018-05-20
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多