今日の世界では、Web アプリケーションにおける位置ベースの機能の重要性がますます高まっています。地理データを統合すると、近くの友達を見つけたり、近くのサービスを見つけたり、地理タグ付きコンテンツを有効にしたりするなど、ユーザー エクスペリエンスが大幅に向上します。
この記事では、Django の ORM を使用して、地理座標 (緯度と経度) と指定された半径に基づいて近くのユーザーを見つける方法を説明します。
まず、各ユーザーの地理座標を保存する位置モデルを定義します。 Django の組み込み User モデルを使用して、各場所をユーザーに関連付けます。
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)
user: Django User モデルを指す外部キー。これにより、各ユーザーが 1 つ以上の場所を持つことができる関係が確立されます。 緯度と経度: DecimalField フィールドは、地理座標を小数点以下 6 桁までの精度で保存するために使用されます。これは、ほとんどの位置ベースのアプリケーションには十分です。
Django に Haversine 式を実装する
ハバーシンの公式は、緯度と経度を使用して、地球表面上の 2 点間の球面距離を計算するために広く使用されている数式です。この式は、ナビゲーション、ジオフェンシング、地理空間分析、および位置ベースのサービスで特に役立ちます。
これは、Django ORM を使用して指定された半径内のユーザーを取得するために、Haversine 式を Location モデルに統合する関数です。
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
このメソッドは、Haversine 式を使用して距離を計算し、指定された半径内のユーザーをフィルターします。
指定した半径内にユーザーを取得します
get_users_within_radius
メソッドを使用すると、近くのユーザーを簡単に取得できます。使用方法は次のとおりです:
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 ]
説明
-
中心座標を定義します:
center_latitude
とcenter_longitude
を、現在のユーザーの位置など、目的の中心点に置き換えます。 -
半径指定:
radius_km
を目的の検索半径にキロメートル単位で設定します。 -
近くの場所を取得:
get_users_within_radius
を呼び出して、指定された半径内の Location インスタンスを取得します。 - ユーザーの抽出: Location インスタンスを反復処理して、関連付けられた User オブジェクトを収集します。
Django での位置情報検索の実装は、位置ベースのサービスの作成を目指す開発者にとって貴重なスキルです。 Haversine の公式を理解することで、開発者は効率的な位置ベースの検索を構築できます。
より高度な地理機能については、GeoDjango と空間データベースを調べてください。
以上がDjango: 座標と半径を使用して近くのユーザーを見つけるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

slicingapythonlistisdoneusingtheyntaxlist [start:stop:step] .hore'showitworks:1)startisthe indexofthefirstelementtoinclude.2)spotisthe indexofthefirmenttoeexclude.3)staptistheincrementbetbetinelements

numpyallows forvariousoperationsonarrays:1)basicarithmeticlikeaddition、減算、乗算、および分割; 2)AdvancedperationssuchasmatrixMultiplication;

Arraysinpython、特にnumpyandpandas、aresentialfordataanalysis、offeringspeedandeficiency.1)numpyarraysenable numpyarraysenable handling forlaredatasents andcomplexoperationslikemoverages.2)Pandasextendsnumpy'scapabivitieswithdataframesfortruc

listsandnumpyarraysinpythonhavedifferentmemoryfootprints:listsaremoreflexiblellessmemory-efficient、whileenumpyarraysaraysareoptimizedfornumericaldata.1)listsstorereferencesto objects、with whowedaround64byteson64-bitedatigu

toensurepythonscriptsbehaveCorrectlyAcrossDevelosment、staging、and Production、usetheseStrategies:1)環境variablesforsimplestetings、2)configurationfilesforcomplexsetups、and3)dynamicloadingforadaptability.eachtododododododofersuniquebentandrequiresca

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









