7

我不想让用户安装 Google Gears,这样我就可以告诉他他猜到的位置。有没有办法在不使用 Google Gears 的情况下获取位置?

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

4

6 回答 6

10

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 地址关联的国家特定地区名称
于 2008-11-24T11:39:04.183 回答
9

这通常称为 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";
   }
 }
于 2008-11-24T10:08:36.223 回答
5

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

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

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

于 2008-11-24T10:40:38.763 回答
3

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

于 2012-07-09T03:51:09.803 回答
1

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

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

于 2009-04-12T22:23:38.933 回答
1

您可以使用这个简单的代码对 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;
}
于 2012-10-19T07:33:33.770 回答