расстояние между двумя точками через землю с помощью сервера sql - PullRequest
5 голосов
/ 02 июня 2010

Я рассчитываю рассчитать кратчайшее расстояние между двумя точками в SQL Server 2008 с учетом только массы земли.

Я использовал тип данных географии вместе с STDistance () для определения точки x расстояния до точки y по прямой линии, однако иногда это пересекает море, которого я пытаюсь избежать.

Я также создал многоугольник вокруг границы земной массы, которая меня интересует.

Я считаю, что мне нужно объединить эти два метода, чтобы STDistance всегда оставалась в пределах многоугольника - если не существует более простого решения.

Спасибо за любой совет

1 Ответ

1 голос
/ 03 июня 2010

Используйте STIntersects - http://msdn.microsoft.com/en-us/library/bb933899%28v=SQL.105%29.aspx, чтобы узнать, какая часть линии находится над землей.

После прочтения вашего комментария ваше требование имеет смысл. Однако я почти уверен, что в SQL Server нет встроенных методов для этого. Я предполагаю, что вы игнорируете дороги и подходите как мухи, но только по суше.

Единственный способ сделать это - преобразовать вашу область в растр (ячейки сетки) и выполнить анализ пути затрат. Вы бы установили непомерно высокую стоимость в районе моря, чтобы алгоритм обходил море. Смотрите эту ссылку для описания техники:

http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=cost_path

В противном случае попробуйте реализовать алгоритм ниже!

http://bit.ly/ckvciz

Там могут быть другие библиотеки, которые делают это. В качестве альтернативы, как насчет использования нового API Google Directions между двумя городами - тогда вы получите реальное расстояние дороги.

http://code.google.com/apis/maps/documentation/directions/

...