#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
В противном случае попробуйте реализовать приведенный ниже алгоритм!
Могут существовать другие библиотеки, которые делают это. В качестве альтернативы, как насчет использования нового Google Directions API между двумя городами — тогда вы получите фактические расстояния по дорогам.
Комментарии:
1. Спасибо за ответ. Если я не неправильно понимаю, это не даст мне кратчайшего расстояния в пределах суши, это просто позволило бы мне различать расстояние по суше с расстоянием по морю. Возможно, проработанный пример поможет мне объяснить. Как известно, Малага (Испания) ближе к Танжеру (Марокко), чем Мадрид. Если мы можем путешествовать только по суше, Танжер все еще доступен (после долгого путешествия по Европе, Ближнему Востоку и т.д.), Однако теперь он намного дальше, чем Мадрид, Париж и т.д. Поэтому я пытаюсь рассчитать расстояния только по массиву суши.
2. SQL Server не различает сушу или море (или холмы, если уж на то пошло).