¿Es posible exportar datos espaciales de Sql Server 2008 en formato gml2?

votos
1

Sql Server 2008 admite datos espaciales con nuevos UDT de geometría y geografía. Ambos admiten el método AsGml () para serializar datos en formato gml. Sin embargo, serializan datos en formato GML3. ¿Hay alguna forma de decirle que serialice datos en formato GML2?

Publicado el 09/12/2008 a las 15:03
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
1

Que yo sepa, no hay ninguna característica integrada para serializar los datos geoespaciales a GML 2.x. Es necesario utilizar algunas herramientas de terceros, implementar un escritor o youserlf, esta sugerencia puede sonar un poco extraño, utilizar PostGIS para esta transición.

PostGIS es la base de datos geoespacial alternativa, una solución similar a SQL Server, pero la implementación de deshielo / serialización para ambos formatos: GML GML 2 y 3 .

Lo que me gustaría sugerir es utilizar PostGIS como un almacenamiento intermedio y la traducción.

  1. Almacenar los datos en GML 3 utilizando las funciones de SQL Server

  2. Cargar datos serializados a GML 3 utilizando la función de PostGIS ST_GeomFromGML

  3. Almacenar datos de PostGIS a GML 2 formato utilizando ST_AsGML que le permite especificar versión de destino de GML:text ST_AsGML(integer version, geometry g1);

Puede sonar extraño para proponer otra base de datos geoespacial, pero estoy seguro de que iba a funcionar bastante bien y bien.

Respondida el 03/02/2010 a las 20:32
fuente por usuario

votos
0

Bueno, ya que usted tiene que no tiene mucho sentido, pero yo recomendaría poner geoservidor frente a SQL Server. Geoserver tiene todo el código de serialización incorporado para casi cualquier formato que desee, es fácil de instalar cheezy, y funciona como se anuncia.

http://docs.geoserver.org/2.0.x/en/user/services/wfs/outputformats.html

Respondida el 08/02/2010 a las 04:24
fuente por usuario

votos
0

Como dijo Marko, no hay soporte para gml2 en Sql Server 2008, así que acabo escribiendo una función para transformar gml3 devuelto por el servidor a gml2 que necesitaba.

Respondida el 14/02/2009 a las 13:02
fuente por usuario

votos
0

No hay soporte para GML2, pero existe una API de extensibilidad que se puede usar para implementar la serialización personalizada.

Aquí hay un ejemplo de serialización personalizada que utiliza el método SqlGeometry.Populate (IGeometrySink) (código C #):

CustomWriter w = new CustomWriter();
SqlGeometry.Parse("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))").Populate(w);
System.Console.WriteLine(w);

public class CustomWriter : IGeometrySink {
    private StringBuilder _builder = new StringBuilder();

    public string ToString() {
        return _builder.ToString();
    }

    public void SetSrid(int srid) {
        _builder.Append('@');
        _builder.Append(srid);
    }

    public void BeginGeometry(OpenGisGeometryType type) {
        _builder.Append(" (");
        _builder.Append(type);
    }

    public void BeginFigure(double x, double y, double? z, double? m) {
        _builder.Append(" [");
        _builder.Append(x);
        _builder.Append(' ');
        _builder.Append(y);
    }

    public void AddLine(double x, double y, double? z, double? m) {
        _builder.Append(',');
        _builder.Append(x);
        _builder.Append(' ');
        _builder.Append(y);
    }

    public void EndFigure() {
        _builder.Append(']');
    }

    public void EndGeometry() {
        _builder.Append(')');
    }
}

Para hacer la deserialización use la clase SqlGeometryBuilder:

// Create "POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))" using Builder API
SqlGeometryBuilder b = new SqlGeometryBuilder();
b.SetSrid(0);
b.BeginGeometry(OpenGisGeometryType.Polygon);
    b.BeginFigure(0, 0);
    b.AddLine(10, 0);
    b.AddLine(10, 10);
    b.AddLine(0, 10);
    b.AddLine(0, 0);
    b.EndFigure();
b.EndGeometry();
SqlGeometry g = b.ConstructedGeometry;
Respondida el 30/01/2009 a las 18:03
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more