【发布时间】:2019-07-01 10:05:49
【问题描述】:
我有一个 Django 应用程序需要按位置过滤用户(显示在登录用户给定距离内的用户)。
现在我可以使用 HTML5 捕获登录用户 latitude and longitude 坐标并将它们保存到我的 SQLite 后端的 Location 表中。
我的项目文件夹中有带有city 和country 的GeoIP2 列表,我不确定如何使用它们,但它们似乎是一个不错的选择,因为它们包含lat 和@ 987654326@坐标并生成位置。
我知道这里有几个选项,例如从lat lon 坐标创建一个point 值,然后也许可以按半径过滤?等等,5公里,10公里,15公里?
我对所有这些都比较陌生,这就是为什么我要求一个干净的最小解决方案。
我不想使用 PostGres、GIS、GeoDjango。
如果有人有一个使用 Sqlite 和可能的 geoip2 列表的简单解决方案,我非常感谢你分享它!
模型.py
class Location(models.Model):
latitude = models.DecimalField(max_digits=19, decimal_places=16)
longitude = models.DecimalField(max_digits=19, decimal_places=16)
user = models.OneToOneField(User, on_delete=models.CASCADE, null=False, related_name='loc')
def __str__(self):
return f'{self.user}\'s location'
@login_required
def insert(request):
location = Location(latitude=request.POST['latitude'],
longitude=request.POST['longitude'], user = request.user)
location.save()
return JsonResponse({'message': 'success'})
def location_view(request):
queryset = User.objects.annotate(
radius_sqr=pow(models.F('loc__latitude') -
request.user.loc.latitude, 2) + pow(models.F('loc__longitude') -
request.user.loc.longitude, 2)
).filter(
radius_sqr__lte=pow(radius_km / 9, 2)
)
return django.shortcuts.render_to_response(request, context, 'connect/home.html')
位置 page.html 示例
{% for user in location %}
<h5><b>{{ user.first_name }} {{ user.last_name }}</b></h5>
{% endfor %}
【问题讨论】:
标签: python django html sqlite django-models