2008-12-09 66 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愤怒提出另一个地理空间数据库,但我相信它会工作相当顺利和良好。

相关问题