【问题标题】:Getting different latitude and longitude for one constant location为一个固定位置获取不同的纬度和经度
【发布时间】:2013-03-17 03:35:16
【问题描述】:

我创建了一个 android 应用程序,每 2 秒获取一次位置的纬度和经度。该应用程序运行良好,但是当我将我的 android 设备保持在一个位置时,我会在该点获得不同的纬度和经度......令人惊讶的是,即使所有这些不同的坐标都指向同一个位置,即使它们不同。

例如对于一个常量位置

我越来越喜欢

Latitude  -     10.013499  
Longitude -     76.3303451

两秒后

Latitude  -     10.0135014  
Longitude -     76.3303467

两秒后

Latitude  -     10.0135001
Longitude -     76.3303451

两秒后

Latitude  -     10.0135011  
Longitude -     76.3303466

谁能告诉我为什么我会这样..
我们如何才能获得给定点的唯一纬度和经度。
我的代码如下

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AndroidGPSTrackingActivity extends Activity {

    Button btnShowLocation, stop;
    double latitude, longitude;
    int is = 0;
    ScheduledExecutorService scheduler;
    // GPSTracker class
    GPSTracker gps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
        stop = (Button) findViewById(R.id.stop);
        // show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                // create class object
                scheduler = Executors.newSingleThreadScheduledExecutor();
                scheduler.scheduleAtFixedRate(new Runnable() {

                    public void run() {
                        System.out.println("sss");
                        // Log.i("hello", "world");
                        is++;
                        Log.i("hello", "" + is);
                        runOnUiThread(new Runnable() {

                            public void run() {
                                gps = new GPSTracker(
                                        AndroidGPSTrackingActivity.this);
                                latitude = gps.getLatitude();
                                longitude = gps.getLongitude();
                                Toast.makeText(
                                        getApplicationContext(),
                                        "Your Location is - \nLat: " + latitude
                                                + "\nLong: " + longitude,
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }, 2, 2, TimeUnit.SECONDS);
            }
        });
        stop.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                scheduler.shutdown();
                onDestroy();
            }
        });
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service destroyed...", Toast.LENGTH_LONG).show();
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }
}

【问题讨论】:

  • 这是一个封闭的题外话stackoverflow.com/questions/1567443/how-accurate-is-android-gps,其中包含大量有关 GPS 精度的信息
  • 先生,如果我们使用 gps 坐标来跟踪谷歌地图中的车辆......我们如何知道车辆是否处于停止位置
  • 好吧,简短的回答 - 我们实际上没有 :) 使用 gps 坐标我们只能以适当的精度近似位置..
  • 你计算过这些纬度/经度之间的距离吗?如果您正在跟踪车辆,在几秒钟内,纬度/经度之间的差异可能至少超过几米。

标签: android gps latitude-longitude


【解决方案1】:

坐标不指向同一个位置,如果你放大到足够大,你会发现它们相差几米。
要检测在一个位置静止不动,您可以计算到最后一个位置的距离,只有当它超过阈值时才使用该位置,或者使用 GPS 位置的速度属性。

【讨论】:

  • 所以解决方案是找出携带该设备的人是否在某一点保持恒定而没有任何移动....例如,携带该设备的人在车上停在一个位置并在那里停留一段时间暂时
  • 您可以同时使用两种解决方案:到最后一个好位置的距离,或速度
【解决方案2】:

GPS 不准确。使用普通手机的硬件,它可以在任何时候达到大约 10 米左右的距离。所以连续的多个读数不会有相同的确切位置。

网络提供商更糟糕 - 它可能有高达 1 公里的不准确。

【讨论】:

  • 实际上我正在使用这些 gps 坐标来跟踪车辆......所以我们如何知道车辆是否停止......例如,如果我们得到相同的纬度和经度对于某个时间点的给定点……我们可以说车辆停止了……
  • 祝你好运。我只是花了几周时间为我写的一个应用程序调整这种类型的算法(你可以通过我的网站找到它),你永远不会得到 100% 的答案。你最多会想出一个启发式方法。但是,是的,您将不得不设置速度阈值。然后,如果你加上一个事实,这个人可以把手机放在口袋里离开汽车,而且他仍然在移动,那就很有趣了。或者在车流中停下,几分钟内一动不动……
  • 先生,如何计算两个坐标之间的距离......通过它我们可以知道那个人是在恒定还是在移动......
  • 我可以帮忙。位置对象具有距离函数。它会计算出点之间的距离(以米为单位)。
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多