Android:无法获得准确的纬度和经度值

时间:2012-05-24 09:13:26

标签: android geolocation gps latitude-longitude gprs

在我的应用程序中,我希望通过GPS和/或网络获得纬度和经度值。我的代码工作但有时它给出准确的值,有时它没有给出准确的值,有时它会给出距离准确位置10或20米的值。 代码:

mlocListener = new MyLocationListener(getApplicationContext());
    /* Use the LocationManager class to obtain GPS locations */
    LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                10000, 0, mlocListener);
    } else if (mlocManager
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        mlocManager.requestLocationUpdates(
                LocationManager.NETWORK_PROVIDER, 10000, 0, mlocListener);
    }

    Location gpsLocation = mlocManager
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);
    Location netLocation = mlocManager
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    if (gpsLocation != null) {
        mlocListener.latitude = gpsLocation.getLatitude();
        mlocListener.longitude = gpsLocation.getLongitude();

        double lat = (double) (gpsLocation.getLatitude());
        double lng = (double) (gpsLocation.getLongitude());


        Toast.makeText(this, "Location attributes using GPS Provider",
                Toast.LENGTH_LONG).show();

    } else if (netLocation != null) {
        mlocListener.latitude = netLocation.getLatitude();
        mlocListener.longitude = netLocation.getLongitude();

        double lat = (double) (netLocation.getLatitude());
        double lng = (double) (netLocation.getLongitude());



        Toast.makeText(this, "Location attributes using NETWORK Provider",
                Toast.LENGTH_SHORT).show();

    } 

3 个答案:

答案 0 :(得分:2)

使用loc.getAccuracy()方法检查您收到的位置的准确性级别。如果该值小于10(或小于该值),则可以考虑它,否则等待位置Lister获取另一个位置。

getLastKnownLocation是你最后知道的位置,不要只使用getAccuracy来检查时间。

如果只需要准确的位置,最好不要使用getLastKnownLocation。

答案 1 :(得分:0)

通常GPS精确到3米,但如果它的10到20米,GPS就可以实现。

  

民用标准GPS接收器可提供少量精确度   米。在实践中,收到的卫星的数量和几何形状   大大影响准确性,在日常使用中,准确度   可以预期大约20米

GPS Accuracy

此外,如果您从网络提供商处获取当前位置,则可能会出现更加不准确的位置。

答案 2 :(得分:0)

如果您期望获得最高准确度,我会说您解雇网络提供商,因为它受到与电话运营商等相关的其他因素的影响。

locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) 

使用手机内置GPS接收器(时间成本高)可以获得您的位置,但它可以为您提供最大的准确度。