private void PopulateFigure(IGeometrySink110 sink) { _figure[0].BeginFigure(sink); for (int i = 1; i < _figure.Count; i++) { _figure[i].AddLine(sink); } sink.EndFigure(); }
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; }
public void AddLine(IGeometrySink110 sink) { sink.AddLine(_x, _y, _z, _m); }
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; }
public GeometryPointFilter(IGeometrySink110 sink) { _sink = sink; }
public GeometryThinRingFilter(IGeometrySink110 sink, double tolerance) { _sink = sink; _tolerance = tolerance; }
public GeometryEmptyShapeFilter(IGeometrySink110 sink) { _sink = sink; }
public GeometryShortLineStringFilter(IGeometrySink110 sink, double tolerance) { _sink = sink; _tolerance = tolerance; }
public GeometryTransformer(IGeometrySink110 sink, AffineTransform transform) { _sink = sink; _transform = transform; }
public Projector(SqlProjection projection, IGeometrySink110 sink) { _projection = projection; _sink = sink; }