按距离到当前GPS位置对GPS位置的集合进行排序

时间:2015-05-10 20:57:19

标签: java arraylist collections gps

给定具有经度和纬度的Location对象集合,如何根据每个Locations与当前Location对象的距离对此列表进行排序?

我有一个方法可以计算两个位置对象之间的距离(米)。

此处Collections.Sort()是否合适?

2 个答案:

答案 0 :(得分:2)

是的,你可以写一个比较器:

static final Location origin;

public class LocationComparator implements Comparator {
  @Override
  public int compare(Location o1, Location o2) {
    return Doubles.compare(distance(o1.lat, origin.lat, o1.lon, origin.lon, 0, 0),
                           distance(o2.lat, origin.lat, o2.lon, origin.lon, 0, 0));
  }
}

距离如this answer中所定义。这比较两个点基于它们与原点的距离。

然后你可以通过调用来排序:

Collections.sort(latLonCollection, new LocationComparator());

答案 1 :(得分:1)

这是对Benjy答案的更新,除了使用Location类的内置函数。它被隔离,包括原点作为构造函数的一部分。

public class LocationComparator implements Comparator<Location>
{
    Location origin;
    LocationComparator(Location origin){
        this.origin= origin;
    }
    public int compare(Location left, Location right) {
        return Float.compare(origin.distanceTo(left), origin.distanceTo(right));
    }
}

使用如下

Collections.sort(latLonCollection, new LocationComparator(originLocation));