Czy to możliwe, aby wyeksportować dane przestrzenne z SQL Server 2008 w formacie gml2?

głosy
1

SQL Server 2008 obsługuje dane przestrzenne z nowej geometrii i geografia UDT jest. Oboje wspierają metodę AsGml (), aby szeregować dane w formacie GML. Jednak oni szeregować dane w formacie GML3. Czy jest jakiś sposób, aby poinformować go do serializacji danych do formatu GML2?

Utwórz 09/12/2008 o 15:03
źródło użytkownik
W innych językach...                            


4 odpowiedzi

głosy
1

AFAIK nie ma wbudowaną funkcję do serializacji danych geoprzestrzennych do GML 2.x. Trzeba korzystać z niektórych narzędzi innych firm, wdrożenie youserlf pisarz czy ta propozycja może wydawać się nieco dziwne, użyj postgis do tego przejścia.

PostGIS jest alternatywą geoprzestrzennych bazy danych, podobne rozwiązanie do SQL Server, ale wdrożenie de- / serializacji dla obu formatach: GML 2 i 3 GML .

Co sugeruję jest użycie PostGIS jako pośredni i tłumacząc przechowywania.

  1. Dane sklepu do GML 3 Korzystanie z funkcji SQL Server

  2. Ładowanie danych odcinkach GML 3 stosując PostGIS funkcji ST_GeomFromGML

  3. Przechowywanie danych z PostGIS do formatu GML 2, stosując ST_AsGML który pozwala określić wersję docelową GML:text ST_AsGML(integer version, geometry g1);

To może wydawać się dziwne, aby zaproponować inną bazę danych geoprzestrzennych, ale jestem pewien, że to działa dość sprawnie i dobrze.

Odpowiedział 03/02/2010 o 20:32
źródło użytkownik

głosy
0

No skoro skończył nie ma sensu, ale polecam umieszczenie GeoServer przed SQL Server. GeoServer ma cały kod serializacji zbudowany w prawie dowolnym formacie chcesz, jest łatwy do zainstalowania smętne i działa jak reklamowane.

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

Odpowiedział 08/02/2010 o 04:24
źródło użytkownik

głosy
0

Jak powiedział Marko, nie ma wsparcia dla gml2 w SQL Server 2008, więc po prostu skończyło się na napisanie funkcji przekształcania gml3 zwrócony przez serwer do gml2 że muszę.

Odpowiedział 14/02/2009 o 13:02
źródło użytkownik

głosy
0

Nie ma wsparcia dla GML2, ale jest rozciągliwość API, które mogą być wykorzystywane do realizacji niestandardowych serializacji.

Oto przykład niestandardowym szeregowanie z wykorzystaniem SqlGeometry.Populate (IGeometrySink) Sposób (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(')');
    }
}

Aby to zrobić deserializacjia klasę użycie 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;
Odpowiedział 30/01/2009 o 18:03
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more