当前位置: 首页 > 面试题库 >

使用余弦球定律按Django中的接近度过滤邮政编码

范云
2023-03-14
问题内容

我正在尝试为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;

该查询需要引用每个商店的经/纬度值的邮政编码外键。如何在Django模型查询中完成所有这些工作?


问题答案:

有可能在Django中执行原始SQL查询。

我的建议是,编写查询以提取ID列表(看起来像您现在正在执行的操作),然后使用ID提取关联的模型(在常规的非原始SQL
Django查询中)。尝试使您的SQL尽可能独立于方言,这样一来,即使您必须切换数据库,也不必担心另一件事。

为了澄清,这是一个如何做的例子:

def get_models_within_25 (self):
    from django.db import connection, transaction
    cursor = connection.cursor()

    cursor.execute("""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;""")
    ids = [row[0] for row in cursor.fetchall()]

    return MyModel.filter(id__in=ids)

作为免责声明,我不能保证这段代码,因为我编写任何Django已有几个月的时间了,但是它应该遵循正确的原则。



 类似资料:
  • 我目前正在研究余弦的近似值。由于最终的目标设备是一个使用32位浮点ALU/LU的自开发设备,并且有一个专门的C编译器,所以我不能使用C库的数学函数(cosf,...)。我的目标是编写在精度和指令/周期数量方面不同的各种方法。 我已经尝试了很多不同的近似算法,从fdlibm开始,taylor展开,pade近似,remez算法使用maple等等.... 但是一旦我只使用浮点精度来实现它们,精度就会有很

  • 问题内容: 我只是在寻找有关最佳方法的建议… 我需要创建一个搜索功能,以在邮政编码的50英里半径内搜索“用户”。我有一个邮政编码表,其中包含所有美国邮政编码及其纬度/经度,但我只是想找出构造和查询数据的最佳方式… 是否应在用户表中添加纬度/经度列,并在给定邮政编码范围内的所有用户查询它?还是应该在邮政编码表中查询半径范围内的所有邮政编码,然后在用户表中查询所有具有结果(邮政编码)的用户?要么… ?

  • 问题内容: 我正在使用Google Maps API v3和javascript将地图添加到网站中。 我有一个地址列表,并已在地图上成功绘制了它们。当用户输入邮政编码时,地图将重新定位在他们的位置,显示最接近该点的标记。现在,我需要创建一个最接近其邮政编码的3或5个位置的列表视图,并带有用于行驶方向的链接。我被困住了…并且愿意提出建议。 问题答案: 通常的解决方案是使用google.maps.ge

  • 问题内容: 我计算了两个文档的tf / idf值。以下是tf / idf值: 这些文件就像: 如何使用这些值来计算余弦相似度? 我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算? 还有一个问题: 两个文档的字数相同是否重要? 问题答案: a * b是点积 一些细节: 是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数

  • 我在Keras有小神经网络: 上下文和话语是具有形状的数组,例如(100,15,300)。fisrt LSTM的Input_shape应为(15,300)。 这是什么意思?而可能的原因又是什么呢?

  • 问题内容: 我正在编写一个特定于美国的Web应用程序,因此其他国家/地区用于邮政编码的格式并不重要。我有一份我们要加载到包含以下内容的数据库表中的邮政编码列表: 5位美国邮政编码 纬度 经度 usps分类代码 状态码 城市 邮政编码是主键,因为这是我要查询的内容。我开始使用中型int 5,但是它会截断前导零的邮政编码。 我考虑使用char5,但担心对char变量建立索引会对性能造成影响。 所以我的