/// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public IGeometry GetResultGeometry()
        {
            // empty input produces an empty result
            if (_inputGeom.IsEmpty)
            {
                return((IGeometry)_inputGeom.Clone());
            }

            _lineStringMap = new Dictionary <ILineString, TaggedLineString>();
            LineStringMapBuilderFilter filter = new LineStringMapBuilderFilter(this);

            _inputGeom.Apply(filter);
            _lineSimplifier.Simplify(_lineStringMap.Values);
            LineStringTransformer transformer = new LineStringTransformer(this);
            IGeometry             result      = transformer.Transform(_inputGeom);

            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public IGeometry GetResultGeometry()
        {
            // empty input produces an empty result
            if (_inputGeom.IsEmpty)
                return (IGeometry)_inputGeom.Clone();

            _lineStringMap = new Dictionary<ILineString, TaggedLineString>();
            LineStringMapBuilderFilter filter = new LineStringMapBuilderFilter(this);
            _inputGeom.Apply(filter);
            _lineSimplifier.Simplify(_lineStringMap.Values);
            LineStringTransformer transformer = new LineStringTransformer(this);
            IGeometry result = transformer.Transform(_inputGeom);
            return result;
        }