关于距离排序的有关问题

WBOY
Release: 2016-06-13 12:09:08
Original
951 people have browsed it

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

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

其中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 />
Copy after login


其中 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 />
Copy after login


现在的问题 想根据距离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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template