是否有可能在 sql 中获取两个纬度和经度之间的行进距离(不是乌鸦文件)

Is it possible to get travel distance (not crow files) between two lat & lng in sql

我一直在 sql 中使用 crow 文件距离函数来获取以公里为单位的距离。我想知道是否有可能在 sql 服务器 2008 r2 中获取行进距离而不是 crow 文件距离?

不直接,因为 SQL 服务器本身不知道道路或路由。您需要调用一些外部 API(例如 Google 地图或 Bing 地图,如您的问题标签中所示),传递两个端点并询问最短路线,然后确定距离基于他们的反应。

让我们考虑一下这幅极其粗糙的图画。

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

但是还有其他的考虑。也许1号线有座桥出来。也许这条路本身就是洗衣板的泥土,而2号线是一条高速公路。

要点是,有大量非功能性需求构成路由决策,SQL 服务器无法为您做出决定。

您可以在 .NET 中创建一个 SQL 函数来调用 Bing Maps REST 路由服务并根据需要检索 distance/time 信息。这是一篇博客 post,展示了如何使用地理编码服务创建这样的函数: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

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