Время рендеринга OpenLayers

#javascript #openlayers-6

#javascript #openlayers-6

Вопрос:

Я хочу стилизовать некоторые точки в OpenLayers на основе свойства, и здесь все в порядке, но время рендеринга очень медленное, раньше я просто использовал один стиль для всех точек, и это было быстро. В обоих случаях я использую одинаковое количество точек (около 9000). Есть идеи о том, что можно улучшить?

Я придаю стиль точкам, используя эту функцию:

 var Styles = function (feature, resolution) {
    if (feature.get('Tipo') === 2) {
        strokecolor = [245,49,5,1];
    }else{
        strokecolor = [130,49,5,1];
    }

    return [new ol.style.Style({
        image: new ol.style.Circle({

            fill: new ol.style.Fill({
                color: strokecolor
            }),
            radius: 3
        })
    })];
};
  

даже если выполнить часть условия и установить для него только одно возможное значение color , это действительно медленно.

Прежде чем я задавал стиль, делающий это:

 var OneStyle = new ol.style.Circle({
    fill: new ol.style.Fill({
    color:[245,49,5,1]
    }),
    radius:3,
})
  

и вот как я называю точки и устанавливаю стиль:

 var events_points = new ol.layer.Vector({

    source: new ol.source.Vector({
    url:urlEvents,
    format: new ol.format.GeoJSON()
    }),
    //style:Styles
    style: new ol.style.Style({
    image:OneStyle,

    })
});
  

Ответ №1:

Старайтесь избегать создания нового объекта стиля при каждом вызове функции

 var style1 = new ol.style.Circle({
    fill: new ol.style.Fill({
        color:[245,49,5,1]
    }),
    radius:3,
});

var style2 = new ol.style.Circle({
    fill: new ol.style.Fill({
        color:[130,49,5,1]
    }),
    radius:3,
});

var Styles = function (feature, resolution) {
    if (feature.get('Tipo') === 2) {
        return style1;
    }else{
        return style2;
    }
};