我有一个mySQL表,包含item,latitude&经度等 我如何根据当前的地理位置搜索KM中特定数量的项目?
例:
用户从下拉框“20KM”中选择一个值
如何根据地理位置获取20KM距离内的所有项目?
布局屏幕截图:
答案 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:
的内容来计算道路距离