Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

pesquisa de raio por latitude/longitude


Como você está no SQL 2008, considere usar os recursos geoespaciais nativos. Você pode fazer coisas extravagantes como:
  • Crie uma coluna computada persistente do tipo geografia que represente seu ponto.
  • Crie um índice espacial na coluna calculada. Isso fará com que coisas como yourPoint.STDistance(@otherPoint) <= @distance eficiente

Igual a:
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;