【问题标题】:How to calculate distance between set of Latitudes and Longitudes in android?如何计算android中一组纬度和经度之间的距离?
【发布时间】:2015-08-18 10:09:39
【问题描述】:

我正在尝试在 LatLng 点之间计算 distance。计算两个坐标很容易。我必须计算两个以上LatLngs 之间的距离,并计算一组 LatLngs 的累积距离。我根据以下代码计算了两点之间的距离。

tvDistance=(TextView)findViewById(R.id.textView4);
    Location loc1=new Location("");
    loc1.setLatitude(11.2805);
    loc1.setLongitude(77.5989);

    Location loc2=new Location("");
    loc2.setLatitude(11.2801);
    loc2.setLongitude(77.5976);

    DecimalFormat format=new DecimalFormat("#.##");
    double distanceInMeters = loc1.distanceTo(loc2)/1000;
    tvDistance.setText(format.format(distanceInMeters) + " Km's");

现在我有例如 16 个LatLng 点。首先是出发地,最后是停止地。我在ArrayList 中有LatLngs。尝试了以下代码。但它导致ArrayIndexOutOfBoundException。 有谁知道方法请分享给我。谢谢。

    private void calculateDistance() {

    for (int i=0;i<coordList.size();i++){
        LatLng l1=coordList.get(i);
        double lat1=l1.latitude;
        double lng1=l1.longitude;
        Location location1=new Location("");
        location1.setLatitude(lat1);
        location1.setLongitude(lng1);

        LatLng l2=coordList.get(i+1);
        double lat2=l2.latitude;
        double lng2=l2.longitude;
        Location location2=new Location("");
        location2.setLatitude(lat2);
        location2.setLongitude(lng2);

        DecimalFormat format=new DecimalFormat("#.##");
        double distance=location1.distanceTo(location2)/1000;
        Toast.makeText(MainPage.this,format.format(distance) + " Km's",Toast.LENGTH_SHORT).show();
    }
}

【问题讨论】:

  • 这是一个有趣的寻找循环。
  • 这一行为 (int i=0;i

标签: android gps location distance latitude-longitude


【解决方案1】:

【讨论】:

  • 这是最有效和最准确的计算。
  • 不,它不是最准确的,但足够了。它使用haversine公式。 Vicencies 公式适用于椭球体并且更准确,但需要更多的计算能力。
  • 这两种方法在哪里定义 arcHav(havDistance(lat1, lat2, lng1 - lng2))。 archHav 和 havDistance?
【解决方案2】:

线 LatLng l2=coordList.get(i+1); 导致异常。 乔恩

【讨论】:

    【解决方案3】:

    ->如果你有一组纬度和经度,它很容易计算距离

    ArrayList<RideRoutes> ride_route_list = new ArrayList<>();
    //suppose "ride_route_list" contains collections of Latitudes and longitudes
    
    String distance_covered_str;
    double total_meters = 0.0;
    
    for(int i = 0; i < (ride_route_list.size() - 1); i++){
        double previous_latitude = Double.parseDouble(ride_route_list.get(i).getRout_latitude());
        double previous_longitude = Double.parseDouble(ride_route_list.get(i).getRout_longitude());
    
        double updated_latitude = Double.parseDouble(ride_route_list.get(i+1).getRout_latitude());
        double updated_longitude = Double.parseDouble(ride_route_list.get(i+1).getRout_longitude());
    
        Location start_latlng = new Location("location_previous");
        start_latlng.setLatitude(previous_latitude);
        start_latlng.setLongitude(previous_longitude);
    
        Location end_latlng = new Location("location_updated");
        end_latlng.setLatitude(updated_latitude);
        end_latlng.setLongitude(updated_longitude);
    
        total_meters += start_latlng.distanceTo(end_latlng);
    }
    
    
    double distance_covered_km =  total_meters / 1000;
    distance_covered_str = String.format(Locale.getDefault(), "%.2f", distance_covered_km);
    

    注意: ->这里ride_route_list 是一个ArrayList,其中包含经纬度列表

    RideRoutes 类结构:

    public class RideRoutes {
    private String rout_latitude;
    private String rout_longitude;
    
    public RideRoutes(String rout_latitude, String rout_longitude) {
        this.rout_latitude = rout_latitude;
        this.rout_longitude = rout_longitude;
    }
    
    public String getRout_latitude() {
        return rout_latitude;
    }
    
    public void setRout_latitude(String rout_latitude) {
        this.rout_latitude = rout_latitude;
    }
    
    public String getRout_longitude() {
        return rout_longitude;
    }
    
    public void setRout_longitude(String rout_longitude) {
        this.rout_longitude = rout_longitude;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2012-10-13
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2021-09-05
      • 2018-06-11
      相关资源
      最近更新 更多