获取数据 get_post -> pageindex / pagesize / times
$base_offset = 0.0006; //最小基准范围
$times = 0; //最小扩大范围倍数
pic_cou = 0; //照片数量
//从最小范围开始,慢慢扩大范围,直到照片数量够取为止,
while(pic_cou < pageindex*pagesize)
{
$times ++; //增加范围
$now_offset = × * $base_offset;
$pic_cou = $query->count( dblat < lat + $now_offset && dblng < lng + $now_offset && dblat >lat - $now_offset && dblng > lng - $now_offset );
}
//取出照片
$pic_arr = $query->get( dblat < lat + $now_offset && dblng < lng + $now_offset && dblat >lat - $now_offset && dblng > lng - $now_offset );
//循环获取距离
foreach($pic_arr as $key => $val)
{
$picture = $this->get_app_home_picture_data_new($val); //将数据转换成所需的字段
$distance = $this->getDistanceBetweenPointsNew($val[‘addressy‘] , $val[‘addressx‘] , $lat, $lng);//计算距离
$picture[‘meter‘] = $distance[‘meters‘]; //存入返回数据的所需字段
$data[] = $picture; //合并数据,改数据为目标数据
}
$data=array_sort($data,‘meter‘); // 排序
$arr = array_slice($arr,0,10); // 取出所需个数
第一版 思想 -------- 给定一个坐标位置,从最小范围(如100米)开始往外扩大范围,直到查询出来的数量与客户端请求数量匹配为止。每次轮询的查询结果不记录下来,只查询数量,数量足够再同意往数据库请求数据。
第二版 思想 -------- 增加缓存,每次轮询直接查询数据,然后判断数量是否足够,若不够则继续取。注意,每取一次都会计算距离,并将数据集记录合并,最后将其缓存或存入数据库,以便下次请求时不需要再重复计算。
写的乱七八糟的,过几天赶紧把代码敲出来试试看