sql >> Databáze >  >> RDS >> Sqlserver

poloměr vyhledávání podle zeměpisné šířky / délky

Protože používáte SQL 2008, zvažte použití nativních geoprostorových funkcí. Můžete dělat fantastické věci jako:

  • Vytvořte trvalý vypočítaný sloupec typu geografie, který představuje váš bod.
  • Vytvořte prostorový index na vypočítaném sloupci. Tím se vytvoří věci jako yourPoint.STDistance(@otherPoint) <= @distance efektivní

Asi takhle:

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. Oracle Hledat ve všech tabulkách ve všech sloupcích řetězec

  2. Použití ALTER k odstranění sloupce, pokud v MySQL existuje

  3. Jsou příkazy CHOP automaticky zakódovány?

  4. Postgres spoušť a zamykání řádku