sql >> Databasteknik >  >> RDS >> Sqlserver

radiesökning efter latitud/longitud

Eftersom du använder SQL 2008, överväg att använda de inbyggda geospatiala funktionerna. Du kan göra snygga saker som:

  • Skapa en beständig beräknad kolumn av geografityp som representerar din punkt.
  • Skapa ett rumsligt index på den beräknade kolumnen. Detta gör saker som yourPoint.STDistance(@otherPoint) <= @distance effektiv

Som så:

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. Vilka effekter har användningen av en binär sammanställning?

  2. MySQL-tabellindexoptimering

  3. Hur man frågar data från databasen med hjälp av frågesträngsvärden

  4. Rails Ansluter till databas specificerad av database.yml