Как изменить размер Box, Open Layers 3? - PullRequest
0 голосов
/ 31 мая 2018

Я могу нарисовать поле , и я также могу переместить / перетащить поле правильно.Но как я могу изменить размер окна?

что именно мне нужно :

Пример OpenLayers 2,

https://harrywood.co.uk/maps/examples/openlayers/bbox-selector.view.html

Вот мой код :

  var raster = new ol.layer.Tile({
    source: new ol.source.OSM()
  });

  var source = new ol.source.Vector({wrapX: false});

  var vector = new ol.layer.Vector({
    source: source
  });

  var map = new ol.Map({
    layers: [raster, vector],
    target: 'map',
    view: new ol.View({
      center: [-11000000, 4600000],
      zoom: 4
    })
  });


var geometryFunction = ol.interaction.Draw.createBox();
box = new ol.interaction.Draw({
  source: source,
  type: 'Circle',
  geometryFunction: geometryFunction
});

box.on('drawend', function (e) {
  var bounds = e.feature.getGeometry().getExtent();
  console.log(bounds);
});

map.addInteraction(box);

Код для выбора и перетаскивания / перемещения:

var select = new ol.interaction.Select();

var translate = new ol.interaction.Translate({
  features: select.getFeatures()
});

translate.on('translateend', function (e) {
  var bounds = e.features.getArray()[0].getGeometry().getExtent()
  console.log(bounds);
});

map.addInteraction(select);
map.addInteraction(translate);

1 Ответ

0 голосов
/ 31 мая 2018

Разработка моего комментария:

Вам необходимо обновить / изменить геометрию «прямоугольника» (я полагаю, многоугольника), чтобы он выглядел «измененным», в конце любой операции, которая показывает что-то накарта, в которой используются экстенты, указывающие OL, где размещать объекты (по существу).

Я сделал небольшой пример, демонстрирующий, как использовать метод .scale для объекта Geometry объекта.

CodePen

Объяснение:

draw.on("drawend", function(e){
  var iterations = 0;
  var interval = setInterval(function(){
    if(iterations == 10){
      clearInterval(interval);
    }
    iterations++;

    var feature = e.feature;

    var coords = feature.getGeometry();

    coords.scale(0.9, 0.9);

  }, 300)

Этот код я использую для масштабирования нарисованного многоугольника, когда многоугольник нарисован на карте.Я всегда масштабирую его на 0,9 (что уменьшает его (базовое масштабирование)).

  • 1 = тот же самый размер
  • 0. * = меньше
  • 1. * = Больше

Вам необходимо использовать логику, аналогичную приведенной выше, чтобы изменить размеры полигонов.Вам нужен объект объекта, затем извлеките объект Geometry и используйте метод .scale.

Аргументы метода scale(sx, yx) следующие:

  • sx = Коэффициент масштабирования внаправление x.
  • yx = коэффициент масштабирования в направлении y (по умолчанию sx).

Для получения дополнительной информации Класс геометрии в документах OL

...