Vorrei aggiungere questo come commento in risposta alla risposta di @Nathan Reed, tranne per il fatto che è troppo grande per essere un commento, e forse è comunque degno di essere una risposta separata.
Stavamo facendo esattamente ciò che è stato proposto nella sua risposta, e in effetti abbiamo commentato nella fonte il link a questa pagina. Per la maggior parte, ha funzionato molto bene, tranne che una volta ogni due o tre mesi, abbiamo perso un server a caso che è diventato non reattivo a causa dell'enorme durata delle query di ricerca.
La causa principale del problema è venuta alla mia attenzione mentre eseguivo un controllo delle prestazioni per cercare di capire cosa lo causasse. Probabilmente è solo una preoccupazione se permetti oggetti sovrapposti. Nel nostro gioco lo facciamo e, nel peggiore dei casi, a volte porta a un picco di profondità che uccide le prestazioni.
Avevamo un caso limite in cui circa 100 oggetti, tutti con dischi di delimitazione, erano raggruppati nelle immediate vicinanze. Ciò ha portato al problema di un picco molto profondo nell'albero, perché siamo arrivati al punto in cui gli oggetti erano più grandi dell'area coperta dai nodi quadrifogli, quindi ogni nuovo oggetto si presentava in più nodi, portando a una suddivisione massiccia del albero, quindi innescando il problema senza controllo.
Il risultato è che se permetti alle regioni di oggetti di sovrapporsi, tieni d'occhio le cose se ottieni ammassi ristretti di oggetti, per assicurarti che l'albero non diventi troppo profondo.
La soluzione che sto attualmente studiando è quella di archiviare oggetti come punti e quindi, quando si esegue una ricerca, aumentare i limiti del rettangolo di ricerca del raggio massimo memorizzato nella struttura. Ciò dovrebbe funzionare per noi, poiché l'albero è una ricerca di primo passaggio, quindi eseguiamo un controllo dell'intervallo basato su un vero cerchio, insieme ad alcuni altri controlli sui criteri, in modo che i falsi avvisi aggiuntivi vengano filtrati.
Il chilometraggio effettivo può variare.