Я работаю с миллиардами строк данных, и каждая строка имеет ассоциированную стартовую широту/долготу и конечную широту/долготу. Мне нужно рассчитать расстояние между каждой начальной/конечной точкой - но это занимает очень много времени. Мне действительно нужно сделать то, что я делаю более эффективно.Эффективное обнаружение расстояния между 2 lat/longs в SQL
В настоящее время я использую функцию (ниже) для вычисления гипотенузы между точками. Есть ли способ сделать это более эффективным? Я должен сказать, что я уже пробовал кастинг lat/longs как пространственные географии и используя SQL, встроенные в функции STDistance() (не индексированные), но это было еще медленнее.
Любая помощь будет высоко оценена. Я надеюсь, что есть способ ускорить эту функцию, даже если она немного ухудшает точность (ближе 100 м, вероятно, хорошо). Спасибо заранее!
DECLARE @l_distance_m float
, @l_long_start FLOAT
, @l_long_end FLOAT
, @l_lat_start FLOAT
, @l_lat_end FLOAT
, @l_x_diff FLOAT
, @l_y_diff FLOAT
SET @l_lat_start = @lat_start
SET @l_long_start = @long_start
SET @l_lat_end = @lat_end
SET @l_long_end = @long_end
-- NOTE 2 x PI() x (radius of earth)/360 = 111
SET @l_y_diff = 111 * (@l_lat_end - @l_lat_start)
SET @l_x_diff = 111 * (@l_long_end - @l_long_start) * COS(RADIANS((@l_lat_end + @l_lat_start)/2))
SET @l_distance_m = 1000 * SQRT(@l_x_diff * @l_x_diff + @l_y_diff * @l_y_diff)
RETURN @l_distance_m
Спасибо! Я буду реализовывать ваши предложения :) – iambalrog
Нет проблем. FYI, если этот ответ сработал для вас, принято считать его «принятым». – Stochastically
Извинения, мой первый вопрос, так еще учиться. Еще раз спасибо! – iambalrog