Sto utilizzando il tipo di dati geografici di SQL Server per memorizzare la posizione dei record nel mio database. Vorrei selezionare tutti i record all'interno di una data distanza di un determinato luogo:Seleziona record da un database SQL Server utilizzando la geografia e la distanza
DECLARE @location AS geography = geography::Point(@latitude, @longitude, 4326)
DECLARE @distance AS INT = 10000
SELECT *
FROM records
WHERE records.location.STDistance(@location) <= @distance
Con un paio di dozzine di record nel mio database di prova questo funziona abbastanza velocemente e non ho problemi, ma so quella clausola WHERE sta eseguendo STDistance contro tutti i record nel mio database, e una volta che ho migliaia di record, rallenterà fino alla ricerca per indicizzazione.
C'è un modo migliore per farlo? Forse creare una sorta di regione e selezionare prima i dati nelle regioni limitrofe?
Si può fare una serie di delimitazione scatole per restringere la gamma di latitudine/longitudine che vengono controllati nella funzione ST_Distance ... però, io consiglierei di lasciar fare Microsoft esso. Fai un google per l'indicizzazione spaziale MSSQL – Twelfth
[Panoramica sugli indici spaziali] (http://msdn.microsoft.com/en-us/library/bb895265.aspx) – wdosanjos