我一直在sql中使用Crow文件距离函数来获取KM中的距离。我想知道是否有可能在sql server 2008 r2中获得旅行距离而不是文件距离?
答案 0 :(得分:1)
不直接,因为SQL Server本身不了解道路或路由。您需要调用一些外部API(例如Google地图或Bing地图中的问号标签),传递两个端点并询问最短路线,然后根据其响应确定距离。
让我们考虑一下令人难以置信的粗糙画面。
用户在A点,他们想要到达B点。直接路线(紫色)越过一座山。所以我们需要到山上去。
但还有其他一些考虑因素。也许沿着1号公路有一座桥。也许道路本身就是搓板,而2号公路是高速公路。
重点是,有很多非功能性需求构成了路由决策,SQL Server无法为您做出决定。
答案 1 :(得分:0)
您可以在.NET中创建一个调用Bing Maps REST路由服务的SQL函数,并根据需要检索距离/时间信息。这是一篇博文,介绍如何使用地理编码服务创建此类功能: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 Maps允许在单个路径请求中指定最多25个位置。如果您需要从A到B,C,D的距离,您可以计算A-B-A-C-A-D的路线。响应将返回每两个位置的路径支路。奇数索引路线支路将是您从A到其他位置的距离。这将允许您将最多12个位置合并为一个请求。这样可以使事情变得更快,同时减少您提出的请求/交易数量,从而降低可能涉及的许可成本。