处理不精确,紧张的gps信号

时间:2014-07-20 20:56:59

标签: c# android gps xamarin xamarin.android

我的目标是使用GPS测量我用手机移动的距离。我的问题是,结果不精确。我使用以下代码计算距离:

public double getDistance(GeoCoordinate p1, GeoCoordinate p2)
{
    double d = p1.Latitude * 0.017453292519943295;
    double num3 = p1.Longitude * 0.017453292519943295;
    double num4 = p2.Latitude * 0.017453292519943295;
    double num5 = p2.Longitude * 0.017453292519943295;
    double num6 = num5 - num3;
    double num7 = num4 - d;
    double num8 = Math.Pow(Math.Sin(num7 / 2.0), 2.0) + ((Math.Cos(d) * Math.Cos(num4)) * Math.Pow(Math.Sin(num6 / 2.0), 2.0));
    double num9 = 2.0 * Math.Atan2(Math.Sqrt(num8), Math.Sqrt(1.0 - num8));
    return (6376500.0 * num9);
}

这是我的OnLocationChanged实施:

bool begin = true;

public void OnLocationChanged(Location location)
{

    _aktuellerOrt = location;
    //aktuellerOrt.Speed is always 0, so I cannot use that.
    if (_aktuellerOrt == null)
    {
        //message
    }
    else
    {

        if (_aktuellerOrt.Accuracy > 70) //I found values around 130 to be more or less good
        {
            _locationText.Text = String.Format("{0}, {1}", _aktuellerOrt.Latitude, _aktuellerOrt.Longitude);
            GeoJetzt = new GeoCoordinate();
            GeoJetzt.Latitude = _aktuellerOrt.Latitude;
            GeoJetzt.Longitude = _aktuellerOrt.Longitude;
            if (beginn)
            {
                GeoVorher = new GeoCoordinate();
                GeoVorher.Latitude = _aktuellerOrt.Latitude;
                GeoVorher.Longitude = _aktuellerOrt.Longitude;
                beginn = false;
            }
            else
            {
                double abstand = getDistance(GeoVorher, GeoJetzt);
                weg += abstand;
                if (weg >= 1)
                    _distanzText.Text = weg + " kilometers";
                else
                    _distanzText.Text = (weg * 1000) + " meters";
                _distanzText.Text += " (" + abstand + ", " + _aktuellerOrt.Accuracy + ")";
                GeoVorher = new GeoCoordinate();
                GeoVorher.Latitude = _aktuellerOrt.Latitude;
                GeoVorher.Longitude = _aktuellerOrt.Longitude;
            }
        }
        else
            _locationText.Text = "Too coarse, now " + _aktuellerOrt.Accuracy + ".";
    }
}

问题是,我在不移动手机的情况下获得了abstand的公里范围内的值。

不精确信号的最佳做法是什么?我的目标是在慢跑或跑步时测量距离,所以10 - 16 km / h。

0 个答案:

没有答案