我想獲取由GPS返回的一系列座標樣本並計算它們之間的(直線)距離,以便通過Excel繪製距離。我看到Location
類的方法distanceBetween
和distanceTo
,但我擔心這些不會返回直線距離。Android使用位置對象獲取距離
有人知道這些方法返回的距離是多少,或者有什麼方法根據Location
類返回的緯度/經度值計算直線距離?
我想獲取由GPS返回的一系列座標樣本並計算它們之間的(直線)距離,以便通過Excel繪製距離。我看到Location
類的方法distanceBetween
和distanceTo
,但我擔心這些不會返回直線距離。Android使用位置對象獲取距離
有人知道這些方法返回的距離是多少,或者有什麼方法根據Location
類返回的緯度/經度值計算直線距離?
谷歌搜索將提供解決方案,如果你不知何故想自己做這個計算。例如,半正矢方法:
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
報道here。請注意,這是一條直線,並且不佔海拔違規行爲等
謝謝,如果我無法澄清內置方法,我會試一試。 – user432209 2011-03-15 17:27:53
source =起始位置;
destination =當前位置;
/*此方法將獲取兩個地理點之間的距離。 */
source.distanceTo(destination);
distanceTo()的文檔聲明它使用WGS84橢球定義。 OP需要直線距離,所以這不是一個有效的答案。 – Sandy 2014-09-25 15:35:16
這裏我的代碼
float[] result=new float[1];
if(cordenatalar.size()>1)
{
LatLong add_kor=(LatLong)cordenatalar.get(cordenatalar.size()-1);
Location.distanceBetween(add_kor.getLat(), add_kor.getLongg(), location.getLatitude(), location.getLongitude(), result);
kilometr+=result[0];
//KMTextView.setText(String.valueOf(kilometr));
}
KMTextView.setText("sss: "+String.valueOf(cordenatalar.size()+" res: "+kilometr+" metr"));
cordenatalar.add(new LatLong(location.getLatitude(), location.getLongitude()));
你說的不返回的直線距離是什麼意思?地球表面*是彎曲的,並且兩個接近點之間的距離應該幾乎與直線一樣好。 – Reno 2011-03-15 17:11:38
我說他們在一起嗎? – user432209 2011-03-15 17:22:22
@ 432209地球仍然有曲面。下面的答案考慮了曲率。 – Reno 2011-03-15 17:42:28