php高性能做附近的人,PHP之路——geohash查找附近的人

本文介绍了一种通过递归实现的经纬度区间划分算法,getLat()函数根据输入的坐标值和边界,生成精确的1或0来决定是否包含。joinStr()函数将纬度和经度的字符串交替连接。核心是利用了平均数策略来缩小搜索范围。
摘要由CSDN通过智能技术生成

class location

{

public function getLat($number, $small, $big, $temp = 20){

$temp--;

$average = ($big + $small) / 2;

if ($temp == 0) {

if ($average <= $number) {

return ‘1‘;

} else {

return ‘0‘;

}

}

if ($average <= $number) {

return ‘1‘ . $this->getLat($number, $average, $big, $temp);

} else {

return ‘0‘ . $this->getLat($number, $small, $average, $temp);

}

}

public function joinStr($lat, $lon){

$len = strlen($lat);

$str = ‘‘;

for ($i=0; $i < $len; $i++) {

$str .= $lon[$i] . $lat[$i];

}

return $str;

}

}

$location = new location();

$lat = $location->getLat(39.92324, -90, 90);

$lon = $location->getLat(116.3906, -180, 180);

$str = $location->joinStr($lat, $lon);

for ($i=0; $i

$code[$i] = bindec(substr($str, $i * 5, 5));

}

foreach ($code as $key => $value) {

echo $value . "\n";

}

原文:http://www.cnblogs.com/xj76149095/p/6956266.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值