0

我正在听我的手机 GPS 并将纬度和经度发布到我的网络服务中,每次onLocationChanged都会被调用。我的问题是,在我大约 2% 的帖子中,它显示的结果非常不准确(相距几英里)。我应该在发布之前检查我的location对象的准确性吗?或者你有什么其他建议吗?谢谢!

public void onLocationChanged(Location location) {
    locationManager.removeUpdates(networkLocationListener);

    textView.setText(textView.getText().toString() + "New GPS location: "
            + String.format("%9.6f", location.getLatitude()) + ", "
            + String.format("%9.6f", location.getLongitude()) + "\n");

    //float accuracy = location.getAccuracy(); check this value?

    postLocationToWebservice(location);
}
4

2 回答 2

1

这是使用 Android 的位置服务时非常常见的问题。您可以引入很少的检查来确保只有准确的位置会发布到您的网络服务。

1.比较所有位置服务的准确性。

2.定义准确度的最小限制和时间的最大限制。(因为有时获得的位置是准确的,但它是一个旧的)。

检查此代码片段并进行必要的更改以完成您想要的。确保您进行日志构建以检查算法的准确性。

List<String> matchingProviders = myLocation.lm.getAllProviders();
    for (String provider: matchingProviders) 
    {
        Location location = myLocation.lm.getLastKnownLocation(provider);
        if (location != null) {
            float accuracy = location.getAccuracy();
            long time = location.getTime();

            if ((time > minTime && accuracy < bestAccuracy)) {
                bestResult = location;
                bestAccuracy = accuracy;
                bestTime = time;
            }
            else if (time < minTime && bestAccuracy == Float.MAX_VALUE && time > bestTime) {
                bestResult = location;
                bestTime = time;
            }
        }
    }
于 2012-06-22T14:57:22.127 回答
0

更新的位置可能是由NETWORK_PROVIDER而不是GPS_PROVIDER

您始终可以通过以下方式获取最后更新的 GPS 位置

     mLocationMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
于 2012-06-22T11:30:54.593 回答