cluster lato server di coordinate in base al livello di zoom
-
18-09-2019 - |
Domanda
Grazie a questo rispondono sono riuscito a trovare una soluzione temporanea per il mio problema.
Tuttavia, con un elenco di 6000 punti che cresce ogni giorno sta diventando sempre più lentamente.
Non riesco a utilizzare un servizio di terze parti * quindi ho bisogno di venire con la mia soluzione.
Ecco le mie esigenze:
-
Clustering delle coordinate bisogno di lavorare con qualsiasi livello di zoom della mappa.
-
Tutti i cluster devono essere memorizzate nella cache
-
L'ideale non ci sarà la necessità di grappolo (calcolare le distanze) su tutti punti se si aggiunge un nuovo punto.
Finora ho implementato quadtree che restituisce i quattro confini della mia mappa e restituisce qualunque coordinate sono all'interno della sezione visibile della mappa.
Quello che mi serve e so che questo non è facile è quello di avere grappoli di punti restituiti dal DB (postgres).
Soluzione
Attualmente sto facendo dinamica clustering di server-side di circa 2.000 marcatori, ma funziona piuttosto veloce fino a 20.000. Si può vedere la discussione del mio algoritmo qui:
Ogni volta che l'utente sposta la mappa mando una richiesta con il livello di zoom e i confini della vista del server, che raggruppa i marcatori visibili e lo invia al client.
Non memorizzare nella cache i cluster perché i marcatori possono essere filtrati in modo dinamico e ricercato - ma se fossero pre-raggruppati sarebbe super veloce
!Altri suggerimenti
Non vedo il motivo per cui si deve "cluster" on the fly. Riassumere ad ogni livello di zoom a una risoluzione sei felice con.
Avere una semplice struttura di X, Y, # dei collegamenti. Quando qualcuno aggiunge un collegamento, si inseriscono i luoghi reali (livello di zoom massimo, o altro), quindi avviare zampillante da lì.
Alla fine avrete 10 (se si dispone di 10 livelli di zoom) serie di coordinate distinti, uno per ogni livello di zoom diverso.
Il calcolo è banale, e hai solo di farlo una volta.