Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

temukan lokasi terdekat di ms-sql

Gunakan fungsi ini

CREATE FUNCTION dbo.DictanceKM(@lat1 FLOAT, @lat2 FLOAT, @lon1 FLOAT, @lon2 FLOAT)
RETURNS FLOAT 
AS
BEGIN

    RETURN ACOS(SIN(PI()*@lat1/180.0)*SIN(PI()*@lat2/180.0)+COS(PI()*@lat1/180.0)*COS(PI()*@lat2/180.0)*COS(PI()*@lon2/180.0-PI()*@lon1/180.0))*6371
END

Anda dapat memesan dengan fungsi ini, TETAPI pada kumpulan data yang besar akan sangat lambat, jadi cobalah untuk memfilter kumpulan data sebelumnya

UPD:

Menggunakan data pengujian @chopikadze:

declare @lat float, @lng float
select @lat = 41.0186, @lng = 28.964701

declare @Location table(Latitude float, Longtitude float, Name nvarchar(50))
insert into @Location(Latitude, Longtitude, Name) values (41.0200500000, 40.5234490000, 'a')
insert into @Location(Latitude, Longtitude, Name) values (41.0185714000, 37.0975924000, 'b')
insert into @Location(Latitude, Longtitude, Name) values (41.0184913000, 34.0373739000, 'c')
insert into @Location(Latitude, Longtitude, Name) values (41.0166667000, 39.5833333000, 'd')
insert into @Location(Latitude, Longtitude, Name) values (41.0166667000, 28.9333333000, 'e')

SELECT ABS(dbo.DictanceKM(@lat, Latitude, @lng, Longtitude)) DistanceKm, * FROM @Location
ORDER BY ABS(dbo.DictanceKM(@lat, Latitude, @lng, Longtitude))

Dengan asumsi bahwa Bumi BUKAN geoid, tetapi bola bundar, jika Anda membutuhkan formula tepat di bawah 1m - saya dapat menemukannya, jangan bawa saya



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ikhtisar Kompresi Data di SQL Server

  2. Dapatkan substring di SQL Server

  3. Apa perbedaan antara char, nchar, varchar, dan nvarchar di SQL Server?

  4. Log transaksi untuk database 'databasename' sudah penuh.

  5. Fungsi rollup - Ganti NULL