Python 如何从地炼金术查询结果中获取lng lat值2

Python 如何从地炼金术查询结果中获取lng lat值2,python,sqlalchemy,postgis,geoalchemy2,Python,Sqlalchemy,Postgis,Geoalchemy2,比如, class Lake(Base): __tablename__ = 'lake' id = Column(Integer, primary_key=True) name = Column(String) geom = Column(Geometry('POLYGON')) point = Column(Geometry('Point')) lake = Lake(name='Orta', geom='POLYGON((3 0,6 0,

比如,

class Lake(Base):
     __tablename__ = 'lake'
     id = Column(Integer, primary_key=True)
     name = Column(String)
     geom = Column(Geometry('POLYGON'))
     point = Column(Geometry('Point'))


lake = Lake(name='Orta', geom='POLYGON((3 0,6 0,6 3,3 3,3 0))', point="POINT(2 9)")
query = session.query(Lake).filter(Lake.geom.ST_Contains('POINT(4 1)'))
for lake in query:
     print lake.point
它返回了

我还尝试了lake.point.ST_X(),但也没有给出预期的纬度

将WKBElement中的值转换为可读且有用的格式(如lng、lat)的正确方法是什么

谢谢

正是您想要的。这将返回“点(lng,lat)”。不过,ST_X应该可以工作,因此如果它没有返回正确的值,则可能会出现另一个问题。

您可以使用shapely解析WKB()点,甚至其他几何图形


扩展John的答案,您可以在这样查询时使用
ST_AsText()
-

将sqlalchemy导入为db
从地球炼金术2导入几何体
从geoalchemy2.functions导入ST_AsText
#连接,桌子,还有这里的东西。。。
query=db.select(
[
mytable.columns.id,
mytable.columns.name,
ST_AsText(mytable.columns.geolocation),
]
)

在此处查找有关使用函数的详细信息-

您是指lake.point.ST_AsText()吗?它返回,但不是一个值。谢谢你试过了,结果还是一样。我发现session.scalar(lake.point.ST_AsText())将返回预期结果,但是,它要求DB进行转换,这是预期行为吗?对不起,它要求DB进行转换是什么意思?ST_AsText是一个Postgis函数,因此如果这是您的问题的意思,那么,是的,这是预期行为。不是答案,但是
ST_X()
代表的是经度而不是纬度,它来自
ST_Y()
from shapely import wkb
for lake in query:
    point = wkb.loads(bytes(lake.point.data))
    print point.x, point.y