我在 Django 中有一个位置感知服务器,它应该只在用户位于数据库条目的给定半径内时返回数据。我在 python 中找到了一个代码片段,它可以在线执行此操作(在这里或其他地方,我真的不能请记住),当我针对 0,0 的坐标进行测试时它似乎有效,而不是当我设置两个不同的坐标时。我现在有一个数据库条目,位于我当前位置 300 米范围内,半径设置为 10 公里,但由于某种原因,服务器没有将结果返回给我。这段代码我哪里出了问题,因为我完全不知道如何修复它,python 的新手,并且在我的项目到期前 5 天无助地迷失了我的元素并使用了 haversine。这是我的基于 hasrsine 的查询的代码:
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)
此图像显示已收到请求且坐标正确,但结果集仍为空:(