我尝试在网上搜索此问题,但无济于事。似乎是一项基本任务。我通过SQLAlchemy和Geoalchemy一起使用PostGresql来进行地理空间查询。从技术上讲,我正在使用`Flask-SQLAlchemy。我可以做一个地理空间查询。例如:
from geoalchemy2 import func
cls.db.session.query(cls).filter(func.ST_DWithin(cls.geoLoc, geo, meters))
其中cls
是我要查询的类。 geo
是表示查询中心的Geography
点,meters
是返回结果的最大距离。此查询有效,但以任意顺序返回结果。我希望它们从查询点开始增加(减少也很好)距离。
我假设我需要在查询结束时使用.order_by(...)
,但我无法弄清楚要放在那里的内容。
答案 0 :(得分:1)
好吧,我想出来了,但是哇这并不明显,特别是如果你对Geoalchemy2并不熟悉的话。
就我的情况而言,你必须要坚持:
.order_by(func.ST_Distance(cls.geoLoc, geo))
到我问题代码的末尾。基本上,ST_Distance
是一个函数,它接收两个点并返回它们之间的距离。所以cls.geoLoc
引用表中的每个对象,geo
是我按距离排序的中心。这基本上计算每个元素到geo
的距离,然后按它排序。