sql-server - 如何在sql server中构建地理数据类型的格式?

标签 sql-server wkb

我无法理解 SQL Server 中的数据类型地理... 例如我有以下数据:

0xE6100000010CCEAACFD556484340B2F336363BCA21C0

我知道的:

0x是十六进制的前缀

后 16 位数字是经度:B2F336363BCA21C0(双十进制格式)

最后 16 位前的 16 位数字是纬度:CEAACFD556484340( double 格式)

4 个第一个数字是 SRID:E610(WGS84 的十六进制)

我不明白的地方:

5 到 12 的数字:0000010C

这是什么?

从我读到的内容来看,这似乎与 WKB(众所周知的二进制文件)或 EWKB(扩展的众所周知的二进制文件)有关,无论如何我无法找到 EWKB 的定义...... 对于 WKB,这应该是几何类型(4 字节整数),但该值与几何类型代码不匹配(此示例针对一个点坐标)

你能帮助理解这种格式吗?

最佳答案

SQL Server 中的空间类型(几何和地理)是作为 CLR 数据类型实现的。与任何此类数据类型一样,当您直接查询值时,您将获得二进制表示。不幸的是,它不是(据我所知)WKB,而是微软认为最适合其实现的任何格式。对于我们(用户)来说,我们应该使用 MS 发布的方法的已发布接口(interface)(例如 the geography method reference )。也就是说,如果您好奇(而不是实际使用它),您应该只尝试破译 MS 二进制表示。

就是说,如果您需要/想要使用 WKB,您可以!例如,您可以使用 STGeomFromWKB() 静态方法从您提供的 WKB 创建地理实例,并且可以在地理实例上调用 STAsBinary() 以返回 WKB给你。

关于sql-server - 如何在sql server中构建地理数据类型的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42603605/

相关文章:

sql - 如何在没有 key 的情况下删除插入的记录?

mysql - SQL 查询 - 按查询分组

asp.net - 主键违规约束

c# - 如何将存储在 SQLite 数据库中的 BLOB 数据转换为 SharpMap.Geometries.Geometry

go - Golang从坐标列表创建wkb.Polygon

sql - 在 sql 查询中启用 where 子句时出现 .NET 框架错误

c# - 使用 Dapper 插入时出现 NullReferenceException

gis - GeoAlchemy2:获取点的经纬度

sql-server - 在连接关闭的情况下在 SQL Server 上保持事务打开