Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按到当前GPS位置的距离对GPS位置集合进行排序_Java_Arraylist_Collections_Gps - Fatal编程技术网

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

Java 按到当前GPS位置的距离对GPS位置集合进行排序,java,arraylist,collections,gps,Java,Arraylist,Collections,Gps,给定一组具有经度和纬度的位置对象,如何根据每个位置到当前位置对象的距离对该列表进行排序 我有一种方法可以计算两个定位对象之间的距离(以米为单位) Collections.Sort()在这里合适吗?是的,您可以编写一个比较器: static final Location origin; public class LocationComparator implements Comparator { @Override public int compare(Location o1, Loca

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

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


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));
  }
}
其中距离如中所定义。这将根据两个点与原点的距离进行比较

然后,您可以通过调用以下命令进行排序:

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

是的,您可以编写比较器:

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));
  }
}
其中距离如中所定义。这将根据两个点与原点的距离进行比较

然后,您可以通过调用以下命令进行排序:

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

这是对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));
    }
}

这是对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));
    }
}

你能简单地解释一下你在你的
compare()
中做了什么吗?我加了一句话。基本上是根据两点与原点的距离来比较两点。哦,很抱歉错过了
distance()
。非常感谢。我喜欢这种方法,因为我不必遍历设置每个位置原点的列表。它只是在比较器中设置的。简单。你能简单地解释一下你在你的
compare()
中做了什么吗。我加了一句话。基本上是根据两点与原点的距离来比较两点。哦,很抱歉错过了
distance()
。非常感谢。我喜欢这种方法,因为我不必遍历设置每个位置原点的列表。它只是在比较器中设置的。简单。