Дальнейшее расстояние между любыми двумя точками с GeoDjango - PullRequest
0 голосов
/ 09 октября 2009

У меня есть коллекция Point объектов. Я хочу найти самое дальнее расстояние между любыми двумя точками. Представьте круг, охватывающий все эти точки. Я хочу знать диаметр этого круга. Как я могу сделать это в GeoDjango?

изменить: это то, что я до сих пор:

>>> r=Route.objects.get(pk=1)
>>> a=Airport.objects.filter(routebase__route=r)

>>> # this route represents a few hundred miles flight into mexico and back
>>> a
[<Airport: MMDO>, <Airport: KELP>, <Airport: KELP>, <Airport: MMCU>]

>>> # a multipoint object with all the airports
>>> mpoint = a.collect()

>>> # a polygon that represents a ring around the multipoint
>>> p = mpoint.envelope

>>> #now I just need to get the diameter of this envelope
>>> p.length
19.065994262694986

???

в каких единицах? Это даже значение, которое я ищу?

edit2: ОК, я собираюсь попробовать это по-другому:

>>> r=Route.objects.get(pk=1)
>>> a=Airport.objects.filter(routebase__route=r)

>>> # this route represents a few hundred miles flight into mexico
>>> a
[<Airport: MMDO>, <Airport: KELP>, <Airport: MMCU>]

>>> # a multipoint object with all the airports
>>> mpoint = a.collect()

>>> # get the center point of the route polygon and get the
>>> # distance between each point and the centroid
>>> # the largest should be the diameter of the ring, right?
>>> cen = mpoint.centroid

>>> dist = []
>>> for p in mp:
        dist.append(LineString(p, cen).length)

>>> dis
[0.54555421739245946,
 0.61638306853425906,
 0.53442640535933494,
 0.54555421739245946]

>>> max(dist)
0.61638306853425906

?? Опять же, что это за единицы?

1 Ответ

2 голосов
/ 09 октября 2009

ОК, я понял.

def overall_distance(route):
    a = Airport.objects.filter(routebase__route=route).distinct()
    mp = a.collect()
    ct = mp.envelope.centroid
    na = a.distance(ct)

    dist = []
    for p in na:
        dist.append(p.distance)

    diameter = max(dist) * 2

    return diameter.nm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...