我想根据与对象的距离从数据库中排序结果。
我的对象和我的数据库项都有lat
和lng
,我可以用 hasrsine 计算距离。
问题是需要通过距数据库的距离来选择它们。我无法取出整个数据库,进行计算,然后取得我需要的结果,因为...... 每次我都会死掉一只小猫。
有些人建议将半身定制公式加入order_by
。怎么样
许多小猫会死吗?
有人建议某种空间插件。他们在做什么?我应该使用哪一个?
另一个看似难看的替代方案是你手动一些距离并通过排除lat
和lng
中较大和较小的所有内容来制作正方形。如果您没有足够的结果,或者结果太多,则更正距离并再次运行查询。
任何人都可以告诉我应该使用pro的con的最佳方式。我也在使用CakePHP的LAMP / MAMP。
答案 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。它还使用墨卡托投影。