在GeoAlchemy2中表示坐标



为了用GPS位置扩展我的休息api,我决定尝试地理炼金术。我已经有一个数据库,我认为它已经将点保存到我的数据库中。但是,每次我尝试打印我保存的点(例如返回给用户)时,我都会得到一个内存地址或类似的东西:

    <WKBElement at 0x7ffad5310110; '0101000000fe47a643a7f3494049f4328ae5d61140'>

这对于非启动程序员和用户来说都是毫无用处的。

我有一个简单的问题。如何以人类可读的形式表示几何对象,例如:

    POINT(40.5563 30.5567)

这将是 Well-Known Binary 格式; 您可以使用geoalchemy2.functions.ST_AsText将它们转换为 WKT 文本格式。

这将在数据库本身中工作,因此您将将其应用于查询以在WKT而不是WKB中请求结果;这是在SQL中选择的SQLAlchemy中

Model.column.ST_AsText()

ST_AsText(Model.column)

对于 WKT 和 WKB 之间的数据库外转换,可以使用 shapely 模块。请注意,wkb函数需要二进制,而不是十六进制:

from shapely import wkb, wkt
from binascii import unhexlify
>>> binary = unhexlify(b'0101000000fe47a643a7f3494049f4328ae5d61140')
>>> binary
b'x01x01x00x00x00xfeGxa6Cxa7xf3I@Ixf42x8axe5xd6x11@'
>>> point = wkb.loads(binary)
>>> point.x, point.y
(51.903542, 4.45986)
>>> wkt.dumps(point)
'POINT (51.9035420000000016 4.4598599999999999)'

最新更新