首页 > 其他 > 详细

查找附近的人-2

时间:2015-11-05 16:58:29      阅读:221      评论:0      收藏:0      [点我收藏+]

4,PHP.JAVA实现GEOHASH

2),测试下代码

<?php 
require_once(‘geohash.class.php‘);

//######################辅助函数############################
// format var_dump 测试显示函数
    function p($var, $echo=true,$label=null, $strict=true)
    {
        echo "<br>";
        $label = ($label===null) ? ‘‘ : rtrim($label).‘ ‘;
        if(!$strict) {
            if (ini_get(‘html_errors‘)) {
                $output = print_r($var, true);
                $output = "<pre>".$label.htmlspecialchars($output,ENT_QUOTES)."</pre>";
            } else 
            { 
                $output = $label . " : " . print_r($var, true);        
            }    
        }else {
            ob_start();
            var_dump($var);
            $output = ob_get_clean();
            if(!extension_loaded(‘xdebug‘)) {
                $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
                $output = ‘<pre>‘. $label. htmlspecialchars($output, ENT_QUOTES). ‘</pre>‘;
            }
        }
        if ($echo) {
            echo($output);
            return null;
        }else 
            return $output;
    }

//######################数据库连接############################
//创建连接
function con() {
            $dbh = new PDO(‘mysql:host=localhost;dbname=geohash‘, ‘root‘, ‘‘); 
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
            $dbh->exec(‘set names utf8‘); 
			return $dbh;
}

//条件查询
function select_query($sql,$values){
try{
            $dbh=con();
            /*查询*/  
            $stmt = $dbh->prepare($sql);    
            $stmt->execute($values);    

            $arr = array();
            while($row = $stmt->fetch(PDO::FETCH_ASSOC))
            {       
                   $arr[]=$row ;      
            };   
            return $arr;
             
            // 现在运行完成,在此关闭连接
            $dbh = null;
            }catch(PDOException $e){  
            print"Error!:".$e->getMessage()."<br/>";  
            die();  
            }  
}

//查询所有任务
function select_all(){
try{
            $dbh=con();
            /*查询*/  
            $stmt = $dbh->prepare(‘SELECT * FROM person‘);    
            $stmt->execute();    
            $arr = array();
            while($row = $stmt->fetch(PDO::FETCH_ASSOC))
            {       
                   $arr[]=$row ;      
            };  
            return $arr;
             
            // 现在运行完成,在此关闭连接
            $dbh = null;
            }catch(PDOException $e){  
            print"Error!:".$e->getMessage()."<br/>";  
            die();  
            }  
}

//所有插入操作
function insert($sql,$values){
try{
            $dbh=con();
            /*插入*/  
            $stmt = $dbh->prepare($sql);    
            $stmt->execute($values);    
            $lastid=$dbh->lastinsertid(); 
		return $lastid;
            // 现在运行完成,在此关闭连接
            $dbh = null;
            }catch(PDOException $e){  
            print"Error!:".$e->getMessage()."<br/>";  
            die();  
            }  
}

//######################模拟地理位置插入数据############################
$geo=new Geohash;

$gps=array();
for($i=0;$i<=10;$i++){
    $g=array((rand(1000000,1000010)/100000),(rand(2000000,2000000)/100000));
      // $g=array(30.68635,103.9521);
    $gps[]=$g;
}

$sql=‘insert into person(geohash,lat,lng) values(?,?,?)‘;
foreach ($gps as $k => $v) {
      $encode=$geo->encode($v[0],$v[1]);
      $decode=$geo->decode($encode);
      $values=array($encode,$decode[0],$decode[1]);    
      // $values=array($encode,$v[0],$v[1]);  
      insert($sql,$values);  
}

//######################查找相识的点############################
$sql=‘select geohash,lat,lng from person where geohash like "s3y0zn%" ‘;
$values=array();
$rs=select_query($sql,$values);
p($rs);

3),实际使用注意事项

实际使用的时候,应该查处类似一个九宫格的位置,然后比较九宫格里面与目标点的距离

技术分享

如果只是查出一个矩形位置,很可能丢掉相邻矩形最近的位置;

参考http://blog.csdn.net/it_man/article/details/39640179

查找附近的人-2

原文:http://my.oschina.net/acitiviti/blog/526537

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!