2011-03-15 34 views
3

我想获取由GPS返回的一系列坐标样本并计算它们之间的(直线)距离,以便通过Excel绘制距离。我看到Location类的方法distanceBetweendistanceTo,但我担心这些不会返回直线距离。Android使用位置对象获取距离

有人知道这些方法返回的距离是多少,或者有什么方法根据Location类返回的纬度/经度值计算直线距离?

+0

你说的不返回的直线距离是什么意思?地球表面*是弯曲的,并且两个接近点之间的距离应该几乎与直线一样好。 – Reno 2011-03-15 17:11:38

+0

我说他们在一起吗? – user432209 2011-03-15 17:22:22

+0

@ 432209地球仍然有曲面。下面的答案考虑了曲率。 – Reno 2011-03-15 17:42:28

回答

2

谷歌搜索将提供解决方案,如果你不知何故想自己做这个计算。例如,半正矢方法:

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。请注意,这是一条直线,并且不占海拔违规行为等

+0

谢谢,如果我无法澄清内置方法,我会试一试。 – user432209 2011-03-15 17:27:53

-1

source =起始位置;

destination =当前位置;

/*此方法将获取两个地理点之间的距离。 */

source.distanceTo(destination);

+0

distanceTo()的文档声明它使用WGS84椭球定义。 OP需要直线距离,所以这不是一个有效的答案。 – Sandy 2014-09-25 15:35:16

0

这里我的代码

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()));