Php 如何按距离排列数据库结果?

Php 如何按距离排列数据库结果?,php,mysql,cakephp,geolocation,distance,Php,Mysql,Cakephp,Geolocation,Distance,我想根据到对象的距离对数据库中的结果进行排序。 我的对象和数据库项都有lat和lng,我可以使用haversine计算距离 问题是它们需要根据与数据库的距离来选择。我无法取出整个数据库,进行计算,然后得到我需要的结果,因为。。。每次我这么做,小猫都会死 有些人建议把哈弗森公式放到顺序中。怎样 很多小猫会死吗 有些人建议使用某种空间插件。他们是干什么的?我应该用哪一个 另一个看起来很难看的替代方案是,你手动走一段距离,然后通过排除lat和lng中的所有大小来做一个正方形。如果没有足够的结果,或者

我想根据到对象的距离对数据库中的结果进行排序。 我的对象和数据库项都有
lat
lng
,我可以使用haversine计算距离

问题是它们需要根据与数据库的距离来选择。我无法取出整个数据库,进行计算,然后得到我需要的结果,因为。。。每次我这么做,小猫都会死

  • 有些人建议把哈弗森公式放到
    顺序中。怎样
    很多小猫会死吗

  • 有些人建议使用某种空间插件。他们是干什么的?我应该用哪一个

  • 另一个看起来很难看的替代方案是,你手动走一段距离,然后通过排除
    lat
    lng
    中的所有大小来做一个正方形。如果没有足够的结果,或者结果太多,请更正距离并再次运行查询

谁能告诉我什么是最好的方式,我应该去与专业的缺点。我还将LAMP/MAMP与CakePHP一起使用

同时使用:

WHERE table.latitude BETWEEN $latmin AND $latmax
   AND table.longitude BETWEEN $lonmin AND $lonmax
ORDER BY haversine(....)
HAVING haversine(...) < $your_desired_distance
WHERE table.latitude在$latmin和$latmax之间
和table.longmin之间的经度
哈弗森订购(……)
有哈弗森(…)<$你想要的距离

这仍然是一项繁重的任务,但您将使用非常简单/轻量级的
WHERE
过滤器消除任何“明显”超出范围的候选项,因此您将在所有可能记录的一小部分(呃?)上进行实际距离计算。

您可以使用四键。这是一个使用空间填充曲线的空间索引。这不是一个精确解,但速度非常快,你可以自由使用哈弗森公式。您可以下载我的php类hilbert-curve@phpclasses.org。它还使用墨卡托投影。

您可以发布表格的结构吗?也许有一些样本数据?提示:请查看