按到当前 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));
给定一组具有经度和纬度的 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));