Я пытаюсь использовать функции 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, возвращающий метры вместо миль?
Относительно примечания: может ли кто-нибудь указать мне пример в Интернете, где один соответствует тысячам географических точек в таблице с ближайшими географическими точками в другой таблице, содержащей тысячу точек? Я вижу, что это вычисление занимает очень много времени, если я не могу найти способ сократить процесс.
Возможный дубликат [SQL Server 2008 GEOGRAPHY STDistance() значение] (http://stackoverflow.com/questions/3335773/sql-server-2008-geography-stdistance-value) – GSerg
Что касается скорости, я считаю, что вы хотите [пространственный индекс] (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
Я верю, что это в метрах – mattias