Browse Source

비행가능여부 추가

pull/10/head
지대한 12 months ago
parent
commit
b98f5fe915
  1. 1
      .gitignore
  2. 18
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java
  3. 78
      pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java

1
.gitignore vendored

@ -36,3 +36,4 @@ out/
### VS Code ### ### VS Code ###
.vscode/ .vscode/
/files/ /files/
/pav-server/files/

18
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/model/BasLaancValidatedRs.java

@ -46,17 +46,23 @@ public class BasLaancValidatedRs {
&& isArcrftInsurance && isArcrftInsurance
&& !isArcrftDuplicated // 기체 중복여부 && !isArcrftDuplicated // 기체 중복여부
&& !isPlanAreaDuplicatd // 비행구역 중복여부 && !isPlanAreaDuplicatd // 비행구역 중복여부
&& isEvaluatedTargetArea // 관제구역여부
&& isFlightArea // 비행가능여부 && isFlightArea // 비행가능여부
&& isElev // 150m 이하 && (isEvaluatedTargetArea // 관제구역여부
&& isArcrftWeight; // 25kg 이하 || !isElev // 150m 초과
|| !isArcrftWeight); // 25kg 초과
} }
return !isArcrftDuplicated return !isArcrftDuplicated
&& !isPlanAreaDuplicatd && !isPlanAreaDuplicatd
&& isEvaluatedTargetArea
&& isFlightArea && isFlightArea
&& isElev // 150m 이하 && (isEvaluatedTargetArea
&& isArcrftWeight; // 25kg 이하 || !isElev // 150m 초과
|| !isArcrftWeight); // 25kg 초과
}
public boolean isFlight() {
return !isEvaluatedTargetArea
&& isElev
&& isArcrftWeight;
} }
} }

78
pav-server/src/main/java/com/palnet/biz/api/bas/laanc/service/BasLaancService.java

