【问题标题】:Calculate the distance between two positions Android Studio计算两个位置之间的距离 Android Studio
【发布时间】:2016-02-27 12:58:49
【问题描述】:

我正在构建一个跟踪我的跑步和步行的应用程序,但我在计算总距离时遇到了一些麻烦。

这是我获取纬度和经度值以及计算距离的代码的一部分。

public class SportsActicity {

protected Integer userId;
protected ArrayList<Position> route = new ArrayList<Position>();

public SportsActicity() {
    this.userId = 1;
}

public void track(Double latitude, Double longitude, Double altitude, float speed, long chron) {
    Date currentDate = new Date();
    Position currentPosition = new Position(currentDate, latitude, longitude, altitude, speed, chron);
    route.add(currentPosition);
    // Float velocidade =  (locat.getSpeed()*3600)/1000;
}

public double getTotalDistance() {
    double distance = 0;
    if(route.size() > 1) {
        for (Integer i = 0; i < route.size() - 1; i++) {
            distance += test(route.get(i).latitude, route.get(i).longitude, route.get(i + 1).latitude, route.get(i + 1).longitude);
        }
    }
    return distance;
}

public Float test(Double lat1, Double lon1, Double lat2, Double lon2) {
    double earthRadius = 6371;
    double latDiff = Math.toRadians(lat2-lat1);
    double lngDiff = Math.toRadians(lon2-lon1);
    double a = Math.sin(latDiff /2) * Math.sin(latDiff /2) +           
               Math.cos(Math.toRadians(lat1))* 
               Math.cos(Math.toRadians(lat2))* Math.sin(lngDiff /2) * 
               Math.sin(lngDiff /2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double distance = earthRadius * c;

    int meterConversion = 1609;

    return new Float(distance * meterConversion).floatValue();
}

如果我不动,总距离总是在增加,大约 10(不知道它是否以米为单位),并且我得到的值看起来不正确。

【问题讨论】:

    标签: android android-studio getdistance


    【解决方案1】:

    来自谷歌官方仓库link

    SphericalUtil

    MathUtil

    用法

     double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00));
    

    上述方法将返回两个 LatLng 之间的距离,以米为单位。 或者试试这个

    private String getDistance(LatLng my_latlong,LatLng frnd_latlong){
     Location l1=new Location("One");
     l1.setLatitude(my_latlong.latitude);
     l1.setLongitude(my_latlong.longitude);
    
     Location l2=new Location("Two");
     l2.setLatitude(frnd_latlong.latitude);
     l2.setLongitude(frnd_latlong.longitude);
    
     float distance=l1.distanceTo(l2);
     String dist=distance+" M";
    
      if(distance>1000.0f)
       {
         distance=distance/1000.0f;
         dist=distance+" KM";
       }
    
     return dist;
    
    }
    

    或者你可以看看link

    【讨论】:

    • 谢谢。我只是忘了GPS有错误。我只是把我正在驾驶的距离和汽车的价值相匹配(100m 错误)。
    【解决方案2】:

    您可以使用Location's 静态方法distanceBetween 而不是整个test 方法。

    int[] results = new int[1];
    Location.distanceBetween(lat1, lon1, lat2, lon2, results);
    int distance = results[0];
    

    【讨论】:

    • i.stack.imgur.com/ssjIY.png 我照你说的做了,但手机站在窗边时我仍然得到“愚蠢”的值。距离值是 0-8-11,坐标是你在图像中可以看到的 3。问候
    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 2011-12-24
    • 2018-09-21
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多