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