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

Sort Collection of GPS Locations by distance to current GPS Location

给定一组具有经度和纬度的 Location 对象,我如何根据每个 Locations 到当前 Location 对象的距离对该列表进行排序?

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

Collections.Sort()在这里合适吗?

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

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

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

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