2011-12-19 12 views
5

Ho una mappa OpenLayers con un livello TMS. Per ogni cambio di zoom, la mia mappa effettua circa 56 richieste di tessere mappa (a seconda della dimensione della mappa/dello schermo). Se l'utente ingrandisce o rimpicciolisce rapidamente, tutte queste richieste di tessere mappa vengono messe in coda in ordine e la mia comprensione è che le richieste di tile della mappa di OpenLayers non vengono chiamate in modo asincrono. Quindi, se un utente esegue rapidamente lo zoom in avanti o all'indietro, ci sono molte richieste per i riquadri delle mappe che non sono più necessari e quelli che sono necessari non verranno caricati fino a quando non verranno eseguite tutte le richieste precedenti.Come interrompere la richiesta di tile della mappa con OpenLayers quando lo zoom cambia?

C'è un modo per interrompere le richieste di tile della mappa in sospeso quando lo zoom cambia? Se non tramite OpenLayers, c'è un modo per abortire tutte le richieste in sospeso a un URL specifico?

+0

Per quanto riguarda OPEN LAYER api spiega, ci sono eventi come KEY UP, KEY DOWN e così via. Se è possibile controllare gli eventi per inviare una richiesta una volta che la chiave è attiva. E c'è una funzione destroy() che può aiutarti a rimuovere precedenti richieste accumulate. –

+0

C'è una classe chiamata control che puoi controllare qui http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Control-js.html#OpenLayers.Control che gestisce tutto questo. Spero che sia d'aiuto. Cordiali saluti –

risposta

2

Update per OpenLayers 2.12 o superiore, perché da questa versione la coda di piastrelle è stato migliorato e ora eviterà le vecchie richieste. Per citare dal OpenLayers 2.12 Release Notes:

Il codice piastrelle è stata revisionata così carico di piastrelle in strati di griglia è ora è fatto in una coda. La coda di tessere offre un maggiore controllo sulle richieste di tile inviate al server. Le richieste in sospeso per le tile che non sono più richieste da (ad esempio dopo lo zoom o il panning) vengono evitate, il che aumenta le prestazioni e riduce il carico del server.

+0

È ancora valido? Il codice non è più presente nel master e sembra essere stato sostituito da qualcosa di simile; meglio? Tuttavia, il problema esiste ancora nei miei clienti. – relet

1

Dopo aver definito lo zoom con la rotellina del mouse, è possibile utilizzare il seguente codice per evitare che le piastrelle di carico per tutti i zoomlevels intermedi:

new OpenLayers.Control.Navigation({ 
    "zoomWheelEnabled": true, 
    "mouseWheelOptions": { 
     "interval": 250, 
     "cumulative": true 
    } 
})