查找多个点之间的最小距离,或将查询集与额外选择合并

时间:2011-12-08 01:01:39

标签: django geodjango

我有一堆带有位置属性的对象(PointFields)。我有两个特殊的位置,我想知道每个对象最接近哪个位置以及距离多远。也就是说,我想做类似的事情:

q0 = q.distance(p0).extra(select={'dist_from': p0})
q1 = q.distance(p1).extra(select={'dist_from': p1})
qq = take_obj_with_min_distance(q0, q1)

(实际的查询将使用bboverlaps和location__distance_lt执行一些操作,可能涉及两个以上的特殊位置,以及可能包含多个位置属性的对象。但是,我认为上面的解决方案将处理所有其他内容。)< / p>

之后,qq应该与q具有相同的元素,但每个元素都有一个距离属性和一个dist_from属性,其中distance属性是距p0的距离和距p1的距离的最小值,dist_from是带有它达到了最低限度。

我可以这样做吗?它对儿童和其他生物有益吗?

我考虑过合并查询并使用列表执行此操作,但当然您无法将查询与额外的选择值合并(例如由距离查询引入)。此外,我还想稍后再过滤qq。

1 个答案:

答案 0 :(得分:0)

此页面将以多种语言为您提供所需的代码:http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

如果您没有太多对象,您可能希望在Python中执行此操作,但如果您更喜欢查询数据库,则最好在SQL中准备过程或函数。