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

时间:2008-11-24 10:04:05

标签: google-maps geolocation google-gears

我不想让用户安装Google Gears,因此我可以向他展示他猜测的位置。有没有办法在不使用Google Gears的情况下获取位置?

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

6 个答案:

答案 0 :(得分: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属性中提供作用于地铁级别的客户端位置。如果进程找不到匹配项,则将此属性设置为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对象:

  • 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地址关联的国家/地区特定区域名称

答案 1 :(得分:9)

这通常称为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";
   }
 }

答案 2 :(得分:5)

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

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

例如,我居住在曼哈顿以北约60英里处,但我的IP经常表明我在芝加哥拥有大部分查找工具。我有FIOS,并与其他几个确认了相同行为的人交谈过。

答案 3 :(得分:3)

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

答案 4 :(得分:1)

如果您的用户使用移动设备,Xitfy也是免费选项。他们有一个小客户端,用户同意后可以无缝地安装在他们的手机上。然后,您可以调用基于REST的API来获取来自gps / wifi或cell tower的确切lat / lon。

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

答案 5 :(得分: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;
}