php - 如何在纯 PHP 中返回半径内的坐标? (没有MySQL)

标签 php distance euclidean-distance

多年来我一直在 MySQL 中执行此操作,但如何在 PHP 中执行此操作?

坐标数组示例:http://pastebin.com/grVsbgL9

我想返回给定坐标 100 英里范围内的所有坐标。

function getCoordinatesWithinRadius ($coordinateArray, $center, $radius) {
    //
    return $resultArray;
}

在 MySQL 中,我通常使用如下查询:

SELECT *, ( 3959 * acos( cos( radians($latitude) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians($longitude) ) + sin( radians($latitude) ) * sin( radians( latitude ) ) ) ) AS distance FROM table HAVING distance < $radius ORDER BY distance;

如何在 PHP 中执行相同的操作?

最佳答案

在下面的代码中,我假设您的坐标对象仅存储为两个元素数组(既用于 $center 参数,又用于 $coordinateArray 中的坐标>)。如果不是,那么您需要更改的内容应该相当明显。

function getCoordinatesWithinRadius ($coordinateArray, $center, $radius) {
  $resultArray= array();
  $lat1 = $center[0];
  $long1 = $center[1];
  foreach ($coordinateArray as $coordinate) {
    $lat2 = $coordinate[0];
    $long2 = $coordinate[1];
    $distance = 3959 * acos(cos(radians($lat1)) * cos(radians($lat2)) * cos(radians($long2) - radians($long1)) + sin(radians($lat1)) * sin(radians($lat2)));
    if ($distance < $radius) $resultArray[] = $coordinate;
  }
  return $resultArray;  
}

代码只是循环遍历所有坐标,计算距中心点的距离,如果小于给定的$radius,则将坐标添加到$resultArray>.

我还没有检查$distance计算 - 这基本上只是从你的mysql查询中剪切和粘贴,所以我假设这是正确的。

上面的代码还假设存在一个弧度函数。如果您没有,您可以添加如下:

function radians($deg) { 
  return $deg * M_PI / 180;
}

假设坐标以度为单位。

关于php - 如何在纯 PHP 中返回半径内的坐标? (没有MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17285964/

相关文章:

php - 本地/开发/实时部署 - 最佳工作流程

php - 将 Doctrine 实体管理器作为参数传递给通用类

php - 如何在单个 HTTP 响应中使用 PHP 从 Mysql 提供 4 个图像(Blob)?

python - 不同形状数组的Numpy距离计算

python - 如何得到n个点中距离最大的m对点

php - 从本地视频源拍照并通过PHP表单提交

mysql - ST_长度测量单位类型

javascript - 如何找到距给定点给定距离的可能点的坐标?

mysql - Google map /OSM - 查找某个区域(不是点)100 英里内的记录

algorithm - 无法理解二元欧几里德旅行推销员的问题