Sql服务器2008支持空间数据的新几何和地理UDT。他们都支持AsGml()法化数据在抵格式。然而,他们序列数据转GML3格式。是否有任何方法来告诉它序列数据转GML2格式?

有帮助吗?

解决方案 3

由于马尔科说,有一个在SQL Server 2008 GML2的支持,所以我最后写一个函数转换由服务器返回给GML3 GML2,我需要的。

其他提示

据我所知,还没有建立在功能化地理空间数据,以抵2.x.你需要使用某些第三方的工具,实施一个作家youserlf或者,这一建议听起来可能有点奇怪,使用 PostGIS 对于这一过渡。

PostGIS是替代地理空间数据库,类似的解决方案到SQL服务器,而是执行 de-/化对两个格式:抵2和抵3.

什么我建议是使用PostGIS作为中间和翻译存储。

  1. 储存数据,以抵3使用SQL服务器的功能

  2. 负载数据化,以抵3使用PostGIS功能 ST_GeomFromGML

  3. 储存数据,从PostGIS以抵2格式的使用 ST_AsGML 它可以指定目标版本的抵: text ST_AsGML(integer version, geometry g1);

这可能听起来很奇怪提出的另一个地理空间数据库,但我肯定它会的工作相当顺利。

有对于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;

好了,因为你做完了没有多大意义,但我建议把GeoServer的在SQL Server的前面。利用Geoserver内置了对几乎任何你想要的格式全部序列码,很容易cheezy安装,像宣传的那样。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top