2014-12-30 9 views
0

저는 GeoAlchemy2 및 I have some trouble with parsing its geom field을 실험 해 왔습니다.to_shape()가 ParseException으로 실패합니다.

나는 use the built-in to_shape function on a WKB element에 시도 :

예 읽

lake = Session.query(Lake).get(1) 
polygon = to_shape(lake.geom) 

내가 사용하고 있습니다 :

house = config.database.db_session.query(House)\ 
     .filter_by(house_id=1).first() 
print "geom:", house.geom 
01e90300009aea561e53634140ffb86b0da20a40400000000000000000 

from geoalchemy2 import shape 
print "to_shape:", shape.to_shape(house.geom) 

to_shape: 
Traceback (most recent call last): 
    File "ranker_tester.py", line 40, in <module> 
    print "to_shape:", shape.to_shape(house.geom) 
    File ".../lib/python2.7/site-packages/GeoAlchemy2-0.2.4-py2.7.egg/geoalchemy2/shape.py", line 24, in to_shape 
    return shapely.wkb.loads(bytes(element.data)) 
    File ".../lib/python2.7/site-packages/shapely/wkb.py", line 16, in loads 
    return reader.read(data) 
    File ".../lib/python2.7/site-packages/shapely/geos.py", line 361, in read 
    raise ReadingError("Could not create geometry because of errors " 
shapely.geos.ReadingError: Could not create geometry because of errors while reading input. 

어떤 생각이 어떻게이 GeoAlchemy2의 기하 구조 필드를 구문 분석 할 수 있습니까? 데이터베이스 값이 유효합니다.

답변

1

GeoAlchemy2를 사용하지 않으므로 Shapeely/GEOS가 사용하는 것과 다른 방언이라는 것을 제외하고는 WKB 생성 방법에 대해서는 언급 할 수 없습니다.

제공 한 WKB는 (PostGIS와는 encode(ST_AsBinary(geom), 'hex')를 사용 포함) OGC/ISO입니다 :

POINT Z (34.7759740757367 32.0830704475393 0) 

그러나, 매끈한 및 GEOS는 않습니다 : 여기

01e90300009aea561e53634140ffb86b0da20a40400000000000000000 

그리고는 WKT 상응하는 (즉, ST_AsText(geom))입니다 더 높은 차원의 형상을위한 OGC/ISO WKB를 지원하지 않습니다. 그것은 단지 다음과 같습니다 PostGIS와 (과 미리 날짜 OGC/ISO 사양)에 대해 지정된 EWKB, (즉, encode(ST_AsEWKB(geom), 'hex')) 지원

01010000809aea561e53634140ffb86b0da20a40400000000000000000 

그래서이 매끈한 작동을

from shapely.wkb import loads 
pt = loads('01010000809aea561e53634140ffb86b0da20a40400000000000000000', hex=True) 
pt.wkt # 'POINT Z (34.77597407573667 32.08307044753928 0)' 
pt.wkb_hex # '01010000809AEA561E53634140FFB86B0DA20A40400000000000000000' 

나는 이것이 당신의 문제를 어떻게 도울 지 모르겠다. 그러나 무슨 일이 벌어지고 있는지에 관해 어떤 자극을 보일지 모른다. Z- 차원을 사용하지 않는 경우 WKB가 OGC/ISO WKB 및 EWKB 사양과 동일한 2D 지오메트리에만 집중할 수 있습니다.