|
@@ -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;
|