2016-03-29 1 views
0

Я пытаюсь использовать функции SQL Server 2014 для определения расстояния между двумя точками на географической поверхности. У меня три поля в таблице (Lat, Long, Coordinates). [Lat] и [Long] являются существующие ценности и хранить географические координаты точки в [Координаты] поле с помощью следующего:Пространственная функция SQL Server: .STDistance Возвращает мили или метры?

UPDATE dbo.[MyTable] 
SET [Coordinates] = geography::STPointFromText('POINT(' + CAST([Lon] AS VARCHAR(20)) + ' ' + CAST([Lat] AS VARCHAR(20)) + ')', 4326) ; 

Так что теперь у меня есть таблица, полный записей, которые имеют географические координаты пред- вычисленный в поле [Координаты]. Теперь я хочу определить расстояние в милях между Point_A и Point_B. Я использовал следующие:

- Compute Point_A:

DECLARE @g geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 68); 

- Compute Point_B:

DECLARE @h geography = (SELECT [Coordinates] FROM [MyTable] WHERE [Id] = 1439); 

- Compute Расстояние:

SELECT ROUND(@g.STDistance(@h)) AS [Distance]; 

Фактическое расстояние составляет около 20 миль, но это вычисление дает мне число, которое в тысячи раз больше, чем 20 миль.

Есть .STDistance, возвращающий метры вместо миль?

Относительно примечания: может ли кто-нибудь указать мне пример в Интернете, где один соответствует тысячам географических точек в таблице с ближайшими географическими точками в другой таблице, содержащей тысячу точек? Я вижу, что это вычисление занимает очень много времени, если я не могу найти способ сократить процесс.

+1

Возможный дубликат [SQL Server 2008 GEOGRAPHY STDistance() значение] (http://stackoverflow.com/questions/3335773/sql-server-2008-geography-stdistance-value) – GSerg

+0

Что касается скорости, я считаю, что вы хотите [пространственный индекс] (https://msdn.microsoft.com/en-us/library/bb934196%28v=sql.120%29.aspx) (могут применяться ограничения [https://msdn.microsoft. ком/EN-US/библиотека/bb895265% 28В = sql.120% 29.aspx # география)). – GSerg

+0

Я верю, что это в метрах – mattias

ответ

0

Возвращаемое фактическое значение зависит от SRID (пространственных ссылочных идентификаторов) вашего столбца географии - вы устанавливаете это при создании объектов географии. Если SRID не указан, предполагается значение по умолчанию 4326, которое соответствует привязке WGS 84.

Что касается производительности, вы можете проиндексировать столбцы географии, это ссылка, которая поможет вам на правильном пути.

https://technet.microsoft.com/en-us/library/bb964712(v=sql.105).aspx

+0

Не ответил на заданный вопрос. Том С нашел это сам. – KeyOfJ

0

Я использовал значение SRID по умолчанию 4326.

Методом проб и ошибок, я обнаружил, что она возвращается метров vs. миль.

Было бы неплохо, если бы Microsoft сделала это более понятным в своей документации.

+0

Тома Tom - это возвращаемое значение по умолчанию при использовании PostGIS, и нам нужно преобразовать в мили. Похоже, что это стандарт в географических системах. – KeyOfJ

Смежные вопросы