2013-05-28 106 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

你能提供一套你正在使用的座標嗎? –

相關問題