有没有办法在不让用户安装 Google Gears 的情况下获取用户的位置?

Posted

技术标签:

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

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

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

【问题讨论】:

这对我来说一直是最好的结果:united-coders.com/christian-harms/free-ip-location-script 【参考方案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;

【讨论】:

以上是关于有没有办法在不让用户安装 Google Gears 的情况下获取用户的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firefox 4 上运行 Google Gears 扩展?

Google Gears SQLite DB 和 C#

对于文件上传,Google gears HTML 5 哪个更好?

某度文档资料不让复制的解决办法,网站不让复制内容的解决办法

Google Gears 真的是一个长期的解决方案吗?

Google Gears - 数据库 - VACUUM