首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >to_shape()失败并返回ParseException

to_shape()失败并返回ParseException
EN

Stack Overflow用户
提问于 2014-12-30 19:32:54
回答 1查看 722关注 0票数 0

我一直在尝试使用GeoAlchemy2,并且我使用have some trouble with parsing its geom field

我已经尝试过use the built-in to_shape function on a WKB element

该示例为:

代码语言:javascript
复制
lake = Session.query(Lake).get(1)
polygon = to_shape(lake.geom)

我已经使用了:

代码语言:javascript
复制
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地理字段吗?数据库值有效。

EN

回答 1

Stack Overflow用户

发布于 2015-01-05 08:22:28

我不使用GeoAlchemy2,所以我不能评论它是如何生成它的WKB的,只能说它是一种不同于Shapely/GEOS使用的方言。

您提供的WKB是OGC/ISO (使用encode(ST_AsBinary(geom), 'hex')的PostGIS ):

代码语言:javascript
复制
01e90300009aea561e53634140ffb86b0da20a40400000000000000000

下面是WKT的等价物(即ST_AsText(geom)):

代码语言:javascript
复制
POINT Z (34.7759740757367 32.0830704475393 0)

但是,Shapely和GEOS不支持高维几何图形的OGC/ISO WKB。它只支持EWKB,这是为PostGIS指定的(并且早于OGC/ISO规范),它看起来像这样(即encode(ST_AsEWKB(geom), 'hex')):

代码语言:javascript
复制
01010000809aea561e53634140ffb86b0da20a40400000000000000000

因此,这适用于Shapely,

代码语言:javascript
复制
from shapely.wkb import loads
pt = loads('01010000809aea561e53634140ffb86b0da20a40400000000000000000', hex=True)
pt.wkt  # 'POINT Z (34.77597407573667 32.08307044753928 0)'
pt.wkb_hex  # '01010000809AEA561E53634140FFB86B0DA20A40400000000000000000'

我不确定这对你的问题有什么帮助,但可能会对正在发生的事情表现出一些激励。如果您不使用Z维度,您可以只使用2D几何图形,其中WKB对于OGC/ISO WKB和EWKB规范是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27704685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档