在SQLAlchemy中打印计算出的距离

3

我正在使用Flask-SQLAlchemy与Postgres、Postgis和GEOAlchemy。我能够根据用户提交的点对表中的条目进行排序。我想知道如何返回计算出的距离...

这是我如何排序项目的方式:

result = Event.query.order_by(func.ST_Distance(Event.address_gps, coordinates_point)).paginate(page, 10).items

for result in results:
    result_dict = result.to_dict()

return result_dict

根据用户位置(coordinates_point),我想在result_dict的每个结果中添加一个条目,该条目还包含订购物品的距离。我该如何实现?func.ST_Distance返回什么?
我尝试在上面的for循环中添加以下内容:
current_distance = func.ST_Distance(Event.address_gps, coordinates_point)
result_dict['distance'] = current_distance

但那似乎没有起作用。

1个回答

3
你可以使用列标签来进行查询,具体用法可以参考这里
query = Event.query.with_entities(Event, func.ST_Distance(Event.address_gps, coordinates_point).label('distance')).order_by('distance')
results = query.paginate(page, 10).items
for result in results:
    event = result.Event
    distance = result.distance
    result_dict = event.to_dict()
    result_dict['distance'] = distance

谢谢!正常工作 :) 我得到的距离单位是什么? - rablentain
这取决于您用于计算距离的几何图形的CRS。常见的CRS之一WGS 84使用度作为单位,例如链接。而美国国家地图集等面积CRS则使用米作为单位,链接 - Nick K9
有没有一种方法可以使用ST_Distance指定最大距离? - Mehdi Khlifi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接