Google如何估算我的GPS位置?

时间:2015-02-19 07:01:12

标签: android google-maps geolocation location

我想知道Google是如何做到这一点的。

禁用GPS时,请准确定位我。

首先我认为谷歌从手机信号塔获取信息,然后我才知道谷歌没有带我的手机信号塔和GPS来显示我的准确位置。

有人知道它是如何工作的吗?

2 个答案:

答案 0 :(得分:5)

Google和Apple和Skyhook等其他人构建了一个将WLAN BSSID链接到地理位置的数据库。 BSSID类似于由该接入点广播的接入点的MAC地址。因此,如果启用了BSSID广播,则它是“公共可见的”,这是大多数接入点的默认设置。 BSSID作为IP堆栈在较低层运行,您甚至不必连接到接入点来接收这些广播。

每次使用已启用的GPS和WiFi运行Google地图或导航时,如果您的设备能够获得良好的GPS修复,则当前可见的WLAN网络和您当前的位置(GPS修复)会上传到Google进行构建和更新数据库。这种技术有时被称为众包。因此,每个Android设备都充当数据收集器。您可以阅读有关此here的更多信息。

由于大多数接入点在其位置上是静态的并且仅覆盖小区域 - 覆盖半径大约为100米 - 它们是没有GPS的良好定位的理想锚点。

查找计算机的另一种方法是在geolocation databases中查找其IP地址。但是,Android中未使用此功能,因为移动设备没有固定位置。

答案 1 :(得分:2)

您要做的是使用LocationManager.NETWORK_PROVIDER而不是LocationManager.GPS_PROVIDER获取位置。 NETWORK_PROVIDER将在GSM或wifi上解析,这是可用的。显然,关闭wifi,将使用GSM。请记住,使用蜂窝网络准确到500米。

http://developer.android.com/guide/topics/location/obtaining-user-location.html有一些非常好的信息和示例代码。

完成OnCreate()中的大部分代码后,添加:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

您还可以让您的活动实现LocationListener类,从而在您的活动中实现onLocationChanged()

希望它会对你有所帮助。

我已经参考并从某些链接编码,但我不知道源链接。

如果您需要我的帮助,请告诉我。