【问题标题】:Is there a way to get the users location without having the user install Google Gears?有没有办法在不让用户安装 Google Gears 的情况下获取用户的位置?
【发布时间】:2010-09-23 18:00:13
【问题描述】:

我不想让用户安装 Google Gears,这样我就可以向他展示他猜到的位置。有没有无需使用 Google Gears 即可获取位置的方法?

我找到了http://www.wipmania.com/de/blog/google-geolocation-api/,但它没有提供示例。

【问题讨论】:

标签: google-maps geolocation google-gears


【解决方案1】:

Google 提供了一种通过AJAX API loader 获取用户位置的方法。这甚至可以在没有安装 Gears 的情况下工作。只需包含一个指向 JsAPI 的脚本标记:

<script type="text/javascript" 
   src="http://www.google.com/jsapi?key=ABCDEFG">
</script>

当应用程序使用 AJAX API 加载器时,加载器会尝试根据客户端的 IP 地址对客户端进行地理定位。如果此过程成功,则客户端的位置(范围为 Metro 级别)在 google.loader.ClientLocation 属性中可用。如果进程找不到匹配项,则将此属性设置为 null。

if (google.loader.ClientLocation){
  var center = new google.maps.LatLng(
    google.loader.ClientLocation.latitude,
    google.loader.ClientLocation.longitude
  );
  map.setCenter(center);
}

填充后,google.loader.ClientLocation 对象将填充以下 Metro 级别粒度属性:

  • ClientLocation.latitude — 提供与客户端 IP 地址相关的低分辨率纬度
  • ClientLocation.longitude — 提供与客户端 IP 地址相关的低分辨率经度
  • ClientLocation.address.city — 提供与客户 IP 地址相关的城市名称
  • ClientLocation.address.country — 提供与客户 IP 地址相关的国家/地区名称
  • ClientLocation.address.country_code — 提供与客户端 IP 地址关联的 ISO 3166-1 国家/地区代码的名称
  • ClientLocation.address.region — 提供与客户端 IP 地址关联的国家/地区特定区域名称

【讨论】:

  • 对于我的网站,我分析成功率为 54%。这不是很令人印象深刻:(
【解决方案2】:

这通常称为 IP 地理位置。

一个例子是here

问题是,大多数网站(如果您打算将其称为网络服务)会向您收费。否则,将一个 Web 服务组合在一起,该服务抓取一个地理定位页面,解析它的地址,然后返回该信息。

在 PHP 中,这似乎工作得很好:

<?php
 if(isset($_GET["ip"])){
   echo geolocate($_GET["ip"]);
 }

 function geolocate($ip){
   $raw_html = file_get_contents("http://www.geody.com/geoip.php?ip=$ip");
   if(preg_match('/Location:(.*)/',$raw_html,$matches)){
     $location_raw = $matches[1];

     //Get rid of pesky HTML tags
     $location = preg_replace("/<[^>]*>/","",$location_raw);
     return $location;
   }else{
     return "ERROR";
   }
 }

【讨论】:

    【解决方案3】:

    使用地理定位服务或图书馆需要注意的一点是,它们永远不会 100% 准确。我们使用一个IP2Location,它实际上一直是我们客户服务部门投诉的稳定来源。我们正在寻找改变网站行为的方法,并权衡将其完全删除的因素。

    问题在于,将 IP 与用户关联起来的负担在于用户的 ISP。它们有大块的 IP 范围,并且它们注册哪些块属于特定位置。问题是 ISP 在移动区块或区块覆盖过大区域时通常不会更新此信息。

    例如,我住在曼哈顿以北约 60 英里处,但我的 IP 经常显示我在芝加哥,使用大多数查找工具。我有 FIOS,并与其他几个确认相同行为的人交谈过。

    【讨论】:

      【解决方案4】:

      您可以为此目的使用 HTML5。这很简单。 Here 就是例子。

      【讨论】:

        【解决方案5】:

        如果您的用户使用移动设备,Xitfy 也是一个免费选项。他们有一个小客户端,用户同意后可以无缝安装到手机上。然后,您可以调用基于 REST 的 api 从 gps / wifi 或手机信号塔获取准确的纬度/经度。

        它们支持几乎涵盖所有智能手机的 Android、Windows Mobile、BlackBerry 和 Symbian。

        【讨论】:

          【解决方案6】:

          您可以使用这个简单的代码对 IP 地址进行地理编码。它工作得很好。试试这个:

          function functionname(Your IP Here)
          {
          
              $ip = $ClientIP;
          
              $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true");
          
              $json = json_decode($json,true);
          
              return $json;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-16
            • 1970-01-01
            • 2014-11-17
            • 2012-04-13
            • 2013-08-23
            • 2010-09-12
            相关资源
            最近更新 更多