【问题标题】:Android getting the distance using a Location objectAndroid 使用 Location 对象获取距离
【发布时间】:2011-03-15 16:46:43
【问题描述】:

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

有谁知道这些方法返回什么距离,或者是否有任何方法可以根据Location 类返回的纬度/经度值计算直线距离?

【问题讨论】:

  • 不返回直线距离是什么意思?地球表面弯曲的,两个接近点之间的距离应该几乎和直线一样好。
  • 我有说他们靠得很近吗?
  • @432209 地球仍然会有一个曲面。下面的答案考虑了曲率。

标签: android geolocation gps location


【解决方案1】:

如果您希望自己进行此计算,Google 搜索将提供解决方案。例如 Haversine 方法:

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。请注意,这是一条直线,不考虑海拔不规则等。

【讨论】:

  • 谢谢,如果我无法澄清内置方法,我会尝试一下。
【解决方案2】:
【解决方案3】:

这是我的代码

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

【讨论】:

    【解决方案4】:

    来源 = 起始位置;

    目的地 = 当前位置;

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

    source.distanceTo(目的地);

    【讨论】:

    • distanceTo() 的文档说明它是使用 WGS84 椭球定义的。 OP 需要直线距离,所以这不是一个有效的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多