Как интерактивно нарисовать круг в openlayers-3

Меня интересует функциональность, которая была в openlayers-2, но отсутствует на данный момент в 3-й части - интерактивное рисование кругов.

Как видно из примера здесь: http://openlayers.org/en/v3.0.0/examples/draw-and-modify-features.html

Нет доступной опции для Circle. Несмотря на то, что в комментарии указано, что должны быть доступны все @type {ol.geom.GeometryType}, кружок не работает. Пробовал сам с этим фрагментом кода:

function addInteraction(type) {
    draw = new ol.interaction.Draw({
        features: featureOverlay.getFeatures(),
        type: /** @type {ol.geom.GeometryType} */ 'Circle'
    });
    map.addInteraction(draw);
}

Присутствуют ли какие-либо родные \ патчи \ хакерские решения?


person user1929437    schedule 17.11.2014    source источник
comment
Вы видели исходный код примера? есть код для использования cricle для маркера.   -  person Anders Finn Jørgensen    schedule 17.11.2014
comment
Насколько я могу судить, с помощью ol.interaction.Draw невозможно нарисовать круг, что меня разочаровывает. Ах хорошо...   -  person user1929437    schedule 17.11.2014


Ответы (2)


Эта функция была добавлена ​​в версии 3.5.0, пример здесь: http://openlayers.org/en/v3.5.0/examples/draw-features.html

скриншот

Он работает именно так, как вы догадались, т.

draw = new ol.interaction.Draw({
    features: featureOverlay.getFeatures(),
    type: 'Circle'
});
map.addInteraction(draw);
person congusbongus    schedule 29.05.2015

У меня была почти такая же проблема. Вопрос в том, хотите ли вы добавить просто круг из соображений стиля или он вам нужен как многоугольник? Когда вы тоже пытаетесь получить многоугольник, вы можете легко использовать круговую функцию Poylgon.based. Как вы можете видеть в исходном коде ниже, вам нужна только сфера. Например ol.sphere.WGS84. Центральная точка и радиус. Необязательный ввод определяет количество точек. которые используются для определения окружности.

ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) {
var n = goog.isDef(opt_n) ? opt_n : 32;
   /** @type {Array.<number>} */
  var flatCoordinates = [];
  var i;
  for (i = 0; i < n; ++i) {
   goog.array.extend(
        flatCoordinates, sphere.offset(center, radius, 2 * Math.PI * i / n));
  }
  flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
  var polygon = new ol.geom.Polygon(null);
  polygon.setFlatCoordinates(
      ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
  return polygon;
};

Это даже стабильный API, поэтому вы можете получить к нему доступ извне. В моем случае я создал собственный элемент управления, который расширил функцию рисования. Надеюсь, я смог вам помочь.

person foedchr    schedule 23.11.2014
comment
Я пробовал. работает только со сферическими картами, как например на ол сайте. Вам нужно использовать старую функцию для OL2, для карты OSM в EPSG:4326. - person user1929437; 25.11.2014
comment
Я преобразовываю входные параметры в 4326, прежде чем использовать эту функцию, а затем преобразую координаты обратно. Мой вариант использования только около экватора. - person foedchr; 27.11.2014