【问题标题】:Get latitude and longitude at 50 miles radius with reference to particular latitude and longitude参考特定经纬度获取半径50英里处的经纬度
【发布时间】:2017-06-05 07:47:49
【问题描述】:

我有纬度和经度值,想在 50 英里处找到另一个纬度值。怎么做?任何公式或自定义函数可以在 php 中得到它?

【问题讨论】:

  • 一句话,没有。 PHP 没有针对这类事情的内置函数。

标签: php geolocation


【解决方案1】:

在 php 中,您可以通过获取记录并使用以下公式来实现。 但我希望你使用查询来解决这个问题。效率更高。

function getNearestUsers($givenLat,$givenLng)
{
   $res = [];
   $recs = getAllTheRecordsFromDb();
   foreach($recs as $r)
   {
      $distance = sqrt(POW((69.1 * ($r['lat'] - $givenLat)),2) + POW((69.1 * ($givenLng - $r['lng']) * cos($r['lat'] / 57.3)),2));
      if($distance<=50)  //50 miles
       {
          //some code
       }
   }
}

假设您有一个包含用户 ID、纬度和经度的用户表。下面是 sql 查询,用于获取距离给定纬度和经度 50 英里 半径内的用户。

SELECT userId, latitude, longitude, SQRT(
    POW(69.1 * (latitude - [givenLat]), 2) +
    POW(69.1 * ([givenLng] - longitude) * COS(latitude / 57.3), 2)) AS distance
FROM TableName HAVING distance < 50 ORDER BY distance;

您可以通过参考以下链接获得更多答案: latitude/longitude find nearest latitude/longitude - complex sql or complex calculation

【讨论】:

    【解决方案2】:

    此查询方法基于google map store locator api。

    请参考这个网站:

    假设你有一个 lat 和 lang 的变量 $纬度; $lng;

    让我们假设这些变量有它的坐标。

    在您的查询中执行以下操作:

    SELECT id, lat, lng ( 3959 * acos( cos( 弧度($lat) ) * cos( 弧度( lat ) ) * cos( 弧度( lng ) - 弧度($lng) ) + sin(弧度($lat) ) * sin( 弧度( lat ) ) ) ) AS 距离标记 HAVING distance

    结果将返回小于或等于 50 英里的 id、lat 和 lng 坐标。

    P.S 3959 是返回里程的单位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      相关资源
      最近更新 更多