2008-12-09 28 views

回答

0

正如馬爾科說,有在Sql Server 2008中不支持gml2,所以我最終編寫了一個函數,用於將服務器返回的gml3轉換爲我需要的gml2。

0

沒有支持GML2,但有擴展性API可用於實現自定義序列化。

這裏是自定義序列的使用SqlGeometry.Populate(IGeometrySink)方法(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(')'); 
    } 
} 

要執行反序列化使用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; 
1

AFAIK,沒有內置功能將地理空間數據序列化到GML 2.x.你需要使用一些第三方工具,實現一個你想寫的作家,或者,這個建議可能聽起來有點奇怪,使用PostGIS進行這個轉換。

PostGIS是替代地理空間數據庫,與SQL Server類似的解決方案,但實現了de-/serialization格式:GML 2和GML 3

我建議使用PostGIS作爲中間和翻譯存儲。

  1. 存儲數據到GML 3使用使用ST_AsGML,讓您的SQL Server功能

  2. 加載數據序列化到GML 3使用PostGIS的功能ST_GeomFromGML

  3. 存儲的數據從PostGIS的到GML 2格式指定GML的目標版本:text ST_AsGML(integer version, geometry g1);

它聽起來可能是str憤怒提出另一個地理空間數據庫,但我相信它會工作相當順利和良好。

相關問題