Tôi đang sử dụng geodjango và có một bộ sưu tập các điểm trong cơ sở dữ liệu của mình. Để có được một queryset điểm trong một khu vực nhất định tôi sử dụng này:Làm thế nào để trả về một bản ghi với khoảng cách thấp nhất từ một điểm sử dụng geodjango?
queryset = Spot.objects.filter(point__distance_lte=(origin, distance_m))
Câu hỏi của tôi là làm thế nào tôi có thể trở lại chỉ có một điểm (điểm với khoảng cách thấp nhất) từ quan điểm tôi đã trôi qua nó?
EDIT
tôi nên đề cập đến mà tôi đang đi qua trong tọa độ và mong muốn tạo ra một đối tượng Point
với họ. Sau đó vượt qua điểm đó như là nguồn gốc và bộ lọc chống lại điều đó. Ví dụ tôi đã cố gắng:
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
Đoạn mã này mang lại cho tôi lỗi này:
Traceback (most recent call last):
File "<console>", line 2, in <module>
AttributeError: 'Spot' object has no attribute 'distance'
Điều thú vị là đủ nếu tôi làm như sau:
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))
bạn có thể giải thích lý do tại sao bạn có' [: 1] [0] 'ở cuối – Sevenearths
Vui lòng thực hiện điều này trước khi bạn gỡ lỗi: [https://docs.djangoproject.com/en/1.6/ref/contrib/gis/db-api/# compatibility-bảng] chỉ cần dành một vài giờ vô nghĩa gỡ lỗi point__distance_lte khi nó không được hỗ trợ cho Mysql – PKaura