sql >> Databáze >  >> RDS >> Sqlserver

Výpočet vzdálenosti mezi dvěma body (zeměpisná šířka, délka)

Protože používáte SQL Server 2008, máte geography dostupný datový typ, který je určen přesně pro tento druh dat:

DECLARE @source geography = 'POINT(0 51.5)'
DECLARE @target geography = 'POINT(-3 56)'

SELECT @source.STDistance(@target)

Dává

----------------------
538404.100197555

(1 row(s) affected)

Řekněme, že je to asi 538 km z (nedaleko) Londýna do (nedaleko) Edinburghu.

Přirozeně je potřeba se nejprve hodně naučit, ale jakmile to budete vědět, je to mnohem jednodušší než implementovat vlastní výpočet Haversine; navíc získáte HODNĚ funkcí.

Pokud chcete zachovat stávající strukturu dat, můžete stále použít STDistance , vytvořením vhodné geography instance pomocí Point metoda:

DECLARE @orig_lat DECIMAL(12, 9)
DECLARE @orig_lng DECIMAL(12, 9)
SET @orig_lat=53.381538 set @orig_lng=-1.463526

DECLARE @orig geography = geography::Point(@orig_lat, @orig_lng, 4326);

SELECT *,
    @orig.STDistance(geography::Point(dest.Latitude, dest.Longitude, 4326)) 
       AS distance
--INTO #includeDistances
FROM #orig dest


  1. Jak nastavit a přihlásit se jako uživatel root v MySQL

  2. Jaký je rozdíl mezi použitím INDEX vs KEY v MySQL?

  3. Jak zakázat omezení CHECK v SQL Server (příklady T-SQL)

  4. Funkce LENGTH() v Oracle