sql >> Database teknologi >  >> RDS >> Sqlserver

radiussøgning efter breddegrad/længdegrad

Da du er på SQL 2008, kan du overveje at bruge de oprindelige geospatiale muligheder. Du kan lave smarte ting som:

  • Opret en vedvarende beregnet kolonne af geografitype, der repræsenterer dit punkt.
  • Opret et rumligt indeks på den beregnede kolonne. Dette vil gøre ting som yourPoint.STDistance(@otherPoint) <= @distance effektiv

Sådan:

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;


  1. opdater xml-data ved hjælp af sql-forespørgsel på postgresql

  2. Hvorfor ignorerer Oracle indeks med ORDER BY?

  3. Hvordan fejlretter du MySQL-lagrede procedurer?

  4. Elastisk søgning fuldtekst vs mysql fuldtekst?