Source: geometry/operations/difference.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 DifferenceResult = require('../operations/types/differenceResult');

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

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

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

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


module.exports = Difference;