2011-12-19 5 views
5

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

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

+0

Что касается OPEN LAYER api, то есть такие события, как KEY UP, KEY DOWN и т. Д. Если вы можете управлять событиями для отправки запроса после того, как ключ вставлен. И есть функция destroy(), которая может помочь вам удалить предыдущие сложенные запросы. –

+0

Существует класс под названием control, который вы можете проверить здесь http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Control-js.html#OpenLayers.Control, который обрабатывает все это. Надеюсь, поможет. С уважением –

ответ

2

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

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

+0

Это все еще актуально? Код больше не присутствует в master и, похоже, заменен чем-то подобным; лучше? Тем не менее, проблема все еще существует у моих клиентов. – relet

1

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

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