0

我在我的应用程序中获得了两个 GEO 位置,我必须计算它们之间的距离,在距离计算之后,我必须将该结果与在我的情况下定义的阈值进行比较,我50 meters将如何在浮点中定义该阈值。此外,目前我的 android fone 位于同一位置,但我总是在间隔超过 50 米后确定我的 2 个两个地理位置之间的计算距离。这怎么可能?我将 50 米的阈值视为:

private static final float DISTANCE_CHANGE_METERS = 50.0f; //50 meters

我正在通过在 StackOverflow 上找到的以下公式计算距离:

public static float distFrom(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLng = Math.toRadians(lng2 - lng1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double dist = earthRadius * c;

    int meterConversion = 1609;

    return new Float(dist * meterConversion).floatValue();
}

请在这方面帮助我。谢谢!

4

2 回答 2

0

你能不能这样做:

if (distFrom(lat1,lng1,lat2,lng2) > DISTANCE_CHANGE_METERS)
{
    //greater than threshhold
}
于 2013-05-28T06:58:25.747 回答
0

Currently my android phone is at the same location, but I always get the calculated distance between my 2 two geolocations determined after an interval to be more than 50 meters. How is that possible?

这实际上取决于您如何将纬度和经度传递给distFrom函数。只是提醒您,有一种更简单的方法可以计算距离。
您可以使用android API中的distanceTo()函数来计算两个地方之间的距离,如下所示:Location

Location locationA = new Location("point A");
locationA.setLatitude(latA); // co-ordinates in double
locationA.setLongitude(lngA);

Location locationB = new Location("point B");
locationB.setLatitude(latB);
locationB.setLongitude(lngB);

float distance = locationA.distanceTo(locationB);

如果在使用它之后你的距离也大于 50 米,那么你提供的坐标不是那么准确。它非常好,因为它很难以低于 50 米的精度获得精度。如果您将互联网与 GPS 一起使用,那将是最准确的。如果你看到这里,即使你用ACCURACY_HIGH作为一个标准来选择一个Location Provider,它提供小于 100 米的精度。它可以精确到 100、70 甚至 50 米。因此,即使是最准确的选项也不能保证提供极高的准确性。如果您使用 GPS/网络提供商获取位置,那么您的情况很有可能。使用 `Network Provider1 获取位置也不是那么准确,因为它可以在不同场合捕捉到 2 个网络塔的信号,这些信号在物理上可能相距甚远。

希望它在一定程度上有所帮助并澄清这一点。它的问题是您的位置提供程序的准确性。

于 2013-05-28T07:14:00.863 回答