1

我想根据到对象的距离对数据库中的结果进行排序。我的对象和我的数据库项目都有lat并且我可以用hasrsinelng计算距离。

问题是它们需要通过与数据库的距离来选择。我不能抽出整个数据库,进行计算,然后得到我需要的结果,因为......每次我这样做都会死一只小猫

  • 有人建议将半正弦公式放入order_by. 会死多少只小猫?

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

  • 另一个看起来很难看的替代方法是,您手动采取一些距离并通过排除 and 的所有大小来制作一个lat正方形lng。如果没有足够的结果,或者结果太多,请更正距离并再次运行查询。

谁能告诉我应该与pro's con's的最佳方式是什么。我也将 LAMP/MAMP 与 CakePHP 一起使用。

4

2 回答 2

0

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

于 2013-10-08T17:32:08.023 回答
0

两者都使用:

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

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

于 2013-10-08T15:45:57.230 回答