Я пытаюсь выбрать и заказать магазины по их расстоянию до точки с GeoAlchemy2/PostGIS, но по какой-то причине я все время получаю сообщение об ошибке.Выбор и заказ по расстоянию с помощью GeoAlchemy2. Bad ST_AsBinary wrap
Кажется, GeoAlchemy2 обертывает вещи с помощью ST_AsBinary, но когда я пытаюсь выбрать расстояние, оно пытается обернуть результат вычисления расстояния. Я не знаю, как это исправить.
Я использую этот запрос ORM.
distance = (
Store.coordinates.cast(Geometry)
.distance_centroid(query_centroid)
.label('distance')
)
stores = stores.order_by(distance).add_columns(distance)
Модель.
class Store(db.Model):
__tablename__ = 'stores'
store_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
address_details = db.Column(db.String)
coordinates = db.Column(Geography('POINT'))
Ошибка, которую я получаю.
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) function st_asbinary(double precision) does not exist
LINE 1: ...Binary(stores.coordinates) AS stores_coordinates, ST_AsBinar...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
[SQL: 'SELECT stores.store_id AS stores_store_id,
stores.name AS stores_name,
stores.address_details AS stores_address_details,
ST_AsBinary(stores.coordinates) AS stores_coordinates,
ST_AsBinary(CAST(stores.coordinates AS geometry(GEOMETRY,-1)) <-> ST_GeomFromEWKT(%(param_1)s)) AS distance
FROM stores ORDER BY distance']13 -46.730347)'}]
[parameters: {'param_1': 'POINT(-23.3569
Проблема именно в этой части ...
ST_AsBinary(
CAST(stores.coordinates AS geometry(GEOMETRY,-1))
<->
ST_GeomFromEWKT(%(param_1)s)
) AS distance
Обратите внимание, как ST_AsBinary обертывания расстояние между двумя точками вместо оберточной только геометрию, например? (Я не уверен, что он должен обернуть геометру в этом случае)
Может ли кто-нибудь помочь? Я просто хочу знать, как далеко.