Нахождение минимального расстояния между несколькими точками или объединение наборов запросов с дополнительными выборами - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть куча объектов с атрибутами местоположения (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, возможно, задействует более двух специальных местоположений и, возможно, объекты с несколькими атрибутами местоположения.Тем не менее, я думаю, что решение выше будет обрабатывать все эти другие вещи.)

Впоследствии, qq должен иметь те же элементы, что и q, но каждый элемент имеет атрибут distance и атрибут dist_from, где атрибут distanceэто минимум расстояния от p0 и расстояния от p1, а dist_from - это точка, с которой он достигает этого минимума.

Можно ли это сделать?Здорово ли это для детей и других живых существ?

Я подумал о слиянии запросов и выполнении этих вещей со списком, но, конечно, вы не можете объединить запросы с дополнительными значениями выбора (например, введенными дистанционными запросами).).Кроме того, позже я хочу отфильтровать qq.

1 Ответ

0 голосов
/ 21 мая 2012

Эта страница предоставит вам необходимый код на нескольких языках: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe

Если у вас не слишком много объектов, вы можете сделать это в Python, но если вы предпочитаете запрашиватьбазы данных может быть лучше подготовить процедуру или функцию в SQL.

...