我有一个(非常长的)我在地图中显示的点列表。我需要计算每个点到用户输入点的距离,并从最近到最远对列表进行排序。
现在我正在这样做:
private List<Point> sortedPointList(LatLng ll, List<Point> pointList)
SparseArray<Double> distances = new SparseArray<Double>();
for (Point ll : pointList){
double distance = calcDistance(ll.getLatLng(), point);
distances.put(ll.getId(), distance);
}
Collections.sort(pointList, new Comparator<Point>(){
@Override
public int compare(final Tramo lhs, final Tramo rhs) {
return distances.get(lhs.getId()).compareTo(distances.get(rhs.getId()));
}
});
return pointList
}
private double calcDistance(LatLng ll1, LatLng ll2){
final double lat1 = ll1.latitude;
final double lon1 = ll1.longitude;
final double lat2 = ll2.latitude;
final double lon2 = ll2.longitude;
final double lat = lat2-lat1;
final double lon = lon2-lon1;
final double squareLat = lat*lat;
final double squareLon = lon*lon;
final double squareDistance = squareLat+squareLon;
return squareDistance;
}
calcDistance
实际上返回两点之间实际距离的平方,因为我认为比较平方会得到与比较实际值相同的结果,而且它要快得多,因为我不需要平方根。
但是,它仍然很慢(这是一个很长的列表),我真的很感激一些加速这个过程的想法。我在排序之前预先计算了距离,所以我不会多次计算每个距离,但我想不出任何其他改进。有什么我想念的吗?