Source: geometry/operations/union.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 UnionResult = require('../operations/types/unionResult');

/**
 * Класс Union
 * @extends AbstractOperation
 */
class Union extends AbstractOperation {

    /**
     * Создает экземпляр класса Union
     */
  constructor() {
    super()
  }


    /**
     *
     * @param params
     * @return {UnionResult}
     */
  execute(params) {
    let union = operation(params.featureA, params.featureB);
    return new UnionResult({
      feature: union,
      geometry: union.getGeometry()
    })
  }
}

function operation(featureA, featureB) {
  let geomA = parser.read(featureA.getGeometry());
  let geomB = parser.read(featureB.getGeometry());
  let result = geomA.union(geomB);
  return new ol.Feature({
    geometry: parser.write(result)
  });
}

module.exports = Union;