Example #1
0
 private void PopulateFigure(IGeometrySink110 sink)
 {
     _figure[0].BeginFigure(sink);
     for (int i = 1; i < _figure.Count; i++)
     {
         _figure[i].AddLine(sink);
     }
     sink.EndFigure();
 }
Example #2
0
 public SqlGeometryProjectionSink(IGeometrySink110 p_Sink, int outSrid, Func <double, double, double[]> coordTransform)
 {
     _sink           = p_Sink;
     _outSrid        = outSrid;
     _coordTransform = coordTransform;
     if (_coordTransform == null)
     {
         _coordTransform = new Func <double, double, double[]>((x, y) => new double[] { x, y });
     }
 }
		public SqlGeometryProjectionSink(IGeometrySink110 p_Sink, int outSrid, Func<double, double, double[]> coordTransform)
		{
			_sink = p_Sink;
			_outSrid = outSrid;
			_coordTransform = coordTransform;
			if (_coordTransform == null)
			{
				_coordTransform = new Func<double, double, double[]>((x, y) => new double[] { x, y });
			}
		}
        /// <summary>
        /// Selectively filter unwanted artifacts in input object:
        ///	- empty shapes (if [filterEmptyShapes] is true)
        ///	- points (if [filterPoints] is true)
        ///	- line strings shorter than provided tolerance (if lineString.STLength less than lineStringTolerance)
        ///	- polygon rings thinner than provided tolerance (if ring.STArea less than ring.STLength * ringTolerance)
        ///	- general behavior: Returned spatial objects will always to the simplest OGC construction
        /// </summary>
        /// <param name="geometry"></param>
        /// <param name="filterEmptyShapes"></param>
        /// <param name="filterPoints"></param>
        /// <param name="lineStringTolerance"></param>
        /// <param name="ringTolerance"></param>
        /// <returns></returns>
        public static SqlGeometry FilterArtifactsGeometry(SqlGeometry geometry, bool filterEmptyShapes, bool filterPoints, double lineStringTolerance, double ringTolerance)
        {
            if (geometry == null || geometry.IsNull)
            {
                return(geometry);
            }

            var geomBuilder         = new SqlGeometryBuilder();
            IGeometrySink110 filter = geomBuilder;

            if (filterEmptyShapes)
            {
                filter = new GeometryEmptyShapeFilter(filter);
            }
            if (ringTolerance > 0)
            {
                filter = new GeometryThinRingFilter(filter, ringTolerance);
            }
            if (lineStringTolerance > 0)
            {
                filter = new GeometryShortLineStringFilter(filter, lineStringTolerance);
            }
            if (filterPoints)
            {
                filter = new GeometryPointFilter(filter);
            }

            geometry.Populate(filter);
            geometry = geomBuilder.ConstructedGeometry;

            if (geometry == null || geometry.IsNull || !geometry.STIsValid().Value)
            {
                return(geometry);
            }

            // Strip collections with single element
            while (geometry.STNumGeometries().Value == 1 && geometry.InstanceOf("GEOMETRYCOLLECTION").Value)
            {
                geometry = geometry.STGeometryN(1);
            }

            return(geometry);
        }
 public VacuousGeographyToGeometrySink(int targetSrid, IGeometrySink110 target)
 {
     _target     = target;
     _targetSrid = targetSrid;
 }
Example #6
0
 public void AddLine(IGeometrySink110 sink)
 {
     sink.AddLine(_x, _y, _z, _m);
 }
Example #7
0
 public void BeginFigure(IGeometrySink110 sink)
 {
     sink.BeginFigure(_x, _y, _z, _m);
 }
        private readonly double _yShift;            // How much to shift in the y direction.

        // We take an amount to shift in the x and y directions, as well as a target sink, to which
        // we will pipe our result.
        public ShiftGeometrySink(double xShift, double yShift, IGeometrySink110 target)
        {
            _target = target;
            _xShift = xShift;
            _yShift = yShift;
        }
Example #9
0
 public GeometryPointFilter(IGeometrySink110 sink)
 {
     _sink = sink;
 }
Example #10
0
 public GeometryThinRingFilter(IGeometrySink110 sink, double tolerance)
 {
     _sink      = sink;
     _tolerance = tolerance;
 }
Example #11
0
 public GeometryEmptyShapeFilter(IGeometrySink110 sink)
 {
     _sink = sink;
 }
Example #12
0
 public GeometryShortLineStringFilter(IGeometrySink110 sink, double tolerance)
 {
     _sink      = sink;
     _tolerance = tolerance;
 }
Example #13
0
 public GeometryTransformer(IGeometrySink110 sink, AffineTransform transform)
 {
     _sink      = sink;
     _transform = transform;
 }
 public Projector(SqlProjection projection, IGeometrySink110 sink)
 {
     _projection = projection;
     _sink       = sink;
 }