Я пытаюсь выполнить очень эффективную проверку, чтобы увидеть, находятся ли две точки в пределах мили друг от друга.Учитывая два лата/longs, как я могу определить, находятся ли они в пределах 1 мили друг от друга?
Я только уход, являются ли они в пределах мили - ничего о вопросах расстояния до меня.
Из-за этого узкого внимания, я не ищет общие цели «how far apart are these points».
Мой текущий подход - вычислить Haversine distance, а затем проверить, не меньше ли мили.
Эффективность имеет значение в этом случае, потому что я должен вычислить этот флаг yes/no для больших наборов записей.
Итак, каков наиболее эффективный способ узнать, находятся ли две лат/длинные точки в миле друг от друга?
Я делаю эту проверку в T-SQL, но это не так важно. Мое текущее вычисление haversine ниже.
CREATE FUNCTION dbo.USR_UFN_HAVERSINE_DISTANCE
(
@LAT1 FLOAT(18)
,@LONG1 FLOAT(18)
,@LAT2 FLOAT(18)
,@LONG2 FLOAT(18)
,@UnitOfMeasure NVARCHAR(10) = 'KILOMETERS'
)
RETURNS FLOAT(18)
AS
BEGIN
DECLARE
@R FLOAT(8)
,@DLAT FLOAT(18)
,@DLON FLOAT(18)
,@A FLOAT(18)
,@C FLOAT(18)
,@D FLOAT(18)
;
SET @R =
CASE @UnitOfMeasure
WHEN 'MILES' THEN 3956.55
WHEN 'KILOMETERS' THEN 6367.45
WHEN 'FEET' THEN 20890584
WHEN 'METERS' THEN 6367450
ELSE 6367.45 --km
END
SET @DLAT = RADIANS(@LAT2 - @LAT1);
SET @DLON = RADIANS(@LONG2 - @LONG1);
SET @A = SIN(@DLAT/2)
* SIN(@DLAT/2)
+ COS(RADIANS(@LAT1))
* COS(RADIANS(@LAT2))
* SIN(@DLON/2)
* SIN(@DLON/2);
SET @C = 2 * ASIN(MIN(SQRT(@A)));
SET @D = @R * @C;
RETURN @D;
END;
Возможный дубликат [Самый быстрый способ найти расстояние между двумя Lat/Long Points] (http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat -long-points) –
@ KenY-N Спасибо, что указал на меня. У меня уже есть функция общего назначения, чтобы получить расстояние между двумя точками. Поскольку в этом случае мне все равно, если расстояние находится в миле или нет, я надеюсь, что есть более быстрый способ, не имея на самом деле вычисления полного расстояния. Я отредактировал вопрос, чтобы попытаться сделать это различие понятным. – JosephStyons
Проверьте второй ответ на этот вопрос? Кажется, что вы приближаетесь к тому, что хотите ... –