| | |
| | | final boolean success; |
| | | final String errorMessage; |
| | | final String originalBoundary; |
| | | final String originalBoundaryXY; |
| | | final String optimizedBoundary; |
| | | final String areaSqMeters; |
| | | final String baseStationCoordinates; |
| | |
| | | private BoundarySnapshotResult(boolean success, |
| | | String errorMessage, |
| | | String originalBoundary, |
| | | String originalBoundaryXY, |
| | | String optimizedBoundary, |
| | | String areaSqMeters, |
| | | String baseStationCoordinates, |
| | |
| | | this.success = success; |
| | | this.errorMessage = errorMessage; |
| | | this.originalBoundary = originalBoundary; |
| | | this.originalBoundaryXY = originalBoundaryXY; |
| | | this.optimizedBoundary = optimizedBoundary; |
| | | this.areaSqMeters = areaSqMeters; |
| | | this.baseStationCoordinates = baseStationCoordinates; |
| | | this.messageType = messageType; |
| | | } |
| | | |
| | | static BoundarySnapshotResult success(String original, String optimized, String area, String baseStation) { |
| | | return new BoundarySnapshotResult(true, null, original, optimized, area, baseStation, JOptionPane.INFORMATION_MESSAGE); |
| | | static BoundarySnapshotResult success(String original, String originalXY, String optimized, String area, String baseStation) { |
| | | return new BoundarySnapshotResult(true, null, original, originalXY, optimized, area, baseStation, JOptionPane.INFORMATION_MESSAGE); |
| | | } |
| | | |
| | | static BoundarySnapshotResult failure(String message, int messageType) { |
| | | return new BoundarySnapshotResult(false, message, null, null, null, null, messageType); |
| | | return new BoundarySnapshotResult(false, message, null, null, null, null, null, messageType); |
| | | } |
| | | } |
| | | |
| | |
| | | Dikuai dikuai = getOrCreatePendingDikuai(); |
| | | if (dikuai != null) { |
| | | dikuai.setBoundaryOriginalCoordinates(snapshot.originalBoundary); |
| | | dikuai.setBoundaryOriginalXY(snapshot.originalBoundaryXY); |
| | | dikuai.setBoundaryCoordinates(snapshot.optimizedBoundary); |
| | | dikuai.setLandArea(snapshot.areaSqMeters); |
| | | dikuai.setBaseStationCoordinates(snapshot.baseStationCoordinates); |
| | |
| | | } |
| | | |
| | | dikuaiData.put("boundaryOriginalCoordinates", snapshot.originalBoundary); |
| | | dikuaiData.put("boundaryOriginalXY", snapshot.originalBoundaryXY); |
| | | dikuaiData.put("boundaryCoordinates", snapshot.optimizedBoundary); |
| | | dikuaiData.put("landArea", snapshot.areaSqMeters); |
| | | dikuaiData.put("baseStationCoordinates", snapshot.baseStationCoordinates); |
| | | if (activeSession != null) { |
| | | activeSession.data.put("boundaryOriginalCoordinates", snapshot.originalBoundary); |
| | | activeSession.data.put("boundaryOriginalXY", snapshot.originalBoundaryXY); |
| | | activeSession.data.put("boundaryCoordinates", snapshot.optimizedBoundary); |
| | | activeSession.data.put("landArea", snapshot.areaSqMeters); |
| | | activeSession.data.put("baseStationCoordinates", snapshot.baseStationCoordinates); |
| | |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 构建原始边界XY坐标字符串(相对于基准站的XY坐标) |
| | | */ |
| | | private static String buildOriginalBoundaryXYString(List<Coordinate> coordinates, String baseStationCoordinates) { |
| | | if (coordinates == null || coordinates.isEmpty()) { |
| | | return "-1"; |
| | | } |
| | | if (baseStationCoordinates == null || baseStationCoordinates.trim().isEmpty() || "-1".equals(baseStationCoordinates.trim())) { |
| | | return "-1"; |
| | | } |
| | | |
| | | try { |
| | | // 解析基准站坐标 |
| | | String[] baseParts = baseStationCoordinates.split(","); |
| | | if (baseParts.length < 4) { |
| | | return "-1"; |
| | | } |
| | | double baseLat = publicway.Gpstoxuzuobiao.parseDMToDecimal(baseParts[0], baseParts[1]); |
| | | double baseLon = publicway.Gpstoxuzuobiao.parseDMToDecimal(baseParts[2], baseParts[3]); |
| | | |
| | | StringBuilder sb = new StringBuilder(); |
| | | DecimalFormat xyFormat = new DecimalFormat("0.00"); |
| | | for (Coordinate coord : coordinates) { |
| | | double lat = convertToDecimalDegree(coord.getLatitude(), coord.getLatDirection()); |
| | | double lon = convertToDecimalDegree(coord.getLongitude(), coord.getLonDirection()); |
| | | |
| | | // 转换为XY坐标 |
| | | double[] xy = publicway.Gpstoxuzuobiao.convertLatLonToLocal(lat, lon, baseLat, baseLon); |
| | | |
| | | if (sb.length() > 0) { |
| | | sb.append(";"); |
| | | } |
| | | sb.append(xyFormat.format(xy[0])).append(",").append(xyFormat.format(xy[1])); |
| | | } |
| | | return sb.toString(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return "-1"; |
| | | } |
| | | } |
| | | |
| | | private static double convertToDecimalDegree(String dmm, String direction) { |
| | | if (dmm == null || dmm.isEmpty()) { |
| | |
| | | } |
| | | |
| | | String originalBoundary = buildOriginalBoundaryString(uniqueCoordinates); |
| | | String originalBoundaryXY = buildOriginalBoundaryXYString(uniqueCoordinates, baseStationCoordinates); |
| | | DecimalFormat areaFormat = new DecimalFormat("0.00"); |
| | | String areaString = areaFormat.format(area); |
| | | |
| | | return BoundarySnapshotResult.success(originalBoundary, optimizedBoundary, areaString, baseStationCoordinates); |
| | | return BoundarySnapshotResult.success(originalBoundary, originalBoundaryXY, optimizedBoundary, areaString, baseStationCoordinates); |
| | | } |
| | | |
| | | private String resolvePlannerMode(String patternDisplay) { |
| | |
| | | BoundarySnapshotResult snapshot = computeBoundarySnapshot(); |
| | | if (snapshot.success && activeSession != null) { |
| | | activeSession.data.put("boundaryOriginalCoordinates", snapshot.originalBoundary); |
| | | activeSession.data.put("boundaryOriginalXY", snapshot.originalBoundaryXY); |
| | | activeSession.data.put("boundaryCoordinates", snapshot.optimizedBoundary); |
| | | activeSession.data.put("landArea", snapshot.areaSqMeters); |
| | | activeSession.data.put("baseStationCoordinates", snapshot.baseStationCoordinates); |
| | |
| | | if (dikuaiData.containsKey("boundaryOriginalCoordinates")) { |
| | | dikuai.setBoundaryOriginalCoordinates(dikuaiData.get("boundaryOriginalCoordinates")); |
| | | } |
| | | if (dikuaiData.containsKey("boundaryOriginalXY")) { |
| | | dikuai.setBoundaryOriginalXY(dikuaiData.get("boundaryOriginalXY")); |
| | | } |
| | | if (dikuaiData.containsKey("boundaryCoordinates")) { |
| | | dikuai.setBoundaryCoordinates(dikuaiData.get("boundaryCoordinates")); |
| | | } |