Heim > Backend-Entwicklung > Python-Tutorial > Django: Finden Sie Benutzer in der Nähe mit Koordinaten und Radius

Django: Finden Sie Benutzer in der Nähe mit Koordinaten und Radius

Susan Sarandon
Freigeben: 2025-01-07 20:17:41
Original
154 Leute haben es durchsucht

Django: Find Nearby Users with Coordinates and Radius

In der heutigen Welt werden standortbasierte Funktionen in Webanwendungen immer wichtiger. Die Integration geografischer Daten kann das Benutzererlebnis erheblich verbessern, sei es beim Finden von Freunden in der Nähe, beim Auffinden von Diensten in der Nähe oder beim Aktivieren von mit Geotags versehenen Inhalten.

In diesem Artikel erfahren Sie, wie Sie mit Djangos ORM Benutzer in der Nähe anhand ihrer geografischen Koordinaten (Breiten- und Längengrad) und eines bestimmten Radius finden können.

Zuerst definieren wir ein Standortmodell, um die geografischen Koordinaten jedes Benutzers zu speichern. Wir verwenden das in Django integrierte Benutzermodell, um jeden Standort einem Benutzer zuzuordnen.

<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>
Nach dem Login kopieren

user: Ein Fremdschlüssel, der auf das Django-Benutzermodell verweist. Dadurch wird eine Beziehung hergestellt, in der jeder Benutzer einen oder mehrere Standorte haben kann. Breitengrad und Längengrad: DecimalField-Feld zum Speichern geografischer Koordinaten mit einer Genauigkeit von bis zu sechs Dezimalstellen, was für die meisten standortbasierten Anwendungen ausreichend ist.

Implementieren Sie die Haversine-Formel in Django

Haversines Formel ist eine weit verbreitete mathematische Formel zur Berechnung des sphärischen Abstands zwischen zwei Punkten auf der Erdoberfläche unter Verwendung von Breiten- und Längengraden. Diese Formel ist besonders nützlich bei Navigation, Geofencing, Geodatenanalyse und standortbasierten Diensten.

Hier ist eine Funktion, die die Haversine-Formel in das Standortmodell integriert, um Benutzer mithilfe des Django ORM in einen bestimmten Umkreis zu bringen:

<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>
Nach dem Login kopieren

Diese Methode verwendet die Haversine-Formel, um die Entfernung zu berechnen und Benutzer innerhalb eines bestimmten Radius zu filtern.

Erhalten Sie Benutzer innerhalb eines bestimmten Umkreises

Mit der get_users_within_radius-Methode ist es einfach, Benutzer in der Nähe zu erreichen. So verwenden Sie es:

<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>
Nach dem Login kopieren

Erklärung

  • Mittelkoordinaten definieren: Ersetzen Sie center_latitude und center_longitude durch den gewünschten Mittelpunkt, beispielsweise den Standort des aktuellen Benutzers.
  • Radiusangabe: Stellen Sie radius_km auf den gewünschten Suchradius in Kilometern ein.
  • Standorte in der Nähe abrufen: Rufen Sie get_users_within_radius auf, um Standortinstanzen innerhalb eines bestimmten Umkreises abzurufen.
  • Benutzer extrahieren: Durchlaufen Sie Standortinstanzen, um zugehörige Benutzerobjekte zu sammeln.

Die Implementierung der Geolokalisierungssuche in Django ist eine wertvolle Fähigkeit für Entwickler, die standortbasierte Dienste erstellen möchten. Durch das Verständnis der Haversine-Formel können Entwickler effiziente standortbasierte Suchen erstellen.
Für erweiterte geografische Funktionen erkunden Sie GeoDjango und räumliche Datenbanken.

Das obige ist der detaillierte Inhalt vonDjango: Finden Sie Benutzer in der Nähe mit Koordinaten und Radius. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage