嗨,朋友们,我需要帮助解决这个问题 问题定义:
共有4个表:
当供应商登录时,我将获得供应商服务区内的所有项目。
例如:如果供应商在其服务区22032中有两个邮政编码,10031和他的服务区距离是20英里,则这些服务区内的所有项目大约20英里。
我正在计算项目邮政编码和供应商邮政编码之间的距离,并在列中显示最小距离
例如:项目邮政编码22032和供应商邮政编码是22031和22040:
22032至22031 = 3.01英里
22032至22040 = 7.98英里
然后距离= 3.01
问题:现在客户希望SORT BY DISTANCE
我的尝试:
请建议任何可以花费更少时间的逻辑。
答案 0 :(得分:0)
查看here并查看此related SO question
答案 1 :(得分:0)
我建议使用这样的函数在你的mysql中定义距离公式:
CREATE DEFINER=`root`@`localhost` FUNCTION `calc_distance`(`p1lat` DECIMAL(10,5), `p1long` DECIMAL(10,5), `p2lat` DECIMAL(10,5), `p2long` DECIMAL(10,5)) RETURNS decimal(10,5)
NO SQL
BEGIN
DECLARE radius INT;
DECLARE deg_per_rad DECIMAL;
SET radius = 3958;
SET deg_per_rad = 57.29578;
RETURN (radius * PI() * SQRT(
(p1lat-p2lat)
* (p1lat - p2lat)
+ cos(p1lat / deg_per_rad)
* cos(p2lat / deg_per_rad)
* (p1long - p2long)
* (p1long - p2long)
)/180);
END
然后,您可以调用此函数在自定义列中按距离计算和排序。
答案 2 :(得分:0)
我有同样的问题选择整个表格只是想知道哪一个更接近,我之前回答过类似的问题。
首先,你需要通过我的方法减少95%无用的行。 How to efficiently find the closest locations nearby a given location
收集距离在数组中的所有拉链码,并在此次使用您需要的所有信息对该数组进行另一次查询,计算每个目标的距离并按ASC对其进行排序。