提高计算两点之间的距离之间的性能

时间:2021-06-14 08:52:21

标签: javascript node.js knex.js

我有这个公式代码来计算两点之间的距离 - 但它有性能问题。

  const pharmacy = await knex('place_of_interest')
    .select(
      knex.raw(
        `id, title, line1, line2, county, city, postcode, 
        (
          6371 * acos (
            cos ( radians(:lat:) )
            * cos( radians( ST_X(coordinate) ) )
            * cos( radians( ST_Y(coordinate) ) - radians(:lng:) )
            + sin ( radians(:lat:) )
            * sin( radians( ST_X(coordinate) ) )
          )
        ) AS distance`, latLng,
      ),
    )
    .andWhere('stock', '>', 0)
    .orderBy('distance')

如果我添加限制 - 我确实注意到有所改进,但结果可能不准确。我不确定是否有一种方法可以使用 varnish 来缓存结果 - 对调用进行蛮力 - 对于邮政编码的第一个片段?

1 个答案:

答案 0 :(得分:0)

如何使用 https://postgis.net/docs/ST_Distance.html ?它应该尽可能快地进行距离计算。

但是,如果您有大量地点的距离用于对结果进行排序,您可能希望首先添加限制,即结果不应包括那些距离太远的地点。

如果即使这样也没有足够的性能,则可能需要将地方组织成集群,然后应该首先只选择那些足够接近的集群,然后根据确切的距离对位置进行排序。

相关问题