我正在尝试处理Django中基本商店定位器的邻近搜索.我可以使用GeoDjango的距离滤波器,而不是使用我的应用程序运行PostGIS,我想在模型查询中使用球面定律的距离公式.为了提高效率,我希望在一个查询中在数据库中完成所有计算.
来自互联网的一个示例MySQL查询实现了如下的球面定律:
SELECT id, (
3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) *
cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) *
sin( radians( lat ) ) )
)
AS distance FROM stores HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
查询需要为每个商店的lat/lng值引用Zipcode ForeignKey.如何在Django模型查询中完成所有这些工作?
我有一个存储用户位置的模型:
[
{
"url": "http://192.168.0.22:8000/status/1/",
"id": 1,
"owner": 1,
"test_info": "",
"created_at": "2015-05-02T07:09:16.535689Z",
"updated_at": "2015-05-02T07:09:16.535746Z",
"geolocation": null,
"jukebox_mode_enabled": false
},
{
"url": "http://192.168.0.22:8000/status/2/",
"id": 2,
"owner": 2,
"test_info": "",
"created_at": "2015-05-02T07:09:24.206959Z",
"updated_at": "2015-05-02T07:09:24.207042Z",
"geolocation": null,
"jukebox_mode_enabled": false
},
Run Code Online (Sandbox Code Playgroud)
我正在尝试实现一个允许用户查询并查看附近还有谁的系统,但出于安全考虑,我想将结果限制为1KM的用户.
实现这一目标的最佳方法是什么?
PS - 使用oneToOneField将"状态"绑定到django模型中的普通用户模型.