在Android客户端上实现按距离排序,需要使用javase数组工具类和集合工具类中提供的sort方法,sort就是使用Comparator接口来处理排序。

Arrays.sort(T[],Comparator<? super T> c);Collections.sort(List list,Comparator<? super T> c);
// 自定义比较器:    private static class SbLocationComparator implements Comparator {        private LatLng pCenter;        SbLocationComparator(LatLng pCenter) {            this.pCenter = pCenter;        }        public int compare(Object object1, Object object2) {// 实现接口中的方法            SbLocation p1 = (SbLocation) object1;            int distance1 = (int) DistanceUtil.getDistance2(pCenter.latitude, pCenter.longitude,                    Double.valueOf(p1.getLatitude()),                    Double.valueOf(p1.getLongitude()));            SbLocation p2 = (SbLocation) object2;            int distance2 = (int) DistanceUtil.getDistance2(pCenter.latitude, pCenter.longitude,                    Double.valueOf(p2.getLatitude()),                    Double.valueOf(p2.getLongitude()));            //L.d("compare:+distance1=>" + distance1 + " distance2=>" + distance2);            return distance1 - distance2;        }    }
import java.text.DecimalFormat;public class DistanceUtil {    // 地球平均半径    private static final double EARTH_RADIUS = 6378137;    // 把经纬度转为度(°)    private static double rad(double d) {        return d * Math.PI / 180.0;    }    /**     * 根据两点间经纬度坐标(double值),计算两点间距离,单位:千米     * @author ershuai     * @param lng1     * @param lat1     * @param lng2     * @param lat2     * @return     */    public static double getDistance(double lng1, double lat1, double lng2, double lat2) {        double radLat1 = rad(lat1);        double radLat2 = rad(lat2);        double a = radLat1 - radLat2;        double b = rad(lng1) - rad(lng2);        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));        s = s * EARTH_RADIUS;        s = s / 1000;        DecimalFormat df = new DecimalFormat("#.00");        s = Double.parseDouble(df.format(s));        return s;    }/**     * 根据两点间经纬度坐标(double值),计算两点间距离,单位:千米     * @author ershuai     * @param pCenter_latitude     * @param pCenter_longitude     * @param latitude     * @param longitude     * @return     */    public static double getDistance2(double pCenter_latitude,double pCenter_longitude,double latitude,double longitude) {        double radLat1 = rad(pCenter_latitude);        double radLat2 = rad(latitude);        double a = radLat1 - radLat2;        double b = rad(pCenter_longitude) - rad(longitude);        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));        s = s * EARTH_RADIUS;        return s;    }    public static void main(String[] args) {        double distance1 = getDistance(104.046115, 30.6030110000, 104.074666, 30.611842);        System.out.println("Distance is: " + distance1 + " km");    }}

LatLng pCenter//输入中心点
Collections.sort(trandomList, new SbLocationComparator(pCenter));

更多相关文章

  1. 计算经纬度间的距离公里数
  2. RecyclerView GridLayoutManager 等分间距
  3. Android获取定位权限,获取设备所在的经纬度
  4. Android集成百度定位以及导航详解
  5. Android(安卓)手机app三种方法获取定位地址(自带API,外接SDK,获取外
  6. 在android平板上取位置和天气的实现方式
  7. Android通过原生APi获取所在位置的经纬度
  8. android 下使用GPS 无法获取经纬度的解决方法
  9. Android(安卓)获取当前地理位置信息

随机推荐

  1. Application Fundamentals
  2. Android定制RadioButton样式三种实现方法
  3. Android快速实现发送邮件
  4. Unity加入Android广告小结
  5. ActivityManagerService解读之Activity启
  6. Android(安卓)图形系统剖析
  7. Android(安卓)ContentProvider、ContentR
  8. Android(安卓)Dialog
  9. Android中程序的停止状态详细介绍
  10. 谷歌强推 AndroidX ,你还在应Support?