İki noktanın bir milin içinde olup olmadığını görmek için çok verimli bir kontrol gerçekleştirmeye çalışıyorum.İki lat/longs göz önüne alındığında, birbirlerine 1 mil içinde olup olmadığını nasıl anlarım?
Ben sadece bakım onlar bir mil içinde olup olmadığını - Bana mesafe konularda başka bir şey.
Bu dar odaklama nedeniyle, genel bir "how far apart are these points" işlevini arayan numaralı değilim.
Geçerli yaklaşımım Haversine distance hesaplamasıdır ve daha sonra bir milden daha az olup olmadığını kontrol etmektir.
Bu durumda verim önemli çünkü büyük kayıt kümeleri için bu evet/hayır bayrağını hesaplamam gerekiyor.
Peki, iki lat/uzun noktanın birbirinin milleri içinde olup olmadığını anlamanın en etkili yolu nedir?
Bu denetimi T-SQL'de yapıyorum, çok önemli değil. Mevcut haversine hesaplamam aşağıda. Eğer SRID değiştirerek getiriyi belirtebilirsiniz olsa
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;
Olası kopyalar http://stackoverflow.com/questions/1006654/fastest-way-to-find-distance-between-two-lat -uzun nokta) –
@ KenY-N Orada bana işaret ettiğin için teşekkürler. İki nokta arasındaki mesafeyi elde etmek için zaten bir genel amacım var. Bu durumda sadece mesafenin bir milin içinde olup olmadığına dikkat ediyorum, çünkü tam mesafeyi hesaplamak zorunda kalmadan daha hızlı bir yol olduğunu umuyorum. Soruyu bu açıklamayı denemek ve düzeltmek için düzenledim. – JosephStyons
Bağlantılı sorudaki ikinci cevabı kontrol et. İstediğin şeye doğru ilerliyor gibi görünüyor ... –