2017-11-08 5 views
1

ewkb 좌표를 Python의 관련 경도와 위도로 변환하려고합니다. ewkb 문자열은 한 열로 된 csv 파일 ("/home/nick/Documents/Sepi/WKB_coordinates_sing.csv")에 나열됩니다.wkb : 입력을 읽는 중 오류로 인해 형상을 만들 수 없습니다.

단순화를 위해 다른 열을 삭제했지만 결국 원래 데이터 세트를 사용하고 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 파일의 첫 번째 16 진수 문자열을 wkb.loads의 인수로 사용합니다.

코드 :

,398,444,635,718,314,611,942,763,210

결과 :

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

사전에 감사합니다!

답변

0

몇 가지 가능한 문제가있는 것 같습니다. 먼저, 코드 스 니펫은 반복과 "직접 읽기"방법을 혼합합니다. 이 예제 :

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) 
관련 문제