0

私は GeoAlchemy2 を試してきましたが、フィールドの解析に問題がありgeomます。

WKB要素で組み込み関数を使用to_shapeしようとしました:

例は次のとおりです。

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 geom フィールドをどのように解析できますか? データベース値は有効です。

4

1 に答える 1

1

私は GeoAlchemy2 を使用していないので、Shapely/GEOS が使用するものとは異なる方言であることを除いて、それが WKB を生成する方法についてコメントすることはできません。

あなたが提供したWKBはOGC / ISOです(PostGISを使用してencode(ST_AsBinary(geom), 'hex')):

01e90300009aea561e53634140ffb86b0da20a40400000000000000000

そして、これが WKT に相当するものです (すなわちST_AsText(geom)):

POINT Z (34.7759740757367 32.0830704475393 0)

ただし、Shapely と GEOS は、高次元のジオメトリの OGC/ISO WKB をサポートしていません。PostGIS用に指定された(およびOGC / ISO仕様より前の日付の)EWKBのみをサポートし、次のようになります(つまりencode(ST_AsEWKB(geom), 'hex')):

01010000809aea561e53634140ffb86b0da20a40400000000000000000

これはShapelyで動作し、

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

これがあなたの問題にどのように役立つかはわかりませんが、何が起こっているのかについて扇動を示すかもしれません. Z 次元を使用していない場合は、OGC/ISO WKB および EWKB 仕様で WKB が同一である 2D ジオメトリに固執することができます。

于 2015-01-05T00:22:28.470 に答える