有没有办法在不让用户安装 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 扩展?