我正在尝试在Python上将ewkb坐标转换为相关的经度和纬度。#en0#字符串在一个单列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提前谢谢你!
发布于 2017-11-09 18:48:47
似乎有几个可能的问题。首先,您的代码片段混合了迭代和直接“读取”方法。在此示例中:
with open ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv") as f:
for line in f:
hexloc=f.readline()
#do something with hexlochexloc实际上只会在输入文件中每隔一行迭代一次。您可能希望将其替换为:
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)https://stackoverflow.com/questions/47188318
复制相似问题