如何按距离订购数据库结果?

时间:2013-10-08 15:35:16

标签: php mysql cakephp geolocation distance

我想根据与对象的距离从数据库中排序结果。 我的对象和我的数据库项都有latlng,我可以用 hasrsine 计算距离。

问题是需要通过距数据库的距离来选择它们。我无法取出整个数据库,进行计算,然后取得我需要的结果,因为...... 每次我都会死掉一只小猫

  • 有些人建议将半身定制公式加入order_by。怎么样 许多小猫会死吗?

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

  • 另一个看似难看的替代方案是你手动一些距离并通过排除latlng中较大和较小的所有内容来制作正方形。如果您没有足够的结果,或者结果太多,则更正距离并再次运行查询。

任何人都可以告诉我应该使用pro的con的最佳方式。我也在使用CakePHP的LAMP / MAMP。

2 个答案:

答案 0 :(得分:0)

同时使用:

WHERE table.latitude BETWEEN $latmin AND $latmax
   AND table.longitude BETWEEN $lonmin AND $lonmax
ORDER BY haversine(....)
HAVING haversine(...) < $your_desired_distance

它仍然是一个重型的订单,但你会用非常简单/轻量级的WHERE过滤器淘汰任何“明显的”超出范围的候选人,所以你会在所有可能记录的小(呃?)子集上进行实际距离计算。

答案 1 :(得分:0)

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