【发布时间】:2009-12-16 19:12:28
【问题描述】:
我正在尝试处理 Django 中基本商店定位器的邻近搜索。我不想在我的应用程序中使用 PostGIS 以便我可以使用 GeoDjango 的距离过滤器,而是想在模型查询中使用余弦距离公式的球面定律。为了提高效率,我希望在一次查询中在数据库中完成所有计算。
来自 Internet 的一个示例 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;
查询需要为每个商店的 lat/lng 值引用 Zipcode ForeignKey。如何在 Django 模型查询中完成所有这些工作?
【问题讨论】:
-
(a) 这不是
haversine公式;这是spherical law of cosines公式;请参阅(例如)http://www.movable-type.co.uk/scripts/latlong.html并查看相应的 Wikipedia 文章。 (b) 我相信您会用变量替换硬编码的用户坐标 :-) (c) 应该警告温和的读者,您的距离单位有点过时(与 1000 *(罗马长度军团的标准步伐),我相信):-) -
天哪,GeoDjango 有什么难的?只需安装它:)
标签: python django zipcode proximity