Răsfoiți Sursa

随机生成区域目标

Elqeb 4 luni în urmă
părinte
comite
2da2e106f3

+ 101 - 2
orbit-base-biz/base-biz-service/src/main/java/com/base/biz/controller/DemandManagerController.java

@@ -24,6 +24,7 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Random;
 
 @Api(tags = "需求管理")
 @RestController
@@ -107,9 +108,9 @@ public class DemandManagerController {
         List<QueryTargetRelationPointAddDTO> req = new ArrayList<>();
 
 
-        String parentIdOld = targetDemandMapper.getParentIdByParentId(parentId+"_E");
+        String parentIdOld = targetDemandMapper.getParentIdByParentId(parentId + "_E");
 
-        Integer index = parentIdOld==null?1:Integer.parseInt(parentIdOld.split("_")[3].replace("E",""))+1;
+        Integer index = parentIdOld == null ? 1 : Integer.parseInt(parentIdOld.split("_")[3].replace("E", "")) + 1;
 
         for (QueryImportDemandDTO queryImportDemandDTO : list) {
             QueryTargetRelationPointAddDTO queryTargetRelationPointAddDTO = new QueryTargetRelationPointAddDTO();
@@ -140,4 +141,102 @@ public class DemandManagerController {
         return Result.success();
     }
 
+
+    @ApiOperation(value = "test")
+    @PostMapping("/test")
+    public Result test(double lat1, double lat2, double lng1, double lng2, int num) {
+        List<QueryTargetRelationPointAddDTO> list = new ArrayList<>();
+        // 中国的大致边界
+        for (int i = 0; i < num; i++) {
+            QueryTargetRelationPointAddDTO dto = new QueryTargetRelationPointAddDTO();
+            //double centerLat = randomDouble(lat1, lat2);
+            //double centerLng = randomDouble(lng1, lng2);
+
+            // 生成一个基准点(不在中国境内)
+            Random random = new Random();
+            double baseLat = getRandomLatitude(random);
+            double baseLon = getRandomLongitude(random);
+
+            // 确保基准点不在中国境内
+            while (isInChina(baseLat, baseLon)) {
+                baseLat = getRandomLatitude(random);
+                baseLon = getRandomLongitude(random);
+            }
+
+
+            List<double[]> points = generateRandomPoints(4, baseLat, baseLon);
+            List<PointDTO> dtoList = new ArrayList<>();
+            for (int i1 = 0; i1 < points.size(); i1++) {
+                double[] point = points.get(i1);
+                PointDTO pointDTO = new PointDTO();
+                pointDTO.setLat(point[0]);
+                pointDTO.setLng(point[1]);
+
+                pointDTO.setSequence(i1 + 1);
+                dtoList.add(pointDTO);
+            }
+
+            dto.setPointDTOList(dtoList);
+            list.add(dto);
+
+            int a = 1001 + i;
+
+            dto.setTargetName("0214区域目标" + a);
+            dto.setParentId("250214_XQCH_10002_M" + a);
+            dto.setType(2);
+        }
+        relationTargetService.addTargetRelationPoint(list);
+        return Result.success(list);
+    }
+
+    public List<double[]> generateRandomPoints(int numPoints, double centerLat, double centerLon) {
+        List<double[]> points = new ArrayList<>();
+
+        double EARTH_RADIUS = 6371;
+
+        // 选择一个不在中国境内的区域,这里选择太平洋中部
+        // 计算 200km 对应的纬度和经度变化量
+        double latChange = (200 / EARTH_RADIUS) * (180 / Math.PI);
+        double lonChange = (200 / (EARTH_RADIUS * Math.cos(Math.toRadians(centerLat)))) * (180 / Math.PI);
+
+        // 计算四个角点的经纬度
+        double northEastLat = centerLat + latChange / 2;
+        double northEastLon = centerLon + lonChange / 2;
+
+        double southEastLat = centerLat - latChange / 2;
+        double southEastLon = centerLon + lonChange / 2;
+
+        double northWestLat = centerLat + latChange / 2;
+        double northWestLon = centerLon - lonChange / 2;
+
+        double southWestLat = centerLat - latChange / 2;
+        double southWestLon = centerLon - lonChange / 2;
+        // 计算四个角点的经纬度
+        points.add(new double[]{northEastLat, northEastLon});
+        points.add(new double[]{southEastLat, southEastLon});
+        points.add(new double[]{southWestLat, southWestLon});
+        points.add(new double[]{northWestLat, northWestLon});
+        return points;
+    }
+
+    private double randomDouble(double min, double max) {
+        Random random = new Random();
+        return min + (max - min) * random.nextDouble();
+    }
+
+    // 生成随机纬度(-90到90)
+    private double getRandomLatitude(Random random) {
+        return -90.0 + random.nextDouble() * 180.0;
+    }
+
+    // 生成随机经度(-180到180)
+    private double getRandomLongitude(Random random) {
+        return -180.0 + random.nextDouble() * 360.0;
+    }
+
+    // 判断点是否在中国境内
+    private static boolean isInChina(double lat, double lon) {
+        return lat >= 18.0 && lat <= 53.0 &&
+                lon >= 73.0 && lon <= 153.0;
+    }
 }