php - 选择距离最小的随机 GPS 点

标签 php mysql google-maps gps

<分区>

我想编写一个 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 中应用球面距离公式所获得的记录数量

关于php - 选择距离最小的随机 GPS 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797690/

相关文章:

javascript - 在html map 中拖动线条并显示线条之间的差异

php - PDO 不插入某些值,而是插入其他值

php - SQLSTATE[22007] : Invalid datetime format: 1366 Incorrect integer value: 'column_name' in Laravel

mysql - 连接两个表以查找不匹配的信息

google-maps - 谷歌地球与谷歌地图 API v3 集成?

javascript - 将自定义链接添加到谷歌地图文本显示方向的步骤中

php - SendGrid - 使用 cURL 发送到多个 "to"地址?

php - 最佳实践 : returning multiple values

php - MySql 按 menu_id 分组

mysql - 关于mysql中查询语句的优化