我想编写一个 php 程序从我的数据库中的 400 个点中选择 16 个随机 gps 点
(点表:id - 标题 - 纬度 - 经度)。
纬度 37.9824
经-87.5781547
唯一要求16个随机点,每个点之间至少相距1km(找到1KM范围内的点)
这是一个选择药店的系统,每个药店之间的最小距离为 1 公里。我的数据库中有 400 家药店,每周我必须选择 16 家药店。我不能选择非常接近的两家药店。
例子:
如果程序返回 3 个药房 A B 和 C 。
药店之间的距离必须是:
A 和 B = 1 公里
A 和 C = 1 公里
B 和 C = 1 公里
这里是一个现成的答案:
我会首先使用笛卡尔距离公式创建一个 View ,其中包含最接近您感兴趣的点的对象列表,然后应用 PHP 代码计算实际球面距离。
@MY_LAT = 37.9824;
@MY_LONG = -87.5781547;
SELECT *, SQRT(
ABS((latitude - @MY_LAT) * (latitude - @MY_LAT) +
(longitude - @MY_LONG) * (longitude - @MY_LONG)))
AS DIST
FROM POINT_TABLE
ORDER BY DIST ASC
从该 View 中选择前 n 行以获得距离您的“兴趣点”最近的 16 个点。要检查这些点是否在您的引用点的 1 公里以内,您可以在获得结果后编写一个小的 PHP 代码段。这应该可以帮助您处理代码段:
http://www.zipcodeworld.com/samples/distance.php.html
在这里,我在查询中使用了笛卡尔距离公式,这只是为了减少您在 PHP.x 中应用球面距离公式所获得的记录数量