Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Obliczanie odległości między dwoma punktami (szerokość geograficzna, długość geograficzna)

Ponieważ używasz SQL Server 2008, masz geography dostępny typ danych, który jest przeznaczony dla dokładnie tego rodzaju danych:

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

SELECT @source.STDistance(@target)

Daje

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

(1 row(s) affected)

Mówiąc nam, że z (niedaleko) Londynu do (niedaleko) Edynburga jest około 538 km.

Oczywiście najpierw trzeba będzie się sporo nauczyć, ale kiedy już się o tym przekonasz, jest to o wiele łatwiejsze niż wdrażanie własnych obliczeń Haversine; plus zyskujesz DUŻO funkcjonalności.

Jeśli chcesz zachować istniejącą strukturę danych, nadal możesz użyć STDistance , konstruując odpowiednią geography instancje za 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HAS_DBACCESS() – Dowiedz się, czy użytkownik może uzyskać dostęp do bazy danych w SQL Server

  2. Grupy dostępności programu SQL Server AlwaysOn:instalacja i konfiguracja, część 1

  3. Jak utworzyć klucz złożony za pomocą programu SQL Server Management Studio?

  4. Dowiedz się, jak korzystać z programu SQL Server Management Studio

  5. Użyj OBJECT_NAME(), aby uzyskać nazwę obiektu z jego object_id w SQL Server