Sqlalchemy 如何按距查询点的距离对地理空间查询排序

Sqlalchemy 如何按距查询点的距离对地理空间查询排序,sqlalchemy,flask-sqlalchemy,geoalchemy2,Sqlalchemy,Flask Sqlalchemy,Geoalchemy2,我尝试在网上搜索这个问题,但没有结果。似乎是一项基本任务。我正在通过SQLAlchemy和Geoalchemy使用PostGresql进行地理空间查询。从技术上讲,我用的是炼金术。我可以做地理空间查询。例如: from geoalchemy2 import func cls.db.session.query(cls).filter(func.ST_DWithin(cls.geoLoc, geo, meters)) 其中cls是我正在查询的类geo是表示查询中心的Geography点,meter

我尝试在网上搜索这个问题,但没有结果。似乎是一项基本任务。我正在通过SQLAlchemy和Geoalchemy使用PostGresql进行地理空间查询。从技术上讲,我用的是炼金术。我可以做地理空间查询。例如:

from geoalchemy2 import func
cls.db.session.query(cls).filter(func.ST_DWithin(cls.geoLoc, geo, meters))
其中
cls
是我正在查询的类
geo
是表示查询中心的
Geography
点,
meters
是返回结果的最大距离。此查询可以工作,但会以任意顺序返回结果。我希望它们在距离查询点越来越远(也可以减小)的情况下返回


我想我需要在查询结束时使用一个
.order\u by(…)
,但我不知道该放在那里什么。

好吧,我想出来了,但是哇,这并不明显,特别是如果你对地球炼金术2不太熟悉的话

在我上面的例子中,您必须:

.order_by(func.ST_Distance(cls.geoLoc, geo))
到我问题中的代码末尾。基本上,
ST_Distance
是一个函数,它接受两点并返回两点之间的距离。因此,
cls.geoLoc
指的是表中的每个有问题的对象,
geo
是我按距离排序的中心。这基本上是计算每个元素到
geo
的距离,然后根据它进行排序