geodjangoを使用していて、データベースにポイントのコレクションがあります。特定の領域内のポイントのクエリセットを取得するには、次を使用します。
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
私の質問は、通過したポイントから1つのポイント(距離が最も短いポイント)のみを返すにはどうすればよいですか?
編集
私は座標を渡し、それらを使用してPoint
オブジェクトを作成したいと思っていることを言及する必要があります。次に、そのポイントを原点として渡し、それに対してフィルタリングします。たとえば、私は試しました:
from spots.models import *
from django.contrib.gis.geos import *
origin = Point(28.011030, -26.029430)
distance_m = 1000
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
for q in queryset:
print q.distance
このコードスニペットは私にこのエラーを与えます:
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'
興味深いことに、私が次のことをすれば十分です。
origin = Spot.objects.get(name='Montecasino').point
distance_m = 1000
for city in Spot.objects.distance(origin):
print(city.name, city.distance)
(u'Design Quarter Parking', Distance(m=677.347841801))
(u'Montecasino', Distance(m=0.0))
(u'Fourways', Distance(m=1080.67723755))