mysql选择最接近lat / long到特定位置

时间:2012-01-02 13:33:10

标签: php mysql

  

可能重复:
  Nearest locations with latitude and longitude

我的数据库超过1000个位置(纬度,经度),我想根据特定位置a(lat,long)选择最近的5个!任何人都可以知道如何做到这一点!我不想进行测试来计算一个和其他位置之间的所有距离这会花费太多时间!

这是我想要做的,但我不确定!!

    $lat = round (48.89463, 3);
    $lng = round (2.33739,2);

    $sql=mysql_query("SELECT * 
    FROM tbl z
    WHERE ROUND(z.lat,3) LIKE $lat AND ROUND(z.long,2) LIKE $lng
    LIMIT 0,5") or die(mysql_error());
  while($row=mysql_fetch_assoc($sql))
  {
  echo $row[lat].";".$row[long]."<br>";
  }

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用great-circle distance

$lat = round (48.89463, 3);
$lng = round (2.33739,2);

$sql=mysql_query("SELECT * 
FROM tbl z
ORDER BY ACOS(COS(RADIANS($lat))*COS(RADIANS(z.lat))*COS(RADIANS(z.long)RADIANS($lng))+SIN(RADIANS($lat))*SIN(RADIANS(z.lat))
WHERE ROUND(z.lat,3) LIKE $lat AND ROUND(z.long,2) LIKE $lng
LIMIT 0,5") or die(mysql_error());
while($row=mysql_fetch_assoc($sql))
{
echo $row[lat].";".$row[long]."<br>";
}