【问题标题】:Calculating distance - on the fly or as soon as data is entered into database?计算距离 - 即时计算还是在数据输入数据库后立即计算?
【发布时间】:2012-03-22 15:33:14
【问题描述】:

在一个小型 Web 应用程序上工作,我有一个用户表,其中存储了用户详细信息以及他们当前位置的纬度和经度。

一个新用户注册,他会看到所有用户与他当前所在位置的距离。

我正在使用半正弦公式。

我的问题是如何继续执行此操作? 我怎么能在飞行中做到这一点?还是需要在用户注册的时候计算所有的用户距离并保存?

应该满足排序:即最短距离优先。

【问题讨论】:

    标签: java mysql google-maps sorting


    【解决方案1】:

    如果用户数量非常大(或无限),那么您可能会遇到麻烦。

    预先计算可能需要相当多的存储空间。但是按需计算可能需要大量的服务器 CPU 时间。

    一些注意事项:

    1. 使用 MySQL 进行地理排序。 http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

    2. 考虑仅为一小部分其他用户计算距离。

    3. 考虑使用 javascript 在客户端计算机上动态计算距离的好处。

    【讨论】:

    • 你能给我一些教程或我可以做的事情吗?
    • 其他人可能不同意,但 jQuery 可能是让 javascript 变得简单的事实标准。 docs.jquery.com/Tutorials。使用 jQuery,让您的页面进行异步调用以检索其他用户的坐标,然后计算并显示与结果的距离 - 所有处理都在浏览器中完成。
    【解决方案2】:

    如果您在注册时存储所有用户之间的所有距离,您会发现自己很快就会存储大量数据 - 对于 100 个用户,大约有 5,000 条数据。对于 1000 个用户,约 500,000 个(每个用户都需要进行相关计算)——此外,如果用户更改其位置,该数据将立即变得多余,需要为所有用户重新计算。同样,对于很多用户来说,这是一个巨大的时间问题。

    您可能最好立即执行此操作 - MySQL 提供了空间扩展,您可以利用这些扩展来优化基于位置的搜索(请参阅 http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

    可以在http://maisonbisson.com/blog/post/12147/working-with-spatial-data-in-mysql/ 找到一个使用这些扩展的非常简单的示例 - 更复杂的示例应该允许您返回半径 r 内的所有点。

    其他人提到在客户端使用 Javascript 进行计算。当然有可能,但再次考虑如果您有大量用户,比如 10,000 - 您必须首先将所有数据传输到客户端(导致 HTTP 获取延迟),然后假设他们具有相当强大的功能运行计算的 CPU(如果有人在旧智能手机上查看您的网站怎么办?)。在进程运行时,您最终可能会冻结他们的浏览器几秒钟。

    【讨论】:

      【解决方案3】:

      就像其他答案所说,您应该使用地理数据库。

      如果你想自己实现,这些数据库内部是这样的:

      将地图分成大的矩形网格(例如,10 公里 x 10 公里的网格)。为每个用户添加一列,说明他在哪个网格中。您可以搜索该特定网格及其相邻的 8 个网格,而不是搜索所有用户。

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多