Trova se la posizione corrente si trova vicino ad altre posizioni con i raggi dati

0

tl; dr: "Sono, con qualsiasi posizione, all'interno di un numero qualsiasi di cerchi con raggi diversi"

Si supponga di avere un database pieno di posizioni (coordinate) con raggi arbitrari. Ora l'utente entra e fornisce il back-end con la loro posizione corrente.

In che modo il back-end può individuare in modo efficiente quali posizioni restituire?

Sto attraversando un periodo difficile a pensarci su questo e tutti i miei risultati su google sono al contrario (la posizione dell'utente fornisce il raggio e cerchiamo tutti gli elementi nella cerchia utente).

A cosa non sto pensando? Ho bisogno di più caffè?

    
posta pmilla1606 29.06.2016 - 16:34
fonte

1 risposta

1

Più caffè è sempre buono!

Come suggerito, c'è sicuramente un'estensione geospaziale per il tuo database, ma potrebbe essere eccessivo per quello che vuoi. Lo baserei su quadrati, piuttosto che su cerchi, e successivamente rifinirei la selezione.

  1. Il metodo "corretto"

    SELECT * FROM LOCATIONS WHERE ?1 >= X - RADIUS AND ?1 <= X + RADIUS AND ?1 >= Y - RADIUS AND ?1 <= Y + RADIUS
    
  2. Distanza Manhattan

    SELECT * FROM LOCATIONS WHERE ABS(?1 - X) + ABS(?2 - Y) <= RADIUS*1.5
    

    L'1.5 (o meglio, sqrt (2)) è perché questa distanza è sempre maggiore di (o uguale a) la distanza reale.

  3. Memorizza il rettangolo di delimitazione piuttosto che la posizione e il raggio?

    SELECT * FROM LOCATIONS WHERE ?1 >= X_MIN AND ?1 <= X_MAX AND ?2 >= Y_MIN AND ?2 <= Y_MAX
    

    Come bonus aggiuntivo, potresti probabilmente creare un indice su (X_MIN, X_MAX, Y_MIN, Y_MAX) e accelerare le cose.

  4. Crea una vista per il rettangolo di limitazione se vuoi mantenere posizione / raggio così com'è.

  5. Probabilmente molte altre cose che si possono fare ...

risposta data 29.06.2016 - 18:23
fonte

Leggi altre domande sui tag