Минимальное расстояние от одной точки до множества точек Django ORM
Я пытаюсь вычислить минимальные расстояния от одной точки до множества точек.
Например, если в наборе есть 3 места A, B, C
, а искомое место D
, то я хочу min(dist(A, D), dist(B, D), dist(C, D)
.
Вот моя модель места:
class Place(models.Model):
latitude = models.FloatField(blank=False)
longitude = models.FloatField(blank=False)
Вот мой запрос, который, похоже, не работает:
places_with_distance = Place.objects.annotate(
distance=(
Subquery(places_set.annotate(
distance_to_place_in_set=(
Min(
(F('latitude') - OuterRef('latitude')) * (F('latitude') - OuterRef('latitude')) +
(F('longitude') - OuterRef('longitude')) * (F('longitude') - OuterRef('longitude'))
)
)
).values('distance_to_place_in_set')))).order_by('distance')
Проблема в том, что расстояние вычисляется только для первого элемента places_set
(например, только dist(A, D)
, но не dist(B, D)
, ...).
Спасибо!