PHP查询附近的人及其距离的实现方法
本文实例讲述了PHP查询附近的人及其距离的实现方法。分享给大家供大家参考,具体如下:
<?php
//获取该点周围的4个点
$distance=1;//范围(单位千米)
$lat=113.873643;
$lng=22.573969;
define('EARTH_RADIUS',6371);//地球半径,平均半径为6371km
$dlng=2*asin(sin($distance/(2*EARTH_RADIUS))/cos(deg2rad($lat)));
$dlng=rad2deg($dlng);
$dlat=$distance/EARTH_RADIUS;
$dlat=rad2deg($dlat);
$squares=array('left-top'=>array('lat'=>$lat+$dlat,'lng'=>$lng-$dlng),
'right-top'=>array('lat'=>$lat+$dlat,'lng'=>$lng+$dlng),
'left-bottom'=>array('lat'=>$lat-$dlat,'lng'=>$lng-$dlng),
'right-bottom'=>array('lat'=>$lat-$dlat,'lng'=>$lng+$dlng)
);
print_r($squares['left-top']['lat']);
//从数库查询匹配的记录
$info_sql="select*from`A`wherelat<>0andlat>{$squares['right-bottom']['lat']}andlat<{$squares['left-top']['lat']}andlng>{$squares['left-top']['lng']}andlng<{$squares['right-bottom']['lng']}";
//获取两点之间的距离
functiongetDistanceBetweenPointsNew($latitude1,$longitude1,$latitude2,$longitude2){
$theta=$longitude1-$longitude2;
$miles=(sin(deg2rad($latitude1))*sin(deg2rad($latitude2)))+(cos(deg2rad($latitude1))*cos(deg2rad($latitude2))*cos(deg2rad($theta)));
$miles=acos($miles);
$miles=rad2deg($miles);
$miles=$miles*60*1.1515;
$feet=$miles*5280;
$yards=$feet/3;
$kilometers=$miles*1.609344;
$meters=$kilometers*1000;
returncompact('miles','feet','yards','kilometers','meters');
}
$point1=array('lat'=>40.770623,'long'=>-73.964367);
$point2=array('lat'=>40.758224,'long'=>-73.917404);
$distance=getDistanceBetweenPointsNew($point1['lat'],$point1['long'],$point2['lat'],$point2['long']);
foreach($distanceas$unit=>$value){
echo$unit.':'.number_format($value,4).'<br/>';
}
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php正则表达式用法总结》、《PHP+ajax技巧与应用小结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。