ユーザーがデータベースエントリの特定の半径内にいる場合にのみデータを返すことになっているDjangoに位置認識サーバーがあります..オンラインでそれを行うPythonのコードスニペットを見つけました(ここまたは他の場所で、私は本当にできません覚えておいてください)そして、2つの異なる座標を設定したときではなく、0,0の座標に対してテストしたときにうまくいくように見えました. 現在の場所から 300 メートル以内のデータベース エントリがあり、半径は 10 キロメートルに設定されていますが、何らかの理由でサーバーが結果を返してくれません。このコードのどこが間違っているのでしょうか。私はそれを修正する方法についてまったく無知であり、Pythonの初心者であり、どうしようもなく失われ、プロジェクトの期限まで5日でhaversineを使用して要素から外れています。ここに、harsine ベースのクエリのコードを示します。
class StoreList(generics.ListAPIView):
permission_classes = (permissions.IsAuthenticatedOrReadOnly,
IsOwnerOrReadOnly,)
serializer_class = StoreSerializer
def get_queryset(self):
lat = self.request.query_params.get('lat', None)
lon = self.request.query_params.get('lng', None)
if lat and lon:
lat = float(lat)
lon = float(lon)
# Haversine formula = https://en.wikipedia.org/wiki/Haversine_formula
lat1 = math.radians(lat) # lat in radians
lng1 = math.radians(lon) # lng in radians
lat2 = math.asin(math.sin(lat1)*math.cos(distance/R) +
math.cos(lat1)*math.sin(distance/R)*math.cos(bearing))
lng2 = lng1 + math.atan2(math.sin(bearing)*math.sin(distance/R)*math.cos(lat1),
math.cos(distance/R)-math.sin(lat1)*math.sin(lat2))
lat2 = math.degrees(lat2)
lng2 = math.degrees(lng2)
return Store.objects.filter(latitude__gte=lat1, latitude__lte=lat2)\
.filter(longitude__gte=lng1, longitude__lte=lng2)
この画像は、リクエストが受信され、座標が正しいことを示していますが、結果セットはまだ空です:(