5 votos

Mover / desplazar una línea hacia los ejes x e y en el servidor SQL

¿Existe una función en SQL Server para mover / cambiar una geometría hacia ejes X o Y?

introduzca la descripción de la imagen aquí

1voto

vdboor Puntos 1385

Yo mismo implemento la función STShidt y uso SQL Server CLR Integration para implementarlo en el servidor SQL.

La implementación de STShift es:

 [SqlFunction]
public static SqlGeometry STShift(SqlGeometry g, double xShift, double yShift)
{
    var sqlGeometryBuilder = new SqlGeometryBuilder();
    var shiftGeometrySink = new ShiftGeometrySink(xShift, yShift, sqlGeometryBuilder);
    g.Populate(shiftGeometrySink);
    return sqlGeometryBuilder.ConstructedGeometry;
}
 

y ShiftGeometrySink es una implementación de la interfaz IGeometrySink110:

  public class ShiftGeometrySink : IGeometrySink110
    {
        private readonly IGeometrySink110 _target;
        private readonly double _xShift;
        private readonly double _yShift;

        public ShiftGeometrySink(double xShift, double yShift, IGeometrySink110 target)
        {
            _target = target;
            _xShift = xShift;
            _yShift = yShift;
        }

        public void SetSrid(int srid)
        {
            _target.SetSrid(srid);
        }

        public void BeginGeometry(OpenGisGeometryType type)
        {
            _target.BeginGeometry(type);
        }

        public void BeginFigure(double x, double y, double? z, double? m)
        {
            _target.BeginFigure(x + _xShift, y + _yShift, z, m);
        }

        public void AddLine(double x, double y, double? z, double? m)
        {
            _target.AddLine(x + _xShift, y + _yShift, z, m);
        }

        public void EndFigure()
        {
            _target.EndFigure();
        }

        public void EndGeometry()
        {
            _target.EndGeometry();
        }

        public void AddCircularArc(double x1, double y1, double? z1, double? m1, double x2, double y2, double? z2, double? m2)
        {
           _target.AddCircularArc(x1, y1, z1, m1, x2, y2, z2, m2);
        }
    }
 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X