Maison  >  Article  >  développement back-end  >  关于距离排序的有关问题

关于距离排序的有关问题

WBOY
WBOYoriginal
2016-06-13 12:09:08954parcourir

关于距离排序的问题
比如说根据一系列条件查询数据 数据是分页的

$sql =  "select id,xpoint,ypoint, deal_cate_id,ratio  from ".DB_PREFIX."supplier_location where ".$where;

其中xpoint,ypoint 代表经度纬度  ,其中外部会传过来一个用户所在地的经纬度 $xpoint,$ypoint
查询出数据以后   循环列表   根据用户所在地的经纬度算出用户跟商家的距离
<br />foreach($info as $k=>$v){			   <br />	$info[$k]['Distance']  =intval(GetDistance($ypoint,$xpoint,$v['ypoint'],$v['xpoint'])*1000);<br />}<br />


其中  GetDistance 函数 代码为  
<br />// 本函数为获取两坐标之间的距离 // a纬度 a经度 b纬度 b经度 <br />function GetDistance($lat1, $lng1, $lat2, $lng2)   {   <br />    $EARTH_RADIUS = 6378.137;<br />	$radLat1 = rad($lat1);<br />	$radLat2 = rad($lat2);<br />	$a = $radLat1 - $radLat2;<br />	$b = rad($lng1) - rad($lng2);   <br />    $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)));<br />    $s = $s * $EARTH_RADIUS;     $s = round($s * 10000) / 10000;    return $s;<br />}<br />


现在的问题 想根据距离Distance排序 但是因为数据分页导致排序不准确 ,因为涉及搜索条件  每个用户所在地及所使用的搜索条件不同, 如果使用临时表 或者 使用缓存会造成数据量过大 ,请教大家有什么好的方法,求建议
------解决思路----------------------
排序
order by abs(xpoint-$xpoint), abs(ypoint-$ypoint)
即按两点经纬度差的绝对值进行排序

查的结果后再行计算

或直接将算式 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))
放到 sql 语句中,涉及的函数 mysql 都有
度化弧是 RADIANS

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:关于_set的有关问题Article suivant:php数据库连接异常