我正在处理数十亿行数据,每一行都有一个关联的起始纬度/经度和结束纬度/经度。我需要计算每个起点/终点之间的距离——但这需要很长时间。我真的需要让我正在做的事情更有效率。
目前我使用一个函数(如下)来计算点之间的斜边。有什么方法可以提高效率吗?我应该说我已经尝试将纬度/经度转换为空间地理并使用 STDistance() 函数中内置的 SQL(未编入索引),但这甚至更慢。
任何帮助将非常感激。我希望有某种方法可以加快该功能,即使它会稍微降低精度(最近 100m 可能还可以)。提前致谢!
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