• 技术文章 >php教程 >php手册

    基于ip的手机地理定位

    2016-06-06 19:44:41原创706

    现在lbs服务比较火,基本上都需要 定位 用户的 地理 信息,用户 地理 信息一般是通过gps来 定位 实现的,那么假如 用户的gps坏了,或者没有开启,那么怎么获得用户的 地理 信息的呢?替代的办法就是可以获得 手机 真实ip信息来大致获取 手机 用户的 大概位置

    现在lbs服务比较火,基本上都需要定位用户的地理信息,用户地理信息一般是通过gps来定位实现的,那么假如

    用户的gps坏了,或者没有开启,那么怎么获得用户的地理信息的呢?替代的办法就是可以获得手机真实ip信息来大致获取手机用户的

    大概位置,虽然不是很精确,但是在精确度不高的情况下可以临时代替一下,本文就是实现如何通过ip来定位用户的。这里主要使用获得pc端模拟手机端原理

    使用工具:

    地图:谷歌地图Google Maps JavaScript API V3


    首先介绍一下谷歌地图定位地理信息的原理:根据经纬度查询出用户的地理信息,====gps可以获得经纬度。

    也可以使用谷歌的共享地理位置信息 ,例如火狐的有http://www.mozilla.com/zh-CN/firefox/geolocation/可以体验一下共享地理信息,不过那个技术是基于w3c标准的,目前ie还不是支持。


    本文要实现的:根据ip 查询获得ip的地理信息 和在地图中的显示

    设计思想:获得ip信息--->查询到ip地理位置(如杭州 北京等,这个有两种方法一种是使用ip数据库,另外一种是门户网站接口,我的另外一篇有详细介绍http://blog.csdn.net/youacai/article/details/6584969)

    ----->根据获得的地理信息,谷歌把他转化为经纬度---->经纬度定位

    本次修改增加了弹出信息窗口和 事件监听方法(监听经纬值)还是 在地图中显示图像功能


    1:获得用户ip信息

    这里推荐使用腾讯的ip开放接口,地理信息比较全,获得ip信息的更详细介绍http://blog.csdn.net/youacai/article/details/6584969

    这个带有查询ip功能的方法,手机获得手机端ip信息传到这个方法,获取到地理位置

    //根据腾讯接口查询ip地址
    function getIPLoc($queryIP){
    
    
    $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
    
    
    $ch = curl_init($url);
    
    
    curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
    
    
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
    
    
    $result = curl_exec($ch);
    
    
    $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
    
    
       curl_close($ch);
    
    
    preg_match("@(.*)

    @iU",$result,$ipArray); $loc = $ipArray[1]; return $loc; }

    这是直接获得pc端的方法,至于手机端如何获得用户ip,网上找一下方法有很多

    //方法2 直接获得客户端ip地址
    function getIpPlace(){
     $ip=file_get_contents("http://fw.qq.com/ipaddress");
     $ip=str_replace('"',' ',$ip);
     $ip2=explode("(",$ip);
     $a=substr($ip2[1],0,-2);
     $b=explode(",",$a);
     return $b;
    }

    2:调用谷歌地图


    引入地图

      

    设置谷歌地图的参数

    zoom是地图显示的缩放级数,center是地图的中心位置,maptypeid是地图的类型,address主要获取查询到的地理信息,

    gecode主要是谷歌地图吧地理信息转化为经度纬度值,title主要是点击时候的名称,icon主要是锚点的背景图像,没有的话就是是默认值