如何按距查询点的距离对地理空间查询进行排序
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
的距离,然后按它排序。
我尝试在网上搜索这个问题,但无济于事。似乎是一项基本任务。我通过 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
的距离,然后按它排序。