@ -109,9 +109,15 @@ public class BasLaancService {
boolean isArcrftWeight = rq.getArcrftList().stream().anyMatch(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO_TEST); boolean isArcrftWeight = rq.getArcrftList().stream().anyMatch(arcrft -> arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO && arcrft.getArcrftWghtCd() != ArcrftWghtCd.W25KG_GO_TEST);
rs.setArcrftWeight(isArcrftWeight); rs.setArcrftWeight(isArcrftWeight);
// 비행구역 중복여부, 기체 중복여부, 판단구역 - 공역과 겹칠 경우, 비행가능여부 // 판단구역 - 공역과 겹칠 경우, 비행가능여부
BasLaancValidatedRs validationPlanRs = this.validationPlanAreaAndArcrftAndAirspace(rq); BasLaancValidatedRs validationPlanAirspaceRs = this.validationPlanAreaAndArcrft(rq);
BasLaancMapper.MAPPER.merge(rs, validationPlanRs); rs.setEvaluatedTargetArea(validationPlanAirspaceRs.isEvaluatedTargetArea());
rs.setFlightArea(validationPlanAirspaceRs.isFlightArea());
// 비행구역 중복여부, 기체 중복여부
BasLaancValidatedRs validationPlanDbRs = this.validationPlanAirspace(rq);
rs.setPlanAreaDuplicatd(validationPlanDbRs.isPlanAreaDuplicatd());
rs.setArcrftDuplicated(validationPlanDbRs.isArcrftDuplicated());
return rs; return rs;
@ -122,8 +128,13 @@ public class BasLaancService {
public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) { public BasLaancLastRs createFlightPlan(BasLaancPlanRq rq) {
BasLaancValidatedRs basLaancValidatedRs = rq.getValidatedRs(); BasLaancValidatedRs basLaancValidatedRs = rq.getValidatedRs();
BasLaancValidatedRs validatedRs = this.validationPlanAreaAndArcrftAndAirspace(rq); // BasLaancValidatedRs validatedAirspaceRs = this.validationPlanAirspace(rq);
BasLaancMapper.MAPPER.merge(basLaancValidatedRs, validatedRs);
BasLaancValidatedRs validatedDbRs = this.validationPlanAreaAndArcrft(rq);
basLaancValidatedRs.setPlanAreaDuplicatd(validatedDbRs.isPlanAreaDuplicatd());
basLaancValidatedRs.setArcrftDuplicated(validatedDbRs.isArcrftDuplicated());
// BasLaancMapper.MAPPER.merge(basLaancValidatedRs, validatedRs);
// LAANC가 검증된것들만 DB저장 // LAANC가 검증된것들만 DB저장
if (!basLaancValidatedRs.isValid()) throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE); if (!basLaancValidatedRs.isValid()) throw new CustomException(ErrorCode.PLAN_DATA_DUPLICATE);
@ -240,14 +251,12 @@ public class BasLaancService {
} }
// LAANC 검증 // LAANC 검증
private BasLaancValidatedRs validationPlanAreaAndArcrftAndAirspace(BasLaancPlanRq rq) { private BasLaancValidatedRs validationPlanAreaAndArcrft(BasLaancPlanRq rq) {
// 초기화 // 초기화
BasLaancValidatedRs rs = BasLaancValidatedRs.builder() BasLaancValidatedRs rs = BasLaancValidatedRs.builder()
.isPlanAreaDuplicatd(false) // 비행구역 중복여부 .isPlanAreaDuplicatd(false) // 비행구역 중복여부
.isArcrftDuplicated(false) // 기체 중복여부 .isArcrftDuplicated(false) // 기체 중복여부
.isEvaluatedTargetArea(false) // 판단구역 - 공역과 겹칠 경우
.isFlightArea(false) // 비행가능여부
.build(); .build();
@ -337,6 +346,59 @@ public class BasLaancService {
} }
// // 공역 중복 확인
// for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) {
// List<Coordinate> rqCoord = new ArrayList<>();
// List<Coordinate> rqCoordBufferList = new ArrayList<>();
//
// //rq로 들어온 좌표로 버퍼좌표 생성
// for (BasLaancAreaCoordModel basLaancAreaCoordModel : basLaancAreaModel.getCoordList()) {
// Coordinate coords = new Coordinate(basLaancAreaCoordModel.getLon(), basLaancAreaCoordModel.getLat());
// rqCoord.add(coords);
// }
// if ("LINE".equals(basLaancAreaModel.getAreaType())) {
// List<Coordinate> trans = areaUtils.transform(rqCoord, "EPSG:4326", "EPSG:5181");
// List<Coordinate> bufferList = areaUtils.buffer(trans, basLaancAreaModel.getBufferZone());
// rqCoordBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326");
// } else if ("POLYGON".equals(basLaancAreaModel.getAreaType())) {
// rqCoordBufferList.addAll(rqCoord);
// } else if ("CIRCLE".equals(basLaancAreaModel.getAreaType())) {
// rqCoordBufferList = areaUtils.createCircle(rqCoord.get(0), basLaancAreaModel.getBufferZone());
// }
//
// AirspaceUtils airspaceUtils = AirspaceUtils.getInstance();
// Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(rqCoordBufferList);
// Integer fltElev = basLaancAreaModel.getFltElev() != null ? Integer.valueOf(basLaancAreaModel.getFltElev()) : 0;
// AirspaceUtils.FeatureInfo featureInfo = new AirspaceUtils.FeatureInfo(null, null, 0, fltElev, rqGeometry);
//
// // 평가 가능 지역 판단
// boolean duplicatedAirspace = airspaceUtils.isDuplicatedAirspace(featureInfo);
// rs.setEvaluatedTargetArea(duplicatedAirspace);
//
// // 비행 가능 지역 판단
//// if (duplicatedAirspace) {
//// boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
//// rs.setFlightAreaYn(validLaancAirspace ? "Y" : "N");
//// } else {
//// rs.setFlightAreaYn("N");
//// }
//
// // 비행 가능 지역 판단
// boolean validLaancAirspace = airspaceUtils.isValidLaancAirspace(featureInfo);
// rs.setFlightArea(validLaancAirspace);
//
// }
return rs;
}
private BasLaancValidatedRs validationPlanAirspace(BasLaancPlanRq rq) {
// 초기화
BasLaancValidatedRs rs = BasLaancValidatedRs.builder()
.isEvaluatedTargetArea(false) // 판단구역 - 공역과 겹칠 경우
.isFlightArea(false) // 비행가능여부
.build();
// 공역 중복 확인 // 공역 중복 확인
for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) { for (BasLaancAreaModel basLaancAreaModel : rq.getAreaList()) {
List<Coordinate> rqCoord = new ArrayList<>(); List<Coordinate> rqCoord = new ArrayList<>();

Loading…
Cancel
Save