2009-10-08 5 views
0

У меня есть коллекция Point объектов. Я хочу найти самое дальнее расстояние между любыми двумя точками. Представьте себе круг, охватывающий все эти точки. Я хочу знать диаметр этого круга. Как я могу это сделать в GeoDjango?Наибольшее расстояние между двумя точками с 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: OK Я собираюсь попробовать это еще один способ:

>>> 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 

?? опять же, каковы эти единицы?

+0

С чисто геометрической точки зрения диаметр круга, который охватывает множество точек, является только верхней границей максимального расстояния. Если у вас есть 3 балла, которые лежат на круге только на 0,01 градуса, то максимальное расстояние более чем в 100 раз меньше диаметра указанного круга. – jva

ответ

2

ОК, я понял.

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 
Смежные вопросы