gpt4 book ai didi

python - 转换 50 个字符串时 Unhexlify 错误

转载 作者:行者123 更新时间:2023-11-30 23:30:05 27 4
gpt4 key购买 nike

我想将 XY 坐标的 WKB 表示形式转换为 YX 格式。我使用的代码适用于 42 个字符的 WKB 字符串,但是当我在 50 个字符的字符串上使用它时,它会给出一个奇怪的 YX 输出。我正在运行 Python 2.7.5。

这是我的代码:

from osgeo import ogr
from binascii import unhexlify

## converts a WKB string into a YX coordinate

input = raw_input("Enter WKB string: ")
wkb = unhexlify(input)
point = ogr.CreateGeometryFromWkb(wkb)
print "%.3f,%.3f" % (point.GetY(), point.GetX())


# no work 0101000020E6100000BD30B7B921A85AC07513F26D8A1A4840
# work 0101000000C458A65F22A85AC0E412471E881A4840

当我输入 42 个字符的字符串时,我的结果很好:点(-106.627098 48.207279)

但是当我输入 50 个字符的字符串时,我得到:3555134728476017298973319676299352450538378468906911626773527538488363036844773115899936046188061344719932995831597021265 92.000,-0.000

当我只打印点时,我得到:点(-0.0too_big)

谁能帮我解释一下吗?

最佳答案

这个 50 个字符的字符串从哪里来?它的 header 0101000020 似乎不是有效的 WKB header ,由于第一个 01 意味着小字节序,因此几何类型被翻译为 0x20000001,这是未定义的。

其次,WKB 表示的点长度是 42,而不是 50,因为坐标是 double (8 字节长),因此十六进制化时有 16 个字符长。请参阅您的工作示例:

>>> s = 'C458A65F22A85AC0E412471E881A4840'
>>> struct.unpack('<d', unhexlify(s[:16]))
(-106.62709799999999,)
>>> struct.unpack('<d', unhexlify(s[16:]))
(48.207279,)

那么很清楚为什么你的第二个示例不起作用,因为会发生如下情况(不确定 osgeo 是如何提取 16 个字符的子字符串):

>>> s = 'E6100000BD30B7B921A85AC07513F26D8A1A4840'
>>> struct.unpack('>d', unhexlify(s[-32:-16]))
(-5.939309002701494e-14,)
>>> struct.unpack('>d', unhexlify(s[-16:]))
(9.359519850637786e+255,)

关于python - 转换 50 个字符串时 Unhexlify 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835958/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com