Source: geometry/operations/buffer.js

let ol = require('openlayers');
let jsts = require('jsts/dist/jsts');
let parser = new jsts.io.OL3Parser(undefined, ol);

let AbstractOperation = require('../operations/abstract');
let BufferResult = require('./types/bufferResult');

/**
 * Класс Buffer
 * @extends AbstractOperation
 */
class Buffer extends AbstractOperation {
  /**
   * Создает экземпляр класса Buffer
   */
  constructor() {
    super();
  }

  /**
   *
   * @param feature
   * @param radius
   * @return {BufferResult}
   */
  execute(feature, radius) {
    let buffer = getFeatureBuffer(feature, radius);
    return new BufferResult({
      geometry: buffer.getGeometry(),
      feature: buffer
    });
  }
}

function getFeatureBuffer(feature, bufferSize) {
  let geom = parser.read(feature.getGeometry());
  let buffer = geom.buffer(bufferSize);
  return new ol.Feature({
    geometry: parser.write(buffer)
  });
}

module.exports = Buffer;