【小编推荐】太原php开发------mysql 给定经纬度与数据库经纬度距离计算

2015-08-25   |   发布者:梁国芳   |   查看:3320次

php
第一点经纬度:lng1 lat1
第二点经纬度:lng2 lat2
round(6378.138*2*asin(sqrt(pow(sin(
(lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)*

pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)
demo:
$title = $_POST['title'];
$A = array();
$jingdu = $_POST['lon'];$weidu = $_POST['lat'];

$result = $db->query("select M.itemid, M.username, M.thumb, M.title,M.price, M.company, C.map, ROUND( 6378.138 *2 * asin( sqrt( pow( sin( (
SUBSTRING_INDEX( map, ',', -1 ) * pi( ) /180 - ".$weidu." * pi( ) /180 ) /2 ) , 2 ) + cos( SUBSTRING_INDEX( map, ',', -1 ) * pi( ) /180 ) * cos( ".$weidu." * pi( ) /180 ) * pow( sin( (
SUBSTRING_INDEX( map, ',', 1 ) * pi( ) /180 - ".$jingdu." * pi( ) /180 ) /2 ) , 2 ) )
) *1000
) AS distance
FROM `jiu_mall` AS M
LEFT JOIN `jiu_company` AS C ON C.username = M.username
WHERE M.title LIKE '%".$title."%'
ORDER BY distance ASC
LIMIT 0 , 30
");

这里数据库中字段map表示坐标值是(经度,纬度),
SUBSTRING_INDEX( map, ',', 1 )调用经度,-1调用纬度
while($r = $db->fetch_array($result)) {
    $A[] = $r;
}
echo $A;