mybatisplus 给个经纬度判断距离别的经纬度多少米

本文介绍如何使用MyBatisPlus结合地理坐标(经纬度)来计算两个位置之间的距离,适用于需要根据地理位置进行筛选或排序的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public Map<String, Object> getPharmacyByMe(double longitude, double latitude) {
Map<String, Object> mapTotal = new HashMap<>();
List<Markers> list = new ArrayList<>();
try {
    String log=""+longitude;
    String lat1=""+latitude;
    String addCity = JingWeiUtil.getAddCity(lat1, log);
    List<Pharmacy> sList = pharmacyMapper.selectList(new EntityWrapper<Pharmacy>()(判断逻辑) );
    List<Map<String, Object>> mapList = new ArrayList<>();
    for (Pharmacy sc : sList) {
        Double lat = Double.parseDouble(sc.getLatitude());
        Double lng = Double.parseDouble(sc.getLongitude());
        Double ju = MapUtil.getDistance(lat, lng, latitude, longitude);
        Map<String, Object> map = new HashMap<>();
        map.put("id", sc.getPharmacyId());
        map.put("name", sc.getPharmacyName());
        map.put("address", sc.getAddress());
        map.put("ju", ju);
        map.put("mobile", sc.getPharmacyPhone());
        map.put("dan", "");
        mapList.add(map);
        Callout out = new Callout();
        out.setContent(sc.getPharmacyName());
        Markers ma = new Markers();
        ma.setCallout(out);
        ma.setLatitude(lat);
        ma.setLongitude(lng);
        ma.setTitle(sc.getPharmacyName());
        ma.setId(sc.getPharmacyId());
        list.add(ma);
    }
    Collections.sort(mapList, new Comparator<Map<String, Object>>() {

        public int compare(Map<String, Object> o1, Map<String, Object> o2) {

            int map1value = (int) Double.parseDouble(o1.get("ju").toString()) * 100;
            int map2value = (int) Double.parseDouble(o2.get("ju").toString()) * 100;
            return map1value - map2value;
        }
    });
    List<Map<String, Object>> mapList1 = new ArrayList<>();
    for(Map<String, Object> ma:mapList) {
        double ju=Double.parseDouble(ma.get("ju").toString());
        DecimalFormat df   = new DecimalFormat("######0.00");
        DecimalFormat    df1   = new DecimalFormat("######0");
        String juli="";
        String dan="";
        if(ju>1000) {
            ju=ju/1000;
            juli=df.format(ju);
            dan="km";
        }else {
            juli=df1.format(ju);
            dan="m";
        }
        ma.put("ju", juli);
        ma.put("dan", dan);
        mapList1.add(ma);
    }

    mapTotal.put("mapList", mapList1);
    mapTotal.put("marList", list);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值