如何使用GPRS检测移动位置?

时间:2012-01-13 20:22:03

标签: google-maps geolocation gprs

如您所知,Google地图移动计划可以查找用户位置(我的位置服务)。 我想知道谷歌地图如何使用互联网移动,GPRS(非GPS)检测用户位置? 是否可以用PHP或其他基于Web的语言编写程序,以便在打开该页面时检测用户的位置? 我猜测Google不会使用用户IP来确定他们的位置,因为当我尝试使用移动互联网IP猜测我的位置时,会得到错误的位置。

3 个答案:

答案 0 :(得分:6)

查看Google Geocoding API和W3 Geolocation API Specification。然后this可能有助于您找到答案。

答案 1 :(得分:4)

在没有GPS定位的情况下,进行定位的常用方法是对服务小区ID或检测到的Wi-Fi MAC地址进行反向查找。存在基于服务器的数据库,其提供所有已知小区站点的地理定位 - 其由小区ID唯一地标识,或者更确切地说,其小区全局ID(CGI)以及所有已知Wi-Fi AP的位置。因此,知道CGI或MAC,可以通过在诸如GPRS之类的蜂窝数据集合中浸入数据库来确定一个人的近似(“粗略”)位置。这就像SkyHook(Apple曾经使用但不再使用)这样的商业服务如何发挥作用。

通过使用其他输入(如信号强度或数字地图),可以使这种粗略位置更精确。

某些设备(如iPhone)会在设备上缓存此数据库,以便更快地进行粗分辨率定位。苹果公司几个月前就遇到了麻烦,此后又改变了它的运作方式。

为了让网页知道设备的位置,设备必须调用适当的(设备特定的)定位API,然后将其提交给Web服务器,这显然需要一些设备端代码(不仅仅是浏览器)。

答案 2 :(得分:1)

它的工作原理如下。谷歌地图会询问用户是否愿意根据他们的浏览器(或使用谷歌地图代码的程序)是否支持并实施地理位置界面来共享他们的位置,您可以通过该界面了解有关here的更多信息。如果用户同意共享其位置,则传递关于本地无线接入点的信息,以便谷歌地图(或其他服务)可以估计用户的位置。可以在您的程序或网页中实现此功能。我不太了解在程序中使用谷歌地图,但对于网页,这里有一个用javascript写的一个例子,可以做你想要的。我相信你也可以在PHP中完成这个任务。

<!DOCTYPE html>
<html>
<head>
<title>Google Maps JavaScript API v3 Example: Map Geolocation</title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css"
  rel="stylesheet" type="text/css">
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>

<script type="text/javascript">
  var map;

  function initialize() {
    var myOptions = {
      zoom: 6,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map_canvas'),
        myOptions);

    //this is the piece of code you are interested in!!
    if(navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(function(position) {
        var pos = new google.maps.LatLng(position.coords.latitude,
                                         position.coords.longitude);

        var infowindow = new google.maps.InfoWindow({
          map: map,
          position: pos,
          content: 'Location found using HTML5.'
        });

        map.setCenter(pos);
      }, function() {
        handleNoGeolocation(true);
      });
    } else {
      handleNoGeolocation(false);
    }
  }

  function handleNoGeolocation(errorFlag) {
    if (errorFlag) {
      var content = 'Error: The Geolocation service failed.';
    } else {
      var content = 'Error: Your browser doesn\'t support geolocation.';
    }

    var options = {
      map: map,
      position: new google.maps.LatLng(60, 105),
      content: content
    };

    var infowindow = new google.maps.InfoWindow(options);
    map.setCenter(options.position);
  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map_canvas"></div>
</body>
</html>

请参阅google maps api参考here,了解使用此方法的方式。此外,不是源参考以“sensor = true”结尾。如果使用地理位置,则必须在源中将此值设置为true。