Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Umkreissuche nach Breitengrad / Längengrad

Da Sie SQL 2008 verwenden, sollten Sie die nativen Geodatenfunktionen verwenden. Sie können ausgefallene Dinge tun wie:

  • Erstellen Sie eine persistente berechnete Spalte vom Typ Geographie, die Ihren Punkt darstellt.
  • Erstellen Sie einen räumlichen Index für die berechnete Spalte. Dadurch werden Dinge wie yourPoint.STDistance(@otherPoint) <= @distance erstellt effizient

So:

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;