sql >> Databasteknik >  >> RDS >> Sqlserver

Beräkna avstånd mellan två punkter (latitud, longitud)

Eftersom du använder SQL Server 2008 har du geography tillgänglig datatyp, som är designad för just denna typ av data:

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

SELECT @source.STDistance(@target)

Ger

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

(1 row(s) affected)

Berättar för oss att det är cirka 538 km från (nära) London till (nära) Edinburgh.

Naturligtvis kommer det att finnas en del att lära sig först, men när du väl vet det är det mycket mycket lättare än att implementera din egen Haversine-beräkning; plus att du får MYCKET funktionalitet.

Om du vill behålla din befintliga datastruktur kan du fortfarande använda STDistance , genom att konstruera lämplig geography instanser som använder Point metod:

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. PostgreSQL:FOREIGN KEY/ON DELETE CASCADE

  2. Formatera ett tal som valuta i SQLite

  3. hur väljer man jämna poster från en tabell i Oracle?

  4. Hur man snabbar på att ladda data från oracle sql till pandas df