首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wkb:由于读取输入时出错,无法创建几何

wkb:由于读取输入时出错,无法创建几何
EN

Stack Overflow用户
提问于 2017-11-09 03:40:59
回答 1查看 1.9K关注 0票数 1

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

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

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

我写了以下代码:

代码语言:javascript
复制
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)

但是,当我运行它时,我得到了以下结果:

代码语言:javascript
复制
~$ 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的参数,则可以获得经度和纬度:

代码:

代码语言:javascript
复制
from shapely import wkb
hexloc="0101000020E610000072604C0D47AA37402C306475ABA85140"
print(hexloc)
point=wkb.loads(hexloc,hex=True)
print(point.x,point.y)

结果:

代码语言:javascript
复制
~$ python /home/nick/Documents/Sepi/ewkb.py
0101000020E610000072604C0D47AA37402C306475ABA85140
23.665146666666665 70.63546500000001

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2017-11-09 18:48:47

似乎有几个可能的问题。首先,您的代码片段混合了迭代和直接“读取”方法。在此示例中:

代码语言:javascript
复制
with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
    for line in f:
        hexloc=f.readline()
        #do something with hexloc

hexloc实际上只会在输入文件中每隔一行迭代一次。您可能希望将其替换为:

代码语言:javascript
复制
with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
    for hexloc in f:
        #do something with hexloc

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47188318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档