Проблема с настройкой resFactor.Я создал две демонстрационные карты: одна загружает несколько векторов GeoServer GML и выполняет их рестайлинг без настройки resFactor 1, а другая - с настройкой resFactor 1, а вторая, безусловно, отправляет несколько запросов.Если вы установите для коэффициента выше 1, этого не произойдет.
Нет настройки resFactor + нажатие на рестайл 3 раза дает такой результат:
Только 1 запрос данных.
Однако настройка resFactor3 + нажатие рестайла 3 раза дает такой результат:
4 запроса данных.
Я считаю, что такое поведение вы наблюдаете.Для меня это похоже на ошибку, так как в документации сказано, что вы сделали правильно.Глядя на код в js-файле стратегии BBOX, проблема, похоже, заключается в коде:
var ratio = this.resolution / this.layer.map.getResolution();
invalid = (ratio >= this.resFactor || ratio <= (1 / this.resFactor));
Это выполняется с помощью функции .redraw () для вычисления необходимости перезагрузки данных.Поскольку коэффициент всегда будет равен 1, когда вы перерисовываете карту (разрешение не изменилось, поэтому this.resolution === this.layer.map.getResolution ()), тогда недопустимое значение всегда будет равно true, и поэтому слой перезагружается..
resFactor
{Float} Необязательный коэффициент, используемый для определения того, когда ранее запрошенные функции были недействительными.Если установлено, resFactor будет сравниваться с разрешением предыдущего запроса с текущим разрешением карты.Если resFactor> (старый / новый) и 1 / resFactor <(старый / новый).Если вы установите resFactor 1, данные будут запрашиваться каждый раз, когда изменяется разрешение.Если вы установите resFactor 3, данные будут запрашиваться, если старое разрешение в 3 раза больше нового, или если новое в 3 раза больше старого.Если старые границы не содержат новых границ, всегда будут запрашиваться новые данные (с учетом или без учета resFactor). </p>
Я делаю рестайлы следующим образом:
var style1, style2;
style1 = new OpenLayers.Style({
strokeColor: "yellow",
strokeWidth: 10 });
style2 = new OpenLayers.Style({
strokeColor: "blue",
strokeWidth: 5 });
function restyle1()
{
layer.styleMap = style1;
layer.redraw();
}
function restyle2()
{
layer.styleMap = style2;
layer.redraw();
}