Frage

SQL Server 2008 unterstützt räumliche Daten mit neuer Geometrie und Geographie UDT. Beide unterstützen AsGml () Methode Daten in GML Format serialisieren. Allerdings serialisiert sie Daten in GML3 Format. Gibt es eine Möglichkeit, es zu sagen, Daten in GML2 Format serialisiert werden?

War es hilfreich?

Lösung 3

Wie Marko sagte, gibt es keine Unterstützung für gml2 in SQL Server 2008, so dass ich gerade zu Ende gegangen, eine Funktion zu schreiben sich für GML3 vom Server zurück Umwandlung zu gml2 dass ich brauchte.

Andere Tipps

AFAIK gibt es keine integrierte Funktion Erdbeobachtungsdaten zu GML 2.x. serialisiert Sie müssen einige Tools von Drittanbietern verwenden, implementieren einen Schriftsteller youserlf oder dieser Vorschlag ein wenig seltsam klingen mag, benutzen PostGIS für diesen Übergang.

PostGIS ist alternative geospatial Datenbank, ähnliche Lösung auf SQL Server, aber die Umsetzung De- / Serialisierung für beide Formate. GML 2 und GML 3

Was würde ich vorschlagen, ist PostGIS als Zwischen und übersetzen Speicher zu verwenden.

  1. Speicherung der Daten auf GML 3 SQL Server-Funktionen mit

  2. Laden von Daten in GML serialisiert 3 mit PostGIS Funktion ST_GeomFromGML

  3. Speichern von Daten von PostGIS zu GML 2-Format mit ST_AsGML , die ermöglicht es Ihnen, Zielversion von GML angeben: text ST_AsGML(integer version, geometry g1);

Es mag seltsam klingen andere geospatial Datenbank vorzuschlagen, aber ich bin sicher, dass es ziemlich glatt und gut funktionieren würde.

Es gibt keine Unterstützung für GML2, aber es gibt Erweiterbarkeit API, die verwendet werden können benutzerdefinierte Serialisierung zu implementieren.

Hier ist ein Beispiel für benutzerdefinierte Serialisierung mit SqlGeometry.Populate (IGeometrySink) Methode (C # -Code):

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(')');
    }
}

Um Deserialisierung Verwendung SqlGeometryBuilder Klasse zu tun:

// 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;

Nun, da Sie fertig es nicht viel Sinn, aber ich würde empfehlen geoserver vor SQL Server setzen. Geoserver hat alle Serialisierungscode für fast jedes Format eingebaut Sie wollen, ist einfach cheezy zu installieren und funktioniert wie beworben.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top