我有一个lat和long的表,我不想存储几何。 而是我存储lat和longs。
如何使用位置表达式创建基于点的查询?基本上它应该返回点。 哪个应该转换为SQL表达式,如“..... ST_Point(home.latitude,home.longitude).....”
地质考试中没有func.ST_Point?还是我错过了什么? 如果我不写表达,显然我得到
"sqlalchemy.exc.InternalError: (InternalError) parse error - invalid geometry
HINT: "POINT(Ve" <-- parse error at position 8 within geometry"
代码:
class Home(Base):
__tablename__ = 'vehicle_path'
id = Column(BigInteger, primary_key=True)
latitude = Column(Float)
longitude = Column(Float)
@hybrid_property
def position(self):
return WKTElement(
''.join(['POINT(', str(self.longitude),' ', str(self.latitude), ')']), 4326)
@position.expression
def position(cls):
return <???what to return???>
我使用sqlalchemy,Geoalchmey2和postgis,postgres,金字塔。
答案 0 :(得分:1)
听起来你正在寻找WKTElement http://geoalchemy-2.readthedocs.org/en/latest/elements.html#geoalchemy2.elements.WKTElement Postgis中有一个ST_MakePoint(x,y)函数,但它看起来并不像Geoalchemy。有趣的是,为什么要存储纬度和经度而不是几何(或者在您的情况下为Point)。您可以使用ST_X(geom),ST_Y(geom)轻松地从几何中恢复纬度和经度,但更重要的是,您可以在几何列上放置空间索引,这将比任何两个单独的非空间列执行得更好。一种空间查询。