【问题标题】:wkb: could not create geometry because of errors while reading inputwkb:由于读取输入时出错而无法创建几何图形
【发布时间】:2017-11-08 19:40:58
【问题描述】:

我正在尝试将 ewkb 坐标转换为 Python 上相关的经度和纬度。 ewkb 字符串列在单列 csv 文件中(名为“/home/nick/Documents/Sepi/WKB_coordinates_sing.csv”)。

为了简单起见,我删除了其他列,但最终我想使用原始数据集并使用 ewkb 读取正确的列。

此外,我想一次阅读和翻译一行,因为我有数百万行和坐标的文件要处理。

我写了以下代码:

from shapely import wkb
with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
    for line in f:
        hexloc=f.readline()
        print(hexloc)
        point=wkb.loads(hexloc,hex=True)
        print(point.x,point.y)

但是,当我运行它时,我得到以下信息:

~$ python /home/nick/Documents/Sepi/ewkb.py
0101000020E610000072604C0D47AA37402C306475ABA85140
ParseException: Premature end of HEX string
Traceback (most recent call last):
  File "/home/nick/Documents/Sepi/ewkb.py", line 7, in <module>
    point=wkb.loads(hexloc,hex=True)
  File "/home/nick/anaconda3/lib/python3.6/site-packages/shapely/wkb.py", line 14, in loads
    return reader.read_hex(data)
  File "/home/nick/anaconda3/lib/python3.6/site-packages/shapely/geos.py", line 409, in read_hex
    "Could not create geometry because of errors "
shapely.errors.WKBReadingError: Could not create geometry because of errors while reading input.

但是,如果我使用 csv 文件中的第一个十六进制字符串作为 wkb.loads 的参数运行以下代码,我可以获得经度和纬度:

代码:

from shapely import wkb
hexloc="0101000020E610000072604C0D47AA37402C306475ABA85140"
print(hexloc)
point=wkb.loads(hexloc,hex=True)
print(point.x,point.y)

结果:

~$ python /home/nick/Documents/Sepi/ewkb.py
0101000020E610000072604C0D47AA37402C306475ABA85140
23.665146666666665 70.63546500000001

提前谢谢你!

【问题讨论】:

    标签: python-3.x csv shapely


    【解决方案1】:

    似乎有几个可能的问题。首先,您的代码 sn-p 混合了迭代和直接“读取”方法。用这个例子:

    with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
        for line in f:
            hexloc=f.readline()
            #do something with hexloc
    

    hexloc 将仅有效地迭代输入文件中的每一第二行。您可能希望将其替换为:

    with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
        for hexloc in f:
            #do something with hexloc
    

    此外,当您像这样读取输入行时,它们会保留尾随换行符,这会混淆 loads 方法。我建议尝试:

    with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
        for line in f:
            hexloc = line.strip()
            point = wkb.loads(hexloc, hex=True)
    

    【讨论】:

      猜你喜欢
      • 2022-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多