我使用與@ socca1157回答相同的查詢,但我認爲我可以在查詢開始時提供一個常量3959
的小解釋。
我的例子也得到用戶的地址的緯度和經度
$address = urlencode($_GET['user-address']);
$earth_radius = 3959;
$search_radius = 100;
$ch = curl_init('https://maps.google.com/maps/api/geocode/json?address='.$address.'&sensor=false');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$geocode = curl_exec($ch);
curl_close($ch);
$output = json_decode($geocode);
$lat = $output->results[0]->geometry->location->lat;
$lng = $output->results[0]->geometry->location->lng;
$sql = "SELECT *, ($earth_radius * acos(cos(radians($lat)) * cos(radians(latitude)) * cos(radians(longitude) - radians($lng)) + sin(radians($lat)) * sin(radians(latitude)))) AS distance FROM table WHERE isActive = 1 HAVING distance < $search_radius ORDER BY distance LIMIT 5";
$result = mysql_query($sql);
因此,舉例來說,如果你想在公里而非英里進行搜索,你會使用公里的地球半徑,這是6,371公里。
在http://de.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL很好的描述 –
http://stackoverflow.com/questions/1896213/determine-if-一個座標是在另一半徑 –