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

How to order a geospatial query by distance from the query point

我尝试在网上搜索这个问题,但无济于事。似乎是一项基本任务。我通过 SQLAlchemy 和 Geoalchemy 使用 PostGresql 来进行地理空间查询。从技术上讲,我正在使用`Flask-SQLAlchemy。我可以进行地理空间查询。例如:

from geoalchemy2 import func
cls.db.session.query(cls).filter(func.ST_DWithin(cls.geoLoc, geo, meters))

其中 cls 是我正在查询的 class。 geo 是代表查询中心的 Geography 点,meters 是到 return 结果的最大距离。此查询有效,但 returns 导致任意顺序。我希望它们 return 增加(减少也可以)与查询点的距离。

我假设我需要在查询末尾使用 .order_by(...),但我不知道该放什么。

好吧,我明白了,但是哇那不是很明显,特别是如果你对 Geoalchemy2 不是很熟悉的话。

在我上面的例子中,你必须解决:

.order_by(func.ST_Distance(cls.geoLoc, geo))

到我问题中的代码末尾。基本上,ST_Distance 是一个接受两个点和 returns 它们之间的距离的函数。所以 cls.geoLoc 指的是 table 中的每个相关对象,而 geo 是我按距离排序的中心。这基本上计算每个元素到 geo 的距离,然后按它排序。