расстояние между двумя точками на суше с использованием sql server

#sql-server #sql-server-2008 #geospatial #spatial

#sql-сервер #sql-server-2008 #геопространственный #пространственное

Вопрос:

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

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

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

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

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

Ответ №1:

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

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

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

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

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

http://bit.ly/ckvciz

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

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

Комментарии:

1. Спасибо за ответ. Если я не неправильно понимаю, это не даст мне кратчайшего расстояния в пределах суши, это просто позволило бы мне различать расстояние по суше с расстоянием по морю. Возможно, проработанный пример поможет мне объяснить. Как известно, Малага (Испания) ближе к Танжеру (Марокко), чем Мадрид. Если мы можем путешествовать только по суше, Танжер все еще доступен (после долгого путешествия по Европе, Ближнему Востоку и т.д.), Однако теперь он намного дальше, чем Мадрид, Париж и т.д. Поэтому я пытаюсь рассчитать расстояния только по массиву суши.

2. SQL Server не различает сушу или море (или холмы, если уж на то пошло).