9
votes

Trouvez l'emplacement le plus proche dans MS-SQL

J'envoie ces paramètres mon script: latitude: 41.0186 Longitude: 28.964701 (C'est un échantillon). Je veux trouver le nom de l'emplacement le plus proche. Comment faire cela? (La requête où le code doit être changé)

Query SQL: P>

Latitude         longitude          Name
41.0200500000   40.5234490000        a
41.0185714000   37.0975924000        b
41.0184913000   34.0373739000        c
41.0166667000   39.5833333000        d
41.0166667000   28.9333333000        e


0 commentaires

3 Réponses :


1
votes

Je pense que ce n'est pas si facile que cela se sent. Vous devez effectuer des calculs de la trigonométrie pour obtenir le positation la plus proche à votre emplacement.

Trouvé Nice JavaScript exemple: xxx

Il vous donne la distance entre les points.

ou vous pouvez essayer de passer dans un ordre de tri des valeurs du delta carré du long et de la LATS: xxx


1 commentaires

Notez que les calculs sphéroïdes tels que ceux-ci sont exacts à environ 10 mètres sur des milliers de km. Si une précision plus élevée est nécessaire, utilisez des algorithmes de Vincingy ou de Karney.



8
votes

Utilisez cette fonction

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))


0 commentaires

3
votes
declare @latitude float, @longitude float
select @latitude = 41.0186, @longitude = 28.964701

 SELECT [Name]   --, other columns
      ,Distance
      from
      (
      select 
      [Name]       --, other columns 
       ,( 3959 * acos( cos( radians(@latitude) ) * cos( radians( [Lattitude] ) ) * cos( radians( [Longitude] )
       - radians(@longitude) ) + sin( radians(@latitude) ) * sin( radians( [Lattitude] ) ) ) ) 
       AS Distance  FROM [dbo].[Location]
   ) as x   
    where Distance < 5   
  order by distance

0 commentaires