浏览代码

大改image/filter 若果运行没问题,删除多余代码

wuweihao 4 年之前
父节点
当前提交
4436c10264

+ 11 - 11
laser/src/main/java/com/fdkankan/indoor/base/convert/ModifyCloud.java

@@ -19,18 +19,18 @@ public class ModifyCloud {
 		String str = FileUtil.readStringFile(path);
 		JSONObject json = JSONObject.fromObject(str);
 		
-//		String[] pointAttributes = {
-//		                            "POSITION_CARTESIAN",
-//		                            "COLOR_PACKED",
-//		                            "NORMAL_OCT16"
-//									};
 		String[] pointAttributes = {
-				"POSITION_CARTESIAN",
-				"COLOR_PACKED",
-				"NORMAL_OCT16",
-				"INTENSITY",
-				"CLASSIFICATION"
-		};
+		                            "POSITION_CARTESIAN",
+		                            "COLOR_PACKED",
+		                            "NORMAL_OCT16"
+									};
+//		String[] pointAttributes = {
+//				"POSITION_CARTESIAN",
+//				"COLOR_PACKED",
+//				"NORMAL_OCT16",
+//				"INTENSITY",
+//				"CLASSIFICATION"
+//		};
 		json.put("pointAttributes", pointAttributes);
 		return json;
 	}

+ 24 - 4
laser/src/main/java/com/fdkankan/indoor/core/controller/FilterController.java

@@ -2,6 +2,7 @@ package com.fdkankan.indoor.core.controller;
 
 import com.fdkankan.indoor.base.aop.WebControllerLog;
 import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.dto.FilterQueryDto;
 import com.fdkankan.indoor.core.entity.dto.JsonDataDetailDto;
 import com.fdkankan.indoor.core.entity.dto.QueryJsonDataOne;
 import com.fdkankan.indoor.core.entity.dto.QueryJsonDataTwo;
@@ -46,7 +47,27 @@ public class FilterController {
 
     /**
      * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
-     * http://127.0.0.1:9294/indoor/test1/api/filter/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
+     * @param code
+     * @param queryJsonDataOne
+     * @param queryJsonDataTwo
+     * @param jsonDataDetailDto
+     * @return
+     */
+//    @WebControllerLog(description = "filter查询接口")
+//    @ApiOperation(value = "filter查询接口")
+//    @GetMapping("indoor/{code}/api/images/filter")
+//    public Object filter(@PathVariable String code,
+//                                 QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
+////        Result result = filterService.query(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
+//        Result result = filterService.query_5(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
+//
+//        return result.getData();
+//    }
+
+    /**
+     * http://127.0.0.1:9294/indoor/test1/api/images/filter?dataset=56&hidden=false&limit=100&sort_by=FILE_ID&sort_order=ASC
+     *
+     * http://127.0.0.1:9294/indoor/test3/api/images/filter?dataset=1&hidden=false&limit=10&sort_by=FILE_ID&sort_order=ASC&site_model_entity=11
      * @param code
      * @param queryJsonDataOne
      * @param queryJsonDataTwo
@@ -56,10 +77,9 @@ public class FilterController {
     @WebControllerLog(description = "filter查询接口")
     @ApiOperation(value = "filter查询接口")
     @GetMapping("indoor/{code}/api/images/filter")
-    public Object filter(@PathVariable String code,
-                                 QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo, JsonDataDetailDto jsonDataDetailDto) {
+    public Object filter(@PathVariable String code, FilterQueryDto param) {
 //        Result result = filterService.query(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
-        Result result = filterService.query_5(code, queryJsonDataOne, queryJsonDataTwo, jsonDataDetailDto);
+        Result result = filterService.query_6(code, param);
 
         return result.getData();
     }

+ 43 - 0
laser/src/main/java/com/fdkankan/indoor/core/entity/dto/FilterQueryDto.java

@@ -0,0 +1,43 @@
+package com.fdkankan.indoor.core.entity.dto;
+
+import lombok.Data;
+
+/**
+ * Created by owen on 2021/8/2 0002 10:30
+ * 查询filter表, 查询参数是一组组来的
+ */
+@Data
+public class FilterQueryDto {
+
+    private Double radius;
+    private Double lat;
+    private Double lon;
+
+    private Double lat_max;
+    private Double lat_min;
+    private Double lon_max;
+    private Double lon_min;
+
+    private String sceneNum;
+    private Double z;
+    // 返回数量
+    private Integer step;
+
+
+    /**对应db dataset_id*/
+    private Integer dataset;
+
+    private Boolean hidden;
+
+    /** 返回数量*/
+    private Integer limit;
+
+    /**对应db site_model_entity_id*/
+    private Integer site_model_entity;
+
+    /**对应db 根据那个字段排序*/
+    private String sort_by;
+
+    /**升序还是降序*/
+    private String sort_order;
+}

+ 3 - 0
laser/src/main/java/com/fdkankan/indoor/core/service/FilterService.java

@@ -1,6 +1,7 @@
 package com.fdkankan.indoor.core.service;
 
 import com.fdkankan.indoor.base.util.Result;
+import com.fdkankan.indoor.core.entity.dto.FilterQueryDto;
 import com.fdkankan.indoor.core.entity.dto.JsonDataDetailDto;
 import com.fdkankan.indoor.core.entity.dto.QueryJsonDataOne;
 import com.fdkankan.indoor.core.entity.dto.QueryJsonDataTwo;
@@ -23,4 +24,6 @@ public interface FilterService {
     void save(FilterEntity entity);
 
     Result findById_5(String sceneCode, Integer id);
+
+    Result query_6(String code, FilterQueryDto param);
 }

+ 473 - 5
laser/src/main/java/com/fdkankan/indoor/core/service/impl/FilterServiceImpl.java

@@ -110,6 +110,8 @@ public class FilterServiceImpl implements FilterService {
 
 
 
+
+
     /**
      * 查询细节根据排序
      * @param code
@@ -197,25 +199,32 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
-    private List<JsonData> filterJsonData_5(String code, QueryJsonDataBase data, JsonDataDetailDto jsonDataDetailDto) {
+    private List<FilterHotDto> filterJsonData_5(String code, QueryJsonDataBase data, JsonDataDetailDto jsonDataDetailDto) {
         log.info("code:{}, data:{}", code, data.toString());
 
-        List<JsonData> list = findBySceneCode(code);
+        List<FilterHotDto> list = getDataBySceneCode_5(code);
         if (data instanceof QueryJsonDataOne) {
             QueryJsonDataOne one = (QueryJsonDataOne) data;
-            list = queryDataOne(one, list);
+            list = queryDataOne_5(one, list);
             log.info("走one");
         } else if (data instanceof QueryJsonDataTwo) {
             QueryJsonDataTwo two = (QueryJsonDataTwo) data;
-            list = queryDataTwo(two, list);
+            list = queryDataTwo_5(two, list);
             log.info("走two");
         } else {
             throw new RuntimeException("没有查询到数据,请检查入参");
         }
 
 
+        // QueryJsonDataOne:lat、lon
+
+        // QueryJsonDataTwo:lat_max、lat_min、lon_max、lon_min
+
+
+
+
         // 过滤参数
-        list = filterJsonDataDetail_5(list, jsonDataDetailDto);
+        list = filterJsonDataDetail_5_1(list, jsonDataDetailDto);
 
 
         return list;
@@ -492,6 +501,241 @@ public class FilterServiceImpl implements FilterService {
         return entity;
     }
 
+    private List<FilterHotDto> getDataBySceneCode_5(String sceneCode){
+        FilterEntity entity = filterMapper.findBySceneCode(sceneCode);
+        List<FilterHotDto> data = entity.getData();
+        return data;
+    }
+
+
+    private List<FilterHotDto> queryDataOne_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> dbList) {
+        log.info("run queryDataOne");
+
+        List<FilterHotDto> jsonDataList = new ArrayList<>();
+        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
+
+        //su  更改 7-21 18:18
+        if (siteModelEntityId != null) {
+            jsonDataList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
+        }else{
+            jsonDataList = dbList;
+        }
+
+        if (queryJsonData.getZ() != null) {
+            jsonDataList = dbList.stream().filter(jsonData ->
+                    jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
+                    .collect(Collectors.toList());
+        }
+
+        List<FilterHotDto> newJsonData = new ArrayList<>();
+        // radius:半径
+        if (queryJsonData.getRadius() != null) {
+//            newJsonData = calcule(queryJsonData, jsonDataList);
+            newJsonData = calcule_5_1(queryJsonData, jsonDataList);
+        } else {
+            // 没有半径,算最近的距离
+            newJsonData = calculeMin_5(queryJsonData, jsonDataList);
+        }
+
+        if (queryJsonData.getLimit() != null) {
+            newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
+        }
+        return newJsonData;
+    }
+
+    private List<FilterHotDto> calcule_5_1(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
+        log.info("run calcule");
+//        List<JsonData> newJsonData = new ArrayList<>();
+
+
+        // 计算距离后的结果集
+        Map<Double, FilterHotDto> calResultMap = new HashMap<>();
+        for (FilterHotDto jsonData : jsonDataList) {
+//            log.info("jsonData: {}", jsonData);
+            Double[] coordinates1 = new Double[2];
+            coordinates1[0] = queryJsonData.getLon();
+            coordinates1[1] = queryJsonData.getLat();
+
+            Double[] coordinates2 = new Double[2];
+            coordinates2[0] = jsonData.getLocation()[0];
+            coordinates2[1] = jsonData.getLocation()[1];
+
+            Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
+//            log.info("计算出的距离:{}", distance);
+
+            if (queryJsonData.getRadius() > distance) {
+                // 缓存对象
+                calResultMap.put(distance, jsonData);
+            }
+        }
+
+        // 从小到大排序, 冒泡排序
+        List<Double> list = new ArrayList<>();
+        calResultMap.forEach((k,v) -> {
+            list.add(k);
+        });
+        log.info("排序前: {}", list);
+        // 升序排列
+        List<Double> collect = list.stream().sorted().collect(Collectors.toList());
+        log.info("排序后: {}", collect);
+
+
+        // 通过key获取对象
+        List<FilterHotDto> result = new ArrayList<>();
+        collect.forEach(p -> {
+            result.add(calResultMap.get(p));
+        });
+
+        return result;
+    }
+
+
+    /**
+     * 处理step step的值会有影响
+     * 当step=null, 0, 1不做处理
+     * @param queryJsonData
+     * @param jsonDataList
+     * @return
+     */
+    private List<FilterHotDto> fillNewJsonData_5(QueryJsonDataTwo queryJsonData, List<FilterHotDto> jsonDataList) {
+        List<FilterHotDto> newJsonData = new ArrayList<>();
+        log.info("输入对象数量:{}", jsonDataList.size());
+        Integer inputStep = queryJsonData.getStep();
+        // 当inputStep为空、null、0、1 时返回全部数据
+        if (inputStep == null || inputStep==0 || inputStep==1) {
+            return jsonDataList;
+        }
+
+        /**
+         * 当inputStep大于1, 数量为200, 隔多少步取一个点
+         * 2:100
+         * 3:67
+         * 4:50
+         *
+         */
+        int step = 0;
+        if (inputStep > 1) {
+            for (FilterHotDto jsonData : jsonDataList) {
+                if (step % inputStep == 0 || step == 0) {
+                    newJsonData.add(jsonData);
+                }
+                step++;
+            }
+        }
+        log.info("输出对象数量:{}", newJsonData.size());
+        return newJsonData;
+    }
+
+    private List<FilterHotDto> queryDataTwo_5(QueryJsonDataTwo queryJsonData , List<FilterHotDto> dbList) {
+        log.info("run queryDataTwo");
+
+        List<FilterHotDto> jsonDataList = new ArrayList<>();
+        Long siteModelEntityId = queryJsonData.getSiteModelEntity();
+        if (siteModelEntityId != null) {
+            dbList = dbList.stream().filter(p -> siteModelEntityId == p.getSite_model_entity_id().longValue()).collect(Collectors.toList());
+        }
+        jsonDataList = dbList.stream().filter(jsonData ->
+                jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
+                        && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
+                .collect(Collectors.toList());
+
+//        List<FilterHotDto> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
+        List<FilterHotDto> newJsonData = fillNewJsonData_5(queryJsonData, jsonDataList);
+
+        return newJsonData;
+    }
+
+
+    private List<FilterHotDto> filterJsonDataDetail_5_1(List<FilterHotDto> dbList, JsonDataDetailDto jsonDataDetailDto) {
+//        List<JsonData> dbList = findBySceneCode(code);
+
+        Integer datasetId = jsonDataDetailDto.getDataset();
+        Integer siteModelEntityId = jsonDataDetailDto.getSite_model_entity();
+        Integer limit = jsonDataDetailDto.getLimit();
+        limit = limit==null ? 10 : limit;
+        Boolean hidden = jsonDataDetailDto.getHidden();
+        // 对应db 根据那个字段排序
+        String sortOrder = jsonDataDetailDto.getSort_order();
+        sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
+        // 升序还是降序
+        String sortBy = jsonDataDetailDto.getSort_by();
+        sortBy = sortBy==null ? null :sortBy.toLowerCase();
+
+
+
+        // todo 这里的排序还需要处理一下, 如有异常看了hidden值
+
+        Stream<FilterHotDto> dataStream = dbList.stream();
+        if (datasetId != null) {
+            dataStream = dataStream.filter(p -> datasetId.equals(p.getDataset_id()));
+        }
+
+        if (siteModelEntityId != null) {
+            dataStream = dataStream.filter(p -> siteModelEntityId.equals(p.getSite_model_entity_id()));
+        }
+
+
+        // 处理排序reversed()降序, 默认是升序
+        if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
+            dataStream = dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id).reversed());
+        } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
+            dataStream =  dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id));
+        }
+
+        List<FilterHotDto> collect = dataStream.collect(Collectors.toList());
+
+        log.info("返回数据数量: {}", collect.size());
+        return collect;
+    }
+
+
+    /**
+     * 计算最小距离
+     * @param queryJsonData
+     * @param jsonDataList
+     * @return 获取最小值对象
+     */
+    private List<FilterHotDto> calculeMin_5(QueryJsonDataOne queryJsonData, List<FilterHotDto> jsonDataList) {
+        log.info("run calculeMin");
+        List<FilterHotDto> newJsonData = new ArrayList<>();
+
+        // 计算距离后的结果集
+        HashMap<Double, FilterHotDto> calResultMap = new HashMap<>();
+
+        int i = 1;
+        Double min = null;
+        for (FilterHotDto jsonData : jsonDataList) {
+            Double[] coordinates1 = new Double[2];
+            coordinates1[0] = queryJsonData.getLon();
+            coordinates1[1] = queryJsonData.getLat();
+
+            Double[] coordinates2 = new Double[2];
+            coordinates2[0] = jsonData.getLocation()[0];
+            coordinates2[1] = jsonData.getLocation()[1];
+
+            Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
+//            log.info("计算出的距离:{}", distance);
+            // 默认取第一值
+            if (i==1) {
+                min = distance;
+                calResultMap.put(min, jsonData);
+            }
+
+            if (distance < min) {
+                min = distance;
+                calResultMap.put(min, jsonData);
+            }
+            i++;
+
+        }
+
+        log.info("循环次数:{}, 最小值:{}", i, min);
+        // 获取最小值
+        FilterHotDto minJson = calResultMap.get(min);
+        newJsonData.add(minJson);
+        return newJsonData;
+    }
+
 
     @Override
     public Result findById_5(String sceneCode, Integer id) {
@@ -508,6 +752,230 @@ public class FilterServiceImpl implements FilterService {
     }
 
 
+
+
+    @Override
+    public Result query_6(String code, FilterQueryDto param) {
+        List<FilterHotDto> data = getDataBySceneCode_5(code);
+        log.info("输入数量:{}", data.size());
+
+        Stream<FilterHotDto> dataStream = data.stream();
+        // 过滤条件
+        Integer dataset = param.getDataset();
+        if (dataset != null) {
+            dataStream = dataStream.filter(p -> dataset.equals(p.getDataset_id()));
+        }
+
+        Integer site_model_entity = param.getSite_model_entity();
+        if (site_model_entity != null) {
+            dataStream = dataStream.filter(p -> site_model_entity.equals(p.getSite_model_entity_id()));
+        }
+
+        // 处理 z
+        Double z = param.getZ();
+        if (z != null) {
+            dataStream = dataStream.filter(p ->
+                    p.getLocation()[2] >= z && p.getFloor_location()[2] <= z);
+        }
+
+
+        // 处理 lat, lon
+        Double lat = param.getLat();
+        Double lon = param.getLon();
+        if (lat != null && lon != null) {
+            // 处理半径, radius:半径
+            Double radius = param.getRadius();
+            if (radius != null) {
+                dataStream = calcule_5_2(param, dataStream);
+            } else {
+                // 没有半径,算最近的距离
+                dataStream = calculeMin_5_2(param, dataStream);
+            }
+        }
+
+
+        // 处理lon_min、lon_max, lat_min、lat_max
+        Double latMax = param.getLat_max();
+        Double latMin = param.getLat_min();
+        Double lonMax = param.getLon_max();
+        Double lonMin = param.getLon_min();
+        if (latMax != null && latMin != null && lonMax != null && lonMin != null) {
+            dataStream = dataStream.filter(jsonData ->
+                    jsonData.getLocation()[0] >= lonMin && jsonData.getLocation()[0] <= lonMax
+                            && jsonData.getLocation()[1] >= latMin && jsonData.getLocation()[1] <= latMax);
+        }
+
+
+
+
+        // 处理间隔数量
+        Integer step = param.getStep();
+        if (step != null){
+            dataStream = executeStep(step, dataStream);
+        }
+
+
+        Boolean hidden = param.getHidden();
+        // 对应db 根据那个字段排序
+        String sortOrder = param.getSort_order();
+        sortOrder = sortOrder==null ? null :sortOrder.toLowerCase();
+        // 升序还是降序
+        String sortBy = param.getSort_by();
+        sortBy = sortBy==null ? null :sortBy.toLowerCase();
+
+
+        // 处理排序reversed()降序, 默认是升序
+        if ("desc".equals(sortBy) && "file_id".equals(sortOrder)) {
+            dataStream = dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id).reversed());
+        } else if ("asc".equals(sortBy) && "file_id".equals(sortOrder)){
+            dataStream =  dataStream.sorted(Comparator.comparing(FilterHotDto::getFile_id));
+        }
+
+
+        Integer limit = param.getLimit();
+        limit = limit==null ? 10 : limit;
+        dataStream = dataStream.limit(limit);
+
+        // 返回最近距离
+
+        data = dataStream.collect(Collectors.toList());
+        log.info("输出数量:{}", data.size());
+
+        return Result.success(data);
+    }
+
+
+    /**
+     *   处理step step的值会有影响
+     *   当step=null, 0, 1不做处理
+     * @param inputStep
+     * @param dataStream
+     * @return
+     */
+    private Stream<FilterHotDto> executeStep(Integer inputStep, Stream<FilterHotDto> dataStream) {
+
+        List<FilterHotDto> jsonDataList = dataStream.collect(Collectors.toList());
+        List<FilterHotDto> newJsonData = new ArrayList<>();
+        log.info("输入对象数量:{}", jsonDataList.size());
+        // 当inputStep为空、null、0、1 时返回全部数据
+        if (inputStep == null || inputStep==0 || inputStep==1) {
+            return jsonDataList.stream();
+        }
+
+        /**
+         * 当inputStep大于1, 数量为200, 隔多少步取一个点
+         * 2:100
+         * 3:67
+         * 4:50
+         *
+         */
+        int step = 0;
+        if (inputStep > 1) {
+            for (FilterHotDto jsonData : jsonDataList) {
+                if (step % inputStep == 0 || step == 0) {
+                    newJsonData.add(jsonData);
+                }
+                step++;
+            }
+        }
+        log.info("输出对象数量:{}", newJsonData.size());
+        return newJsonData.stream();
+    }
+
+
+    private Stream<FilterHotDto> calcule_5_2(FilterQueryDto queryJsonData, Stream<FilterHotDto> dataStream) {
+        log.info("run calcule");
+        List<FilterHotDto> jsonDataList = dataStream.collect(Collectors.toList());
+
+        // 计算距离后的结果集
+        Map<Double, FilterHotDto> calResultMap = new HashMap<>();
+        for (FilterHotDto jsonData : jsonDataList) {
+            Double[] coordinates1 = new Double[2];
+            coordinates1[0] = queryJsonData.getLon();
+            coordinates1[1] = queryJsonData.getLat();
+
+            Double[] coordinates2 = new Double[2];
+            coordinates2[0] = jsonData.getLocation()[0];
+            coordinates2[1] = jsonData.getLocation()[1];
+
+            Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
+//            log.info("计算出的距离:{}", distance);
+
+            if (queryJsonData.getRadius() > distance) {
+                // 缓存对象
+                calResultMap.put(distance, jsonData);
+            }
+        }
+
+        // 从小到大排序, 冒泡排序
+        List<Double> list = new ArrayList<>();
+        calResultMap.forEach((k,v) -> {
+            list.add(k);
+        });
+        log.info("排序前: {}", list);
+        // 升序排列
+        List<Double> collect = list.stream().sorted().collect(Collectors.toList());
+        log.info("排序后: {}", collect);
+
+
+        // 通过key获取对象
+        List<FilterHotDto> result = new ArrayList<>();
+        collect.forEach(p -> {
+            result.add(calResultMap.get(p));
+        });
+
+        return result.stream();
+    }
+
+
+    /**
+     * 计算最小距离
+     * @param queryJsonData
+     * @return 获取最小值对象
+     */
+    private  Stream<FilterHotDto> calculeMin_5_2(FilterQueryDto queryJsonData, Stream<FilterHotDto> dataStream) {
+        List<FilterHotDto> jsonDataList = dataStream.collect(Collectors.toList());
+        log.info("run calculeMin");
+        List<FilterHotDto> newJsonData = new ArrayList<>();
+
+        // 计算距离后的结果集
+        HashMap<Double, FilterHotDto> calResultMap = new HashMap<>();
+
+        int i = 1;
+        Double min = null;
+        for (FilterHotDto jsonData : jsonDataList) {
+            Double[] coordinates1 = new Double[2];
+            coordinates1[0] = queryJsonData.getLon();
+            coordinates1[1] = queryJsonData.getLat();
+
+            Double[] coordinates2 = new Double[2];
+            coordinates2[0] = jsonData.getLocation()[0];
+            coordinates2[1] = jsonData.getLocation()[1];
+
+            Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
+//            log.info("计算出的距离:{}", distance);
+            // 默认取第一值
+            if (i==1) {
+                min = distance;
+                calResultMap.put(min, jsonData);
+            }
+
+            if (distance < min) {
+                min = distance;
+                calResultMap.put(min, jsonData);
+            }
+            i++;
+
+        }
+
+        log.info("循环次数:{}, 最小值:{}", i, min);
+        // 获取最小值
+        FilterHotDto minJson = calResultMap.get(min);
+        newJsonData.add(minJson);
+        return newJsonData.stream();
+    }
+
+
     @Test
     public void test(){
         double a= 8.346455383936777E-4;