张世豪
5 天以前 a3b05960fe629e9006b45d61618b01f724e757fd
src/bianjie/bianjieguihua2.java
@@ -34,9 +34,30 @@
           double baseLat = parseDMToDecimal(baseParts[0], baseParts[1]);
           double baseLon = parseDMToDecimal(baseParts[2], baseParts[3]);
           
           // 将Coordinate列表转换为局部坐标系坐标
           List<BoundaryAlgorithm.Coordinate> localCoordinates =
               convertToLocalCoordinates(coordinates, baseLat, baseLon);
         // 将Coordinate列表转换为局部坐标系坐标
         List<BoundaryAlgorithm.Coordinate> localCoordinates =
            convertToLocalCoordinates(coordinates, baseLat, baseLon);
         // 三角形小区域特殊处理,避免过度插值导致点数扩增
         if (localCoordinates.size() == 3) {
            double triangleArea = calculatePolygonArea(localCoordinates);
            double trianglePerimeter = calculatePerimeter(localCoordinates);
            System.out.println("检测到三角形边界,面积=" + String.format("%.2f", triangleArea) +
                  "m², 周长=" + String.format("%.2f", trianglePerimeter) + "m");
            if (triangleArea < 100.0 || trianglePerimeter < 30.0) {
               System.out.println("小三角形,跳过插值优化");
               BoundaryAlgorithm.Coordinate firstPoint = localCoordinates.get(0);
               List<BoundaryAlgorithm.Coordinate> trianglePoints = new ArrayList<>(localCoordinates);
               trianglePoints.add(new BoundaryAlgorithm.Coordinate(
                     firstPoint.x,
                     firstPoint.y,
                     firstPoint.lat,
                     firstPoint.lon));
               return convertBoundaryPointsToString(trianglePoints);
            }
         }
           
           // 创建算法实例
           BoundaryAlgorithm algorithm = new BoundaryAlgorithm();
@@ -264,6 +285,16 @@
       
       return Math.abs(area) / 2.0;
   }
   private static double calculatePerimeter(List<BoundaryAlgorithm.Coordinate> points) {
       if (points == null || points.size() != 3) {
           return 0.0;
       }
       double d1 = calculateDistance(points.get(0), points.get(1));
       double d2 = calculateDistance(points.get(1), points.get(2));
       double d3 = calculateDistance(points.get(2), points.get(0));
       return d1 + d2 + d3;
   }
   
   // ============ 其他方法保持不变 ============