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
3 Réponses :
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: p> Il vous donne la distance entre les points. p> ou vous pouvez essayer de passer dans un ordre de tri des valeurs du delta carré du long et de la LATS: p>
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.
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))
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