Rumah > pembangunan bahagian belakang > Tutorial Python > Django: Cari Pengguna Berdekatan dengan Koordinat dan Jejari

Django: Cari Pengguna Berdekatan dengan Koordinat dan Jejari

Susan Sarandon
Lepaskan: 2025-01-07 20:17:41
asal
201 orang telah melayarinya

Django: Find Nearby Users with Coordinates and Radius

Dalam dunia hari ini, ciri berasaskan lokasi semakin penting dalam aplikasi web. Penyepaduan data geografi boleh meningkatkan pengalaman pengguna dengan ketara, sama ada mencari rakan berdekatan, mencari perkhidmatan berdekatan atau mendayakan kandungan geotag.

Artikel ini akan meneroka cara menggunakan ORM Django untuk mencari pengguna berdekatan berdasarkan koordinat geografi mereka (latitud dan longitud) dan jejari tertentu.

Pertama, kami akan menentukan model Lokasi untuk menyimpan koordinat geografi setiap pengguna. Kami akan menggunakan model Pengguna terbina dalam Django untuk mengaitkan setiap lokasi dengan pengguna.

<code class="language-python">from django.db import models
from django.contrib.auth.models import User

class Location(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    latitude = models.DecimalField(max_digits=9, decimal_places=6, db_index=True)
    longitude = models.DecimalField(max_digits=9, decimal_places=6, db_index=True)

    def __str__(self):
        return str(self.user)</code>
Salin selepas log masuk

pengguna: Kunci asing yang menunjuk ke model Pengguna Django. Ini mewujudkan perhubungan di mana setiap pengguna boleh mempunyai satu atau lebih lokasi. latitud & longitud: Medan Medan Perpuluhan digunakan untuk menyimpan koordinat geografi dengan ketepatan sehingga enam tempat perpuluhan, yang mencukupi untuk kebanyakan aplikasi berasaskan lokasi.

Melaksanakan formula Haversine dalam Django

Rumus Haversine ialah formula matematik yang digunakan secara meluas untuk mengira jarak sfera antara dua titik di permukaan Bumi, menggunakan latitud dan longitud. Formula ini amat berguna dalam navigasi, geofencing, analisis geospatial dan perkhidmatan berasaskan lokasi.

Berikut ialah fungsi yang menyepadukan formula Haversine ke dalam model Lokasi untuk mendapatkan pengguna dalam radius tertentu menggunakan Django ORM:

<code class="language-python">from django.db.models import F, Value
from django.db.models.functions import ACos, Cos, Radians, Sin

class Location(models.Model):
    # ... [字段如上] ...

    @classmethod
    def get_users_within_radius(cls, center_latitude, center_longitude, radius_km):
        # Haversine 公式计算距离
        distance_expression = (
            ACos(
                Sin(Radians(F('latitude'))) * Sin(Radians(Value(center_latitude))) +
                Cos(Radians(F('latitude'))) * Cos(Radians(Value(center_latitude))) *
                Cos(Radians(F('longitude')) - Radians(Value(center_longitude)))
            ) * 6371  # 地球半径(公里)
        )

        # 过滤指定半径内的用户
        users_within_radius = cls.objects.annotate(
            distance=distance_expression
        ).filter(
          distance__lte=radius_km
        ).select_related('user')

        return users_within_radius</code>
Salin selepas log masuk

Kaedah ini menggunakan formula Haversine untuk mengira jarak dan menapis pengguna dalam radius tertentu.

Dapatkan pengguna dalam radius tertentu

Dengan kaedah get_users_within_radius, mendapatkan pengguna berdekatan adalah mudah. Begini cara menggunakannya:

<code class="language-python">from .models import Location

# 加德满都的纬度和经度
center_latitude = 27.707460
center_longitude = 85.312205

radius_km = 10     # 10 公里

nearby_location_points = Location.get_users_within_radius(
    center_latitude, center_longitude, radius_km
)
nearby_users = [
    location.user for location in nearby_location_points
]</code>
Salin selepas log masuk

Penjelasan

  • Tentukan koordinat tengah: Gantikan center_latitude dan center_longitude dengan titik tengah yang diingini, seperti lokasi pengguna semasa.
  • Spesifikasi jejari: Tetapkan radius_km kepada jejari carian yang diingini dalam kilometer.
  • Dapatkan lokasi berdekatan: Panggil get_users_within_radius untuk mendapatkan kejadian Lokasi dalam radius yang ditentukan.
  • Ekstrak pengguna: Lelaran pada kejadian Lokasi untuk mengumpul objek Pengguna yang berkaitan.

Melaksanakan carian geolokasi dalam Django ialah kemahiran berharga untuk pembangun yang bertujuan untuk mencipta perkhidmatan berasaskan lokasi. Dengan memahami formula Haversine, pembangun boleh membina carian berasaskan lokasi yang cekap.
Untuk kefungsian geografi yang lebih maju, teroka GeoDjango dan pangkalan data spatial.

Atas ialah kandungan terperinci Django: Cari Pengguna Berdekatan dengan Koordinat dan Jejari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan