搜索用户距离内的项目(地理位置)PHP / MySQL

时间:2016-05-17 04:08:28

标签: php mysql geolocation

我有一个mySQL表,包含item,latitude&经度等 我如何根据当前的地理位置搜索KM中特定数量的项目?

例:
用户从下拉框“20KM”中选择一个值 如何根据地理位置获取20KM距离内的所有项目?

布局屏幕截图:

Search button

3 个答案:

答案 0 :(得分:2)

SELECT *,3956*2*ASIN(SQRT(POWER(SIN((19.286558 - latitude)*pi()/180/2),2)+COS(19.286558 * pi()/180)
*COS(latitude * pi()/180)*POWER(SIN((-99.612494 -longitude)* pi()/180/2),2)))
as distance FROM table  having distance < 10 ORDER BY distance;

这将为您提供10公里范围内的记录。在having子句中修改20米的查询。

答案 1 :(得分:0)

最好使用谷歌示例代码。

此链接可以帮助您:

http://code.google.com/apis/maps/articles/phpsqlsearch.html

他们的PHP和SQL查询帮助很好。

添加

this code也可能有所帮助:

function distance($lat1, $lon1, $lat2, $lon2, $unit) {

  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
      return ($miles * 1.609344);
  } else if ($unit == "N") {
      return ($miles * 0.8684);
  } else {
      return $miles;
  }
}

结果:

echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";

答案 2 :(得分:0)

您可以计算当前位置与所有公园之间的海峡距离,并仅过滤哪个匹配距离标准。

    /**
     * @param float $parkLatitude
     * @param float $parkLongitude
     * @param float $userLatitude
     * @param float $userLongitude
     * @param float $distance in km
     *
     * @return bool
     */
    function isParkInDistance($parkLatitude, $parkLongitude, $userLatitude, $userLongitude, $distance)
{
    $earthRadius = 6371; //km

    $dLat = deg2rad($userLatitude - $parkLatitude);
    $dLon = deg2rad($userLongitude - $parkLongitude);

    $a = sin($dLat/2) * sin($dLat/2) + cos(deg2rad($parkLatitude)) * cos(deg2rad($userLatitude)) * sin($dLon/2) * sin($dLon/2);
    $c = 2 * asin(sqrt($a));
    $d = $earthRadius * $c;

    return $d <= $distance;
}

或者您可以使用类似doesNotRecognizeSelector:的内容来计算道路距离