2015-01-28 2 views
0

Я использовал функцию перемещения файла волка в sql, чтобы получить расстояние в KM. Мне интересно, можно ли получить расстояние для поездки, а не расстояние между файлами в sql server 2008 r2?Можно ли получить дистанцию ​​путешествия (не вороньевые файлы) между двумя лат и lng в sql

+0

Что такое поездка? Дороги или расстояние между двумя точками над кривизной земли? –

+0

Вы имеете в виду «вороньи мухи»? – vidstige

ответ

1

Не напрямую, поскольку сам SQL Server не знает дорог или маршрутизации. Вам нужно будет обратиться к внешнему API (например, к Картам Google или Bing Maps, как к вашим тегам вопроса), передать два конечных пункта и запросить кратчайший маршрут, а затем определить расстояние в зависимости от их ответа.

Давайте рассмотрим этот невероятно грубый рисунок.

enter image description here

Пользователь находится в точке А, и они хотят, прямой путь (фиолетовый), чтобы добраться до точки B. идет через горы. Поэтому нам нужно идти по горе.

Но есть и другие соображения. Может быть, есть мост через Маршрут 1. Может быть, сама дорога - это мочалка, а Маршрут 2 - супермагистраль.

Пункт есть, существует огромное количество нефункциональных требований, которые составляют решения о маршрутизации, которые SQL Server просто не может решить для вас.

+0

Если внешний маршрут API не является жизнеспособным, вам также может потребоваться вычислить что-то похожее на расстояние Манхэттена в качестве наихудшего случая, используя самые длинные горизонтальные и вертикальные расстояния дуги. http://en.wiktionary.org/wiki/Manhattan_distance – RomSteady

0

Вы можете создать функцию SQL в .NET, которая вызывает службу маршрутизации REST-карт RING и получает информацию о расстоянии/времени по мере необходимости. Вот блог, который показывает, как создать такую ​​функцию с помощью службы геокодирования: 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. Ответ будет возвращать ногу маршрута для каждого из двух местоположений. Нечетные индексированные ножки маршрута будут вашим расстоянием от А до других мест. Это позволит вам объединить до 12 местоположений в один запрос. Это значительно ускорит работу, а также уменьшит количество запросов/транзакций, которые будут также уменьшать затраты на лицензирование, которые будут задействованы.