【问题标题】:Problem with STGeomCollFromWKB reading from varbinary(max)从 varbinary(max) 读取 STGeomCollFromWKB 的问题
【发布时间】:2011-05-30 08:04:22
【问题描述】:

我在 varchar 中导入了一个包含空间区域信息的 csv 文件,然后通过在转换之前将“0x”添加到 varchar(max) 值将 varchar(max) 值转换为 varbinary(max)。到那时,除了开头的'0x'之外,varbinary(max)列中的数据看起来与varchar(max)转换为文本后的数据完全一样。

现在我运行以下脚本:

select geometry::STGeomCollFromWKB(wkb, 4326) from dbo.MyTable

其中 WKB 是 varbinary(max) 列。 运行上述脚本会抛出此错误:'众所周知的二进制 (WKB) 输入无效'

数据来源来自 Open Street Map,因此毫无疑问它们是正确的区域数据。所以我认为我正在做的事情一定有问题,或者我错过了将 WKB 转换为几何数据类型的一些要点。

有人可以帮忙吗?

【问题讨论】:

    标签: sql-server-2008 spatial varbinarymax


    【解决方案1】:

    我认为问题是在将 varchar 数据转换为 varbinary 时,您正在转换二进制数据的实际字符表示,而不仅仅是将类型更改为二进制。

    例如,如果您的 varchar 列中有数据 0xDEADBEEF,则执行 convert(varbinary(max), 'DEADBEEF') 将 ascii 字符表示转换为二进制。

    您要做的是将十六进制字符串转换为二进制,这可以使用 convert 的样式参数。

    选择转换(varbinary(最大),'DEADBEEF',2)

    应该做你想做的事情,将你的 varchar wkb 数据转换成真正的二进制文件。

    【讨论】:

    • 我有一个类似的问题...他们为我提供了一个表格,其中包含 VARBINARY(MAX) 数据类型的几何,而不是 Geometry我>。我该怎么做才能将它们转换为任何空间数据类型?我试过STGeomFromWKB 没有运气...
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2015-06-18
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2021-10-23
    相关资源
    最近更新 更多