STGeomCollFromWKB 从 varbinary(max) 读取时出现问题
我导入了一个包含 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 转换为几何数据类型的一些点。
有人可以帮忙吗?
I have imported a csv file containing spatial area information in varchar, then converted varchar(max) values to varbinary(max) by adding '0x' to varchar(max) values prior to conversion. By then, apart from the '0x' in the beginning, the data in varbinary(max) column looks exactly the same as the varchar(max) one in converted to text.
Now I run the following script:
select geometry::STGeomCollFromWKB(wkb, 4326) from dbo.MyTable
where WKB is the varbinary(max) column.
Running the above script throws this error: 'The well-known binary (WKB) input is not valid'
The source of data is from Open Street Map so no doubt they are correct area data. So I assume there must be something wrong in what I am doing or I am missing some point to convert WKB to geometry data type.
Could anyone help please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我假设问题是当将 varchar 数据转换为 varbinary 时,您正在转换二进制数据的实际字符表示形式,而不是仅仅将类型更改为二进制。
例如,如果 varchar 列中有数据 0xDEADBEEF,则执行以下操作
Convert(varbinary(max), 'DEADBEEF') 会将 ascii 字符表示形式转换为二进制。
您想要做的是将十六进制字符串转换为二进制,这可以使用 Convert 的 style 参数来实现。
SELECT Convert(varbinary(max), 'DEADBEEF', 2)
应该执行您想要的操作,将 varchar wkb 数据转换为真正的二进制文件。
I assume the problem is when converting the varchar data to varbinary you are converting the actual character representation of the binary data, rather than just changing the type to binary.
Eg, if you have the data 0xDEADBEEF in your varchar column, then doing
convert(varbinary(max), 'DEADBEEF') will convert the ascii character representations into binary.
What you want to do instead is convert the hex string into binary, which is possible using the style parameter of convert.
SELECT convert(varbinary(max), 'DEADBEEF', 2)
should do what you want to convert your varchar wkb data into real binary.