我正在处理数十亿行数据,每行都有一个相关的起始纬度/经度和终点纬度/经度。我需要计算每个起点/终点之间的距离 - 但这需要很长的时间。 我真的需要做出我正在做的事情。
目前我使用一个函数(下面)来计算点之间的斜边。有什么方法可以提高效率吗? 我应该说我已经尝试将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
答案 0 :(得分:2)
我从1994年左右开始没有做任何SQL编程,但是我做了以下观察: