2017-11-08 1 views
1

ewkb座標をPythonの関連する経度と緯度に変換しようとしています。 ewkb文字列は、1列のcsvファイル( "/home/nick/Documents/Sepi/WKB_coordinates_sing.csv"という名前)にリストされています。wkb:入力を読み取っているときにエラーが原因でジオメトリを作成できませんでした

わかりやすくするために他の列を削除しましたが、最終的に元のデータセットを使用して、右の列だけをewkbで読みたいと思います。

さらに、私は何百万行ものファイルと処理のための座標を持っているので、一度に1行を読み込んで翻訳したいと思います。

Iは、次のコードを書いた:

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. 

私は、次のコードを実行する場合しかし、私は、経度と緯度を取得することができます

コード:

01 wkb.loadsの引数としての私のcsvファイルから最初の16進文字列で

結果:

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

は、事前にありがとうございます!

答えて

0

いくつかの問題が考えられます。まず、あなたのコードスニペットは反復と直接の "read"メソッドを混ぜています。この例では:

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

hexlocは、入力ファイル内の2行おきにのみ効果的に繰り返します。あなたはこのような入力行を読んだとき、彼らはloads方法を混乱させる末尾の改行を保持、

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

:あなたはでこれを交換したい場合があります。私は試してみることをお勧めします:

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) 
関連する問題