Как мне отменить невыполненный запрос фрагмента карты с помощью OpenLayers при изменении масштаба?

У меня есть карта OpenLayers со слоем TMS. Для каждого изменения масштаба моя карта делает около 56 запросов на фрагменты карты (в зависимости от размера карты / экрана). Если пользователь быстро увеличивает или уменьшает масштаб, все эти запросы фрагментов карты помещаются в очередь по порядку, и я понимаю, что запросы фрагментов карты из OpenLayers не вызываются асинхронно. Поэтому, если пользователь быстро увеличивает или уменьшает масштаб, в конечном итоге возникает множество запросов на фрагменты карты, которые больше не нужны, а те, которые необходимы, не загружаются, пока не будут выполнены все предыдущие запросы.

Есть ли способ отменить ожидающие запросы плитки карты при изменении масштаба? Если не через OpenLayers, есть ли способ прервать все ожидающие запросы к определенному URL-адресу?


person Paul    schedule 19.12.2011    source источник
comment
Как объясняет API OPEN LAYER, существуют такие события, как KEY UP, KEY DOWN и так далее. Если вы можете управлять событиями, чтобы отправить запрос, когда ключ поднят. И есть функция destroy (), которая может помочь вам удалить предыдущие накопленные запросы.   -  person Murtaza Khursheed Hussain    schedule 03.04.2012
comment
Здесь есть класс под названием control dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/, который всем этим занимается. Надеюсь, это поможет. С Уважением   -  person Murtaza Khursheed Hussain    schedule 03.04.2012


Ответы (2)


Обновите OpenLayers 2.12 или более поздней версии, потому что, начиная с этой версии, очередь плиток была улучшена и теперь позволяет избегать старых запросов. Чтобы процитировать OpenLayers 2.12 Release Notes:

Код листов был переработан, поэтому загрузка листов в слоях сетки теперь выполняется в очереди. Очередь плитки дает больше контроля над запросами плитки, отправляемыми на сервер. Ожидающие запросы для плиток, которые больше не нужны (например, после масштабирования или панорамирования), избегаются, что увеличивает производительность и снижает нагрузку на сервер.

person EPSG31468    schedule 21.08.2012
comment
Это все еще в силе? Код больше не присутствует в мастере и, похоже, был заменен чем-то похожим; лучше? Однако проблема у моих клиентов все еще существует. - person relet; 23.11.2013

Когда вы определили масштабирование с помощью колеса мыши, вы можете использовать следующий код, чтобы предотвратить загрузку плиток для всех промежуточных уровней масштабирования:

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