Android使用位置对象获取距离

Android使用位置对象获取距离,android,geolocation,gps,location,Android,Geolocation,Gps,Location,我想采集GPS返回的一系列坐标样本,计算它们之间的(直线)距离,以便通过Excel绘制距离图。我看到了Location类的distanceBetween和distanceTo方法,但我担心它们不会返回直线距离 有没有人知道这些方法返回的距离是多少,或者是否有任何方法可以根据Location类返回的纬度/经度值计算直线距离?如果您希望自己进行计算,谷歌搜索将提供解决方案。例如,哈弗森方法: var R = 6371; // km var dLat = (lat2-lat1).toRad(); va

我想采集GPS返回的一系列坐标样本,计算它们之间的(直线)距离,以便通过Excel绘制距离图。我看到了
Location
类的
distanceBetween
distanceTo
方法,但我担心它们不会返回直线距离


有没有人知道这些方法返回的距离是多少,或者是否有任何方法可以根据
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;
据报道。请注意,这是一条直线,不考虑标高不规则等因素。


提供Haversine方法的Java实现。

source=起始位置

目的地=当前位置

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

来源。到(目的地)的距离

这是我的代码

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

不返回直线距离是什么意思?地球的表面是弯曲的,两个接近的点之间的距离应该几乎和一条直线一样。我是不是说它们很近?@432209地球仍然会有一个弯曲的表面。下面的答案考虑了曲率。谢谢,如果我不能得到内置方法的澄清,我会尝试一下。distanceTo()的文档说明它是使用WGS84椭球体定义的。OP需要直线距离,所以这不是一个有效的答案。