1

在我的应用程序中,我想要 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();

    } 
4

3 回答 3

2

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

getLastKnownLocation 是您最后一个已知位置,不要仅使用 getAccuracy 也检查时间。

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

于 2012-05-24T09:43:04.390 回答
0

通常 GPS 可以精确到 3m,但如果它是 10 到 20 米,则 GPS 可以做到这一点。

用于民用的标准 GPS 接收器可提供低至几米的精度。实际上,接收到的卫星的数量和几何形状对精度有很大影响,在日常使用中,预计精度约为 20 m 。

GPS 精度

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

于 2012-05-24T09:27:56.957 回答
0

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

locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) 

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

于 2014-03-20T13:26:35.747 回答