문제

SQL Server 2008은 새로운 지오메트리 및 지리 UDT를 사용하여 공간 데이터를 지원합니다. 둘 다 ASGML () 메소드를 지원하여 GML 형식으로 데이터를 직렬화합니다. 그러나 데이터를 GML3 형식으로 직렬화합니다. 데이터를 GML2 형식으로 직렬화하는 방법이 있습니까?

도움이 되었습니까?

해결책 3

Marko가 말했듯이 SQL Server 2008에는 GML2에 대한 지원이 없으므로 서버에서 반환 한 GML3을 GML2로 변환하는 기능을 작성하게되었습니다.

다른 팁

AFAIK, 지리 공간 데이터를 GML 2.X에 직렬화하는 내장 기능이 없습니다. 타사 도구를 사용하거나 작가 YouSerlf를 구현 하거나이 제안이 조금 이상하게 들릴 수 있습니다. Postgis 이 전환을 위해.

Postgis는 대체 지리 공간 데이터베이스, SQL Server와 유사한 솔루션이지만 구현 두 형식 모두에 대한 DE-/직렬화 : GML 2 및 GML 3.

내가 제안한 것은 Postgis를 중간 및 번역 스토리지로 사용하는 것입니다.

  1. SQL Server 기능을 사용하여 데이터를 GML 3에 저장하십시오

  2. PostGIS 기능을 사용하여 GML 3에 직렬화 된 데이터를로드합니다 st_geomfromgml

  3. PostGIS에서 GML 2 형식으로 데이터를 저장하십시오 ST_ASGML GML의 대상 버전을 지정할 수 있습니다. text ST_AsGML(integer version, geometry g1);

다른 지리 공간 데이터베이스를 제안하는 것은 이상하게 들릴지 모르지만 상당히 매끄럽고 잘 작동 할 것이라고 확신합니다.

GML2에 대한 지원은 없지만 사용자 지정 직렬화를 구현하는 데 사용할 수있는 확장 성 API가 있습니다.

다음은 sqlgeometry.populate (igeometrysink) 메소드를 사용한 사용자 정의 직렬화의 예입니다.

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;

글쎄, 당신이 끝나기 때문에 많은 점이 없지만 SQL Server 앞에 Geoserver를 배치하는 것이 좋습니다. Geoserver는 원하는 거의 모든 형식에 대해 내장 된 모든 직렬화 코드를 가지고 있으며 설치하기가 쉽고 광고 된대로 작동합니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top