【问题标题】:How to create geoalchemy expression for a point geometry?如何为点几何创建地球炼金术表达式?
【发布时间】:2014-07-20 01:59:47
【问题描述】:

我有一张经纬度的表,我不想存储几何图形。 相反,我存储的是经纬度。

如何使用位置表达式创建基于点的查询?基本上它应该返回点。 应该将其转换为 SQL 表达式,例如“.....ST_Point(home.latitude, home.longitude).....”

geoalchemy 中没有 func.ST_Point 吗?还是我错过了什么? 如果我不写表达式显然我会得到 ​​p>

"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、金字塔。

【问题讨论】:

    标签: postgresql sqlalchemy pyramid postgis geoalchemy


    【解决方案1】:

    听起来您正在寻找 WKTElement http://geoalchemy-2.readthedocs.org/en/latest/elements.html#geoalchemy2.elements.WKTElement Postgis 中有一个 ST_MakePoint(x,y) 函数,但在 Geoalchemy 中似乎没有。作为一个有趣的问题,你为什么要存储纬度和经度而不是几何(或你的情况下的点)。您可以使用 ST_X(geom)、ST_Y(geom) 轻松地从几何中恢复纬度和经度,但更重要的是,您可以在几何列上放置空间索引,这将比任何两个单独的非空间列执行得更好一种空间查询。

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2016-10-02
      • 2016-09-27
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      相关资源
      最近更新 更多