2013-05-28 66 views
0

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

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

,我通过以下公式我在计算器上计算发现距离:

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

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功能。只是为了提醒您,有一种更简单的方法来计算距离。
可以使用Location计算这样两个地方之间的距离只使用distanceTo()功能android API

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,这将是最准确的。如果您看到here,即使您使用ACCURACY_HIGH作为选择Location Provider的标准,它也会提供小于100米的精度。它可以精确到100,70甚至50米。所以即使是最准确的选项也不能保证提供极高的准确性。如果您使用GPS /网络提供商获取位置,那么您的情况非常有可能。使用Network Provider1获取位置也不是很准确,因为它可以在不同的场合捕捉到两个网络塔的信号,这些信号在物理上可以很好地分开。

希望它在一定程度上有所帮助和清楚。它对您的定位服务提供商的准确性存在问题。

0

你能不能做:

if (distFrom(lat1,lng1,lat2,lng2) > DISTANCE_CHANGE_METERS) 
{ 
    //greater than threshhold 
} 
+0

我这样做......但我很困惑,我为什么总是距离大于50米,因为我从来没有从位置移动一英寸我以前在... ???? –

+0

你能提供一套你正在使用的坐标吗? –

相关问题