Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изчисляване на разстоянието между две точки (ширина, дължина)

Тъй като използвате SQL Server 2008, имате geography наличен тип данни, който е предназначен за точно този тип данни:

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

SELECT @source.STDistance(@target)

Дава

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

(1 row(s) affected)

Казва ни, че е на около 538 км от (близо) Лондон до (близо) Единбург.

Естествено, първо ще трябва да се научите, но след като го разберете, е много по-лесно, отколкото да приложите собственото си изчисление на Haversine; плюс получавате МНОГО функционалност.

Ако искате да запазите съществуващата си структура от данни, все още можете да използвате STDistance , чрез изграждане на подходяща geography екземпляри, използващи Point метод:

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. SQL RANK() срещу ROW_NUMBER()

  2. Изграждане на модел за машинно обучение със SQL Server, ML.NET и C#

  3. Достъп директно до база данни на Sql сървър в Xamarin.Forms

  4. Преместване на SQL данни от една таблица в друга

  5. datetime срещу datetimeoffset в SQL Server:Каква е разликата?