É possível exportar dados espaciais do SQL Server 2008 em formato gml2?

votos
1

SQL Server 2008 oferece suporte a dados espaciais com nova geometria e geografia UDT de. Ambos suportam método AsGml () para serializar dados em formato GML. No entanto, eles serializar dados em formato GML3. Existe alguma maneira de dizer isso para serializar dados em formato gml2?

Publicado 09/12/2008 em 15:03
fonte usuário
Em outras línguas...                            


4 respostas

votos
1

AFAIK, não há recurso interno para serializar dados geoespaciais para GML 2.x. Você precisa usar algumas ferramentas de terceiros, implementar um youserlf escritor ou, esta sugestão pode soar um pouco estranho, usar PostGIS para esta transição.

PostGIS é banco de dados alternativo geoespacial, solução semelhante ao SQL Server, mas a implementação de- / serialização para ambos os formatos: GML 2 e GML 3 .

O que eu sugiro é usar PostGIS como um armazenamento intermediário e traduzir.

  1. Armazenar dados para GML 3 usando funções SQL Server

  2. Carregar dados serializado para GML 3 usando PostGIS função ST_GeomFromGML

  3. Armazenar dados de PostGIS a 2 formato GML usando ST_AsGML que permite que você especifique a versão alvo de GML:text ST_AsGML(integer version, geometry g1);

Pode parecer estranho para propor outro banco de dados geoespaciais, mas tenho certeza que ele iria trabalhar bastante bem e bem.

Respondeu 03/02/2010 em 20:32
fonte usuário

votos
0

Bem desde que você terminou, não há muito ponto, mas eu recomendo colocar geoserver na frente do SQL Server. Geoserver tem todo o código de serialização construído em para quase qualquer formato que você quer, é fácil cheezy de instalar, e funciona como anunciado.

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

Respondeu 08/02/2010 em 04:24
fonte usuário

votos
0

Como disse Marko, não há suporte para gml2 no SQL Server 2008, então eu acabei escrevendo uma função para transformar GML3 devolvido pelo servidor para gml2 que eu precisava.

Respondeu 14/02/2009 em 13:02
fonte usuário

votos
0

Não há suporte para gml2, mas não há API de extensibilidade que pode ser usado para implementar serialização personalizada.

Aqui está um exemplo de serialização personalizada usando SqlGeometry.Populate (IGeometrySink) método (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 fazer desserialização classe de uso 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;
Respondeu 30/01/2009 em 18:03
fonte usuário

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