Jika Anda ingin mengurutkan setiap entri di meja itu berdasarkan jarak, maka itu akan berjalan lambat seperti yang diharapkan dan tidak ada yang bisa dilakukan (yang saya sadari saat ini dan sepengetahuan saya.)!
Anda dapat membuat perhitungan Anda lebih efisien dengan mengikuti langkah-langkah ini dan membuat beberapa asumsi:
-
Aktifkan pengindeksan spasial di meja Anda. Untuk melakukannya di GeoDjango, ikuti petunjuk doc dan sesuaikan dengan model Anda:
-
Sekarang Anda dapat mempersempit kueri Anda dengan beberapa batasan logis:
Mis: Pengguna saya tidak akan mencari orang lebih dari 50km dari posisinya saat ini.
-
Persempit penelusuran menggunakan
dwithin
pencarian spasial yang menggunakan pengindeksan spasial , oleh karena itu cukup cepat. -
Terakhir terapkan
distance
pesan di baris yang tersisa.
Permintaan terakhir dapat terlihat seperti ini:
current_location = me.location
people = People.objects.filter(
location__dwithin=(current_location, D(km=50))
).annotate(
distance=Distance('location', current_location)
).order_by('distance')
PS: Daripada membuat upaya pagination khusus, lebih efisien untuk menggunakan metode pagination yang disediakan untuk tampilan django:
Atau Anda dapat menggunakan Django Rest Framework dan menggunakan pagination-nya: