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

Posted

技术标签:

【中文标题】Android:无法获得准确的经纬度值【英文标题】:Android: Not able to get accurate latitude and longitude value 【发布时间】:2012-05-24 09:13:26 【问题描述】:

在我的应用程序中,我希望通过 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();

     

【问题讨论】:

Gps is horribly inaccurate in android 的可能重复项 试试 mContext.getSystemService(...); mContext 是您活动的上下文 对不起,如果这段代码重复了我的我...... 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

GPS Accuracy

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

【讨论】:

【参考方案3】:

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

locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) 

这会使用您的手机内部 GPS 接收器获取您的位置(耗费时间),但它可以为您提供尽可能高的准确度。

【讨论】:

以上是关于Android:无法获得准确的经纬度值的主要内容,如果未能解决你的问题,请参考以下文章

使用 watchPosition 在 ios 设备上未获得准确的经纬度

android中当前位置的准确经纬度

用手机gps定位获得准确的百度地图经纬度

更快地获取经度和纬度值

如何在本机反应中获得当前位置的准确纬度和经度

如何判断经纬度是不是准确