Sql Server 2008支持新的几何和地理UDT的空间数据。它们都支持AsGml()方法以gml格式序列化数据。但是,他们将数据序列化为GML3格式。有什么办法可以告诉它将数据序列化成GML2格式吗?是否可以从gml2格式导出Sql Server 2008的空间数据?
1
A
回答
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作为中间和翻译存储。
存储数据到GML 3使用使用ST_AsGML,让您的SQL Server功能
加载数据序列化到GML 3使用PostGIS的功能ST_GeomFromGML
存储的数据从PostGIS的到GML 2格式指定GML的目标版本:
text ST_AsGML(integer version, geometry g1);
它听起来可能是str愤怒提出另一个地理空间数据库,但我相信它会工作相当顺利和良好。
0
既然你完成了没有太多的意义,但我会建议把geoserver放在SQL Server的前面。 Geoserver具有内置的所有序列化代码,几乎可以满足任何您想要的格式,安装起来非常简单,并且可以像广告一样工作。
http://docs.geoserver.org/2.0.x/en/user/services/wfs/outputformats.html
相关问题
- 1. 以CSV格式导出数据表sql server 2008
- 2. 是否可以镜像SQL Server 2008和SQL Server 2008R2数据库?
- 3. SQL Server 2008导入/导出数据
- 4. Sql Server 2008的空间数据示例
- 5. 从SQL Server 2008数据库使用c导出excel表格
- 6. 如何将数据库从SQL Server 2008导出到SQL Server 2005
- 7. 是否可以生成从SQL Server 2008到SQL Server 2008 Express的脚本
- 8. SQL Server 2008 - 查询空间数据
- 9. 如何导出SQL Server 2008数据库?
- 10. 导出SQL Server 2008 R2数据库
- 11. SQL Server数据库模式是否可以从.NET类生成
- 12. 是否可以用iif格式导出数据使用php?
- 13. 数据导入SQL Server 2008
- 14. 使用SQL Server 2008将所有数据库数据导出为xml格式
- 15. 将地理空间数据从SQL Server导出到ArcGIS?
- 16. sql server 2008:是否可以指定格式而不是使用formatfile?
- 17. SQL Server 2008空间聚类
- 18. 为SQL Server 2008免费模式导出?
- 19. 我们是否可以将SQL Server 2008 R2 Express的数据库备份还原到SQL Server 2008 Express
- 20. 日期时间格式在SQL Server 2008
- 21. 将数据库从SQL Server 2008 R2实例导出到SQL Express 2008
- 22. 以CSV格式导出数据库是否保留其模式?
- 23. 输出值和它是否存在SQL Server 2008数据库
- 24. 是否SQL Server 2008 Express仍然可用?
- 25. 是否可以将图像添加到我的SQL Server 2008数据库表中?
- 26. 是否可以将SQL Reporting Service添加到SQL Server 2008 Express?
- 27. SQL Server Management Studio 2012 - 从表格中导出/导入数据
- 28. 格式SYSDATETIMEOFFSET在SQL Server 2008
- 29. 是否可以从Visual Studio 2008导出错误列表?
- 30. SQL SERVER空间数据