我有一组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
??再一次,这些单位是什么?
答案 0 :(得分: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