Как создать геоалхимическое выражение для точечной геометрии?

У меня есть таблица с широтой и длиной, я не хочу хранить геометрию. Вместо этого я храню латы и лонги.

Как создавать точечные запросы, используя выражение позиции? в основном это должно вернуть точку. Который должен быть преобразован в выражение 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, пирамиду.

1 ответ

Похоже, вы ищете WKTElement http://geoalchemy-2.readthedocs.org/en/latest/elements.html В Postgis есть функция ST_MakePoint(x,y), но не в геоалхимии Казалось бы. Интересно, почему вы хотите хранить широту и долготу вместо геометрии (или Point в вашем случае). Вы можете легко восстановить широту и долготу из геометрии, используя ST_X(geom), ST_Y(geom), но, что более важно, вы можете поместить пространственный индекс в столбец геометрии, который будет работать намного лучше, чем два отдельных непространственных столбца для любого вид пространственных запросов.

Другие вопросы по тегам