我在我的应用程序中获得两个GEO位置,我必须计算它们之间的距离,并且在距离计算后我必须将该结果与我所定义的50 meters
中定义的阈值进行比较,我将如何定义浮动中的那个阈值。此外,目前我的android fone位于同一位置,但我总是得到我的2两个地理位置之间的计算距离确定间隔后超过50米。这怎么可能?我正在采取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();
}
请在这方面帮助我。谢谢!
答案 0 :(得分:0)
你能做到:
if (distFrom(lat1,lng1,lat2,lng2) > DISTANCE_CHANGE_METERS)
{
//greater than threshhold
}
答案 1 :(得分: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
函数。只是为了提醒您,有一种更简单的方法来计算距离
您可以使用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);
功能来计算两个地点之间的距离,如下所示:
ACCURACY_HIGH
如果在使用它之后你的距离也超过50米,那么你所提供的坐标并不准确。它非常精细,因为它精确度低,精度低于50米。如果您使用互联网和GPS,这将是最准确的。如果您看到android API,即使您使用Location Provider
作为选择{{1}}的条件,它也会提供小于100米的准确度。它可以精确到100,70甚至50米。因此,即使是最准确的选项也无法保证提供极高的准确性。如果您使用GPS /网络提供商获取位置,那么您的情况非常可能。使用`Network Provider1获取位置也不准确,因为它可以在不同的场合捕获2个网络塔的信号,这可能在物理上很好地分开。
希望它在某种程度上有助于并明确这一点。这是您的位置提供商准确性的问题。