Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

wyszukiwanie promienia według szerokości / długości geograficznej

Ponieważ korzystasz z SQL 2008, rozważ użycie natywnych funkcji geoprzestrzennych. Możesz robić wymyślne rzeczy, takie jak:

  • Utwórz trwałą kolumnę obliczeniową typu geograficznego, która reprezentuje Twój punkt.
  • Utwórz indeks przestrzenny na wyliczonej kolumnie. Spowoduje to, że takie rzeczy jak yourPoint.STDistance(@otherPoint) <= @distance wydajny

Tak:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL, aby uporządkować rekordy DISTINCT, a następnie zastosować numery wierszy

  2. SQL Server :jak wybrać stałą liczbę wierszy (wybierz każdą x-tą wartość)

  3. Uzyskaj identyfikator ostatnio wstawionego rekordu — Access DAO, ODBC, SQL Server 2008 Identity Field

  4. Możliwe sposoby naprawienia problemu z uszkodzeniem metadanych SQL Server

  5. Najlepszy sposób na uzyskanie tożsamości wstawionego wiersza w połączonym serwerze?