Программное изменение размера функций OL3

У меня есть карта с пользовательскими функциями. После того, как пользовательская настройка введет масштаб карты, мне нужно иметь возможность изменять размеры всех существующих объектов карты на основе этого масштаба.

Как это сделать в OL 3? Я видел, что в OL 2 есть функция геометрии.resize.

Спасибо.


person Violet    schedule 07.04.2015    source источник


Ответы (2)


Вы можете сделать это, используя StyleFunction.

Посмотрите на следующий пример: http://openlayers.org/en/v3.4.0/examples/vector-layer.html

Если вы увеличите карту, вы увидите, что метки появляются с определенным разрешением. Это контролируется внутри функции стиля. Вот фрагмент:

var featureOverlay = new ol.FeatureOverlay({
  map: map,
  style: function(feature, resolution) {
    // === SEE THIS NEXT LINE ===
    var text = resolution < 5000 ? feature.get('name') : '';
    if (!highlightStyleCache[text]) {
      highlightStyleCache[text] = [new ol.style.Style({
        stroke: new ol.style.Stroke({
          color: '#f00',
          width: 1
        }),
        fill: new ol.style.Fill({
          color: 'rgba(255,0,0,0.1)'
        }),
        text: new ol.style.Text({
          font: '12px Calibri,sans-serif',
          text: text,
          fill: new ol.style.Fill({
            color: '#000'
          }),
          stroke: new ol.style.Stroke({
            color: '#f00',
            width: 3
          })
        })
      })];
    }
    return highlightStyleCache[text];
  }
});

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

person Alexandre Dubé    schedule 08.04.2015
comment
Повлияет ли это на объем функций? На самом деле мне нужно иметь возможность получить точный размер функций в метрах, который должен соответствовать ожиданиям пользователя на основе заданного масштаба. - person Violet; 13.04.2015
comment
Стиль не повлияет на размер геометрии. - person Alexandre Dubé; 13.04.2015

вы можете использовать API: map.updateSize().

Ссылка: http://openlayers.org/en/latest/apidoc/ol.Map.html#updateSize

person lehanh    schedule 11.05.2017