Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

recherche de rayon par latitude / longitude

Puisque vous utilisez SQL 2008, envisagez d'utiliser les fonctionnalités géospatiales natives. Vous pouvez faire des choses fantaisistes comme :

  • Créez une colonne calculée persistante de type géographique qui représente votre point.
  • Créez un index spatial sur la colonne calculée. Cela fera des choses comme yourPoint.STDistance(@otherPoint) <= @distance efficace

Comme ceci :

alter table [yourTable] add [p] as geography::Point(Latitude, Longitude, 4326) persisted;
create spatial index [yourSpatialIndex] on [yourTable] ([p])

declare @Latitude float = <somevalue>, @Longitude float = <somevalue>;
declare @point geography = geography::Point(@Latitude, @Longitude, 4326);
declare @distance int = <distance in meters>;

select * from [yourTable] where @point.STDistance([p]) <= @distance;