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?
Czy to możliwe, aby wyeksportować dane przestrzenne z SQL Server 2008 w formacie gml2?
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;

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ę.
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.
Dane sklepu do GML 3 Korzystanie z funkcji SQL Server
Ładowanie danych odcinkach GML 3 stosując PostGIS funkcji ST_GeomFromGML
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.
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