Ho un database pieno di dati bidimensionali - punti su una mappa. Ogni record ha un campo del tipo di geometria. Quello che devo essere in grado di fare è passare un punto a una stored procedure che restituisce i punti più vicini a k (k verrebbe passato anche a sproc, ma è facile). Ho trovato una query al http://blogs.msdn.com/isaac/archive/2008/10/23/nearest-neighbors.aspx che ottiene il singolo vicino più vicino, ma non riesco a capire come estenderlo per trovare i vicini più vicini k.Come posso estendere questa query SQL per trovare i k vicini più vicini?
Questa è la query corrente - T
è la tabella, g
è il campo della geometria, @x
è il punto a cercare in giro, Numbers
è una tabella con i numeri interi 1-n:
DECLARE @start FLOAT = 1000;
WITH NearestPoints AS
(
SELECT TOP(1) WITH TIES *, T.g.STDistance(@x) AS dist
FROM Numbers JOIN T WITH(INDEX(spatial_index))
ON T.g.STDistance(@x) < @start*POWER(2,Numbers.n)
ORDER BY n
)
SELECT TOP(1) * FROM NearestPoints
ORDER BY n, dist
L'interno query seleziona la regione non vuota più vicina e la query esterna seleziona quindi il risultato migliore da quella regione; la query esterna può essere facilmente modificata in (ad esempio) SELECT TOP(20)
, ma se la regione più vicina contiene solo un risultato, sei bloccato con quello. c'e' -
ho dato probabilmente ho bisogno di cercare in modo ricorsivo per la prima regione contenente k dischi, ma senza l'utilizzo di una variabile di tabella (che causerebbe problemi di manutenzione, come è necessario creare la struttura della tabella ed è suscettibile di cambiare molti campi), non riesco a vedere come.
Che effetto ha il cambiamento della query INNER su più di TOP (1) sui risultati quando si trovano i record k?(quando la regione più vicina contiene solo un risultato) – kevchadders
Se si modifica la query interna per selezionare più regioni, è possibile ottenere più risultati, ma ciò non garantisce _guarantee_ più risultati: le altre regioni possono contenere solo lo stesso risultato singolo (aumentano in misura esponenziale) - es immagina di cercare intorno a un punto che ha un punto vicino, ma nessun altro punto per centinaia di chilometri intorno - le prime regioni _n_ conterranno solo lo stesso punto. – Smigs
È mai stata trovata una soluzione funzionante? Sto cercando la stessa soluzione. –