OpenLayers пропускают загрузку векторных объектов выше определенного разрешения

#openlayers

#openlayers

Вопрос:

Я использую OpenLayers для чтения векторных объектов с геосервера с помощью пользовательской функции загрузки в исходном коде. Поскольку функций много, я хотел бы пропустить их загрузку выше определенного разрешения, например 20. Функция загрузчика получает разрешение в качестве параметра, поэтому я могу просто вернуться без какой-либо загрузки xhr. До этого момента все было нормально. Проблема в том, что OpenLayers ведет учет всех загруженных экстентов (loadedExtentsRtree_) и вставляет этот пропущенный экстент. Поэтому в следующий раз, когда пользователь увеличивает масштаб ниже порогового значения, он ничего не загружает, потому что помнит, что этот экстент уже был загружен — на самом деле его не было. Существует метод removeLoadedExtent, но на момент пропуска этого экстента еще нет. Я проверил исходный код, и OpenLayers сначала вызывает мой загрузчик, а затем вставляет экстент.

У кого-нибудь есть идеи? Я уже некоторое время борюсь с этим. Спасибо!

Комментарии:

1. Я думаю, что экстент устанавливается при вызове загрузчика. В примере загрузчика openlayers.org/en/latest/apidoc /… как вызов removeLoadedExtent при сбое xhr будет отличаться от его вызова, если вы не отправляете xhr? Однако вы также можете вызвать removeLoadedExtent пользовательскую функцию стратегии, как в github.com/openlayers/openlayers/blob/main/src/ol/layer /…

2. @Mike, спасибо за ваш ответ. В Vector.js существует функция loadFeature, и в строке 918 вызывается загрузчик. После этого, строка 938, экстент вставляется в loadedExtentsRtree , даже если я решу не загружать его. Насколько я понимаю, удаление загруженного экстента при сбое xhr в приведенном вами примере работает, потому что для сбоя xhr требуется некоторое время, и в это время строка 938 уже будет выполнена.

3. @Mike, пользовательская стратегия была хорошим намеком, спасибо. Мне просто нужно вернуть пустой массив, если выше желаемого разрешения, и все работает. Спасибо! Извините, я здесь новичок, как я могу отметить ваш комментарий как тот, который помог мне решить проблему?