我不想让用户安装 Google Gears,这样我就可以告诉他他猜到的位置。有没有办法在不使用 Google Gears 的情况下获取位置?
我找到了http://www.wipmania.com/de/blog/google-geolocation-api/但它没有提供示例。
我不想让用户安装 Google Gears,这样我就可以告诉他他猜到的位置。有没有办法在不使用 Google Gears 的情况下获取位置?
我找到了http://www.wipmania.com/de/blog/google-geolocation-api/但它没有提供示例。
Google 提供了一种通过AJAX API loader获取用户位置的方法。这甚至可以在没有安装 Gears 的情况下工作。只需包含一个指向 JsAPI 的脚本标记:
<script type="text/javascript"
src="http://www.google.com/jsapi?key=ABCDEFG">
</script>
当应用程序使用 AJAX API 加载器时,加载器会尝试根据客户端的 IP 地址对客户端进行地理定位。如果此过程成功,则在 google.loader.ClientLocation 属性中提供范围为 Metro 级别的客户端位置。如果进程找不到匹配项,则此属性设置为 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 地址关联的国家特定地区名称这通常称为 IP 地理位置。
一个例子是here。
问题是,大多数网站(如果您打算将其称为 Web 服务)会向您收费。否则,将抓取地理定位页面、解析它的地址并返回该信息的 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";
}
}
使用地理定位服务或图书馆需要注意的一件事是,它们永远不会 100% 准确。我们使用一个IP2Location,它实际上一直是我们客户服务部门投诉的稳定来源。我们正在寻找改变网站行为的方法,并权衡完全删除它的因素。
问题在于将 IP 与用户相关联的负担在于用户的 ISP。它们有大块的 IP 范围,并且它们注册哪些块属于特定位置。问题是 ISP 在移动区块或区块覆盖过大区域时通常不会更新此信息。
例如,我住在曼哈顿以北约 60 英里处,但我的 IP 经常显示我在芝加哥,使用大多数查找工具。我有 FIOS,并与其他几个确认相同行为的人交谈过。
您可以为此目的使用 HTML5。这很简单。这是示例。
如果您的用户使用移动设备,Xitfy也是一个免费选项。他们有一个小客户端,用户同意后可以无缝安装到手机上。然后,您可以调用基于 REST 的 api 以从 gps / wifi 或手机信号塔获取准确的纬度/经度。
它们支持几乎涵盖所有智能手机的 Android、Windows Mobile、BlackBerry 和 Symbian。
您可以使用这个简单的代码对 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;
}