如何通过距查询点的距离来订购地理空间查询

时间:2015-03-12 15:26:09

标签: sqlalchemy flask-sqlalchemy geoalchemy2

我尝试在网上搜索此问题,但无济于事。似乎是一项基本任务。我通过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(...),但我无法弄清楚要放在那里的内容。

1 个答案:

答案 0 :(得分:1)

好吧,我想出来了,但是哇这并不明显,特别是如果你对Geoalchemy2并不熟悉的话。

就我的情况而言,你必须要坚持:

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

到我问题代码的末尾。基本上,ST_Distance是一个函数,它接收两个点并返回它们之间的距离。所以cls.geoLoc引用表中的每个对象,geo是我按距离排序的中心。这基本上计算每个元素到geo的距离,然后按它排序。