6 votos

¿Cómo persistir en un polígono a base de datos SQL Server y viceversa?

¿Cómo puedo extraer todos los puntos de un Polígono dibujado en ArcMAP y, a continuación, persistir los datos en una base de datos SQLServer tabla que contiene la geometría de la columna y, a continuación, cuando tengo los datos persistió leer de la base de datos y dibujar el polígono de nuevo.

Estoy trabajando con ArcGIS 10 sp1 con ArcObjects .NET (C#) sp1. He hecho un complemento de la herramienta para dibujar el polígono y quiere que añadir a persistir. Yo sé cómo hacer los últimos pasos de correo.g poniendo la geometría de datos en la base de datos y el dibujo de un IPolygon instancia en ArcMAP, lo que no sé cómo hacer es de alguna manera "convertir" el Polígono en algo que va a "encajar" en la geometría de la columna de la base de datos y viceversa.

Soy completamente nuevo de ArcObjects de programación y sistemas de información geográfica en general, inició hace dos semanas, tan desnudo conmigo...

6voto

jonesdavide Puntos 176

Tu comentario añade más penetración en cuanto a lo que está tratando de hacer. Sólo podría almacenar como WKT (texto bien conocido) Usar ArcObjects para obtener la geometría de WKB, luego usar algo como Sharpmap convertir a WKT.

    /// <summary>
    /// Converts geometry into WKB
    /// </summary>
    /// <param name="geometry">The geometry.</param>
    /// <returns>byte array of a WKB geometry</returns>
    public static byte[] ToWKB(this IGeometry geometry)
    {
        IWkb wkb = geometry as IWkb;
        ITopologicalOperator oper = geometry as ITopologicalOperator;
        oper.Simplify();

        IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
        byte[] b = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
        return b;
    }


    /// <summary>
    /// Converts WKB to WKT
    /// </summary>
    /// <param name="geometry">The geometry.</param>
    /// <returns>WKT string</returns>
    public static string ToWKT(this IGeometry geometry)
    {
        byte[] wkb = geometry.ToWKB();
        SharpMap.Geometries.IGeometry sharpGeom = SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse(wkb);
        return SharpMap.Converters.WellKnownText.GeometryToWKT.Write(sharpGeom);
    }

    /// <summary>
    /// Sets the byte value.
    /// </summary>
    /// <param name="row">The row to the featureclass or table row</param>
    /// <param name="fieldName">Name of the field.</param>
    /// <param name="data">The byte array to store.</param>
    /// <returns>true if the field is found and value set</returns>
    public static bool SetByteValue(this IRow row, string fieldName, byte[] data)
    {
        int index = row.Fields.FindField(fieldName);

        if (index != -1)
        {
            IMemoryBlobStreamVariant memoryBlobStream = new MemoryBlobStreamClass();
            memoryBlobStream.ImportFromVariant(data);

            if (row.Fields.get_Field(index).Editable)
            {
                row.set_Value(index, memoryBlobStream);
                return true;
            }
        }

        return false;
    }

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