diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java index 1ef5c2d1..27516a84 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/model/BasDosPlanRq.java @@ -16,4 +16,5 @@ public class BasDosPlanRq { private LocalDate searchEndDt; private String applyNo; private String approvalCd; + private String selectZone; } diff --git a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java index 0b4784e8..3e6e79e8 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/bas/dos/service/BasDosService.java @@ -9,10 +9,12 @@ import com.palnet.biz.jpa.entity.DosFltPlanResult; import com.palnet.biz.jpa.repository.dos.DosFltPlanAreaRepository; import com.palnet.biz.jpa.repository.dos.DosFltPlanQueryRepository; import com.palnet.biz.jpa.repository.dos.DosFltPlanResultRepository; +import com.palnet.comn.utils.AirspaceUtils; import com.palnet.comn.utils.AreaUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.Geometry; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -67,7 +69,7 @@ public class BasDosService { Optional first = resultList.stream().filter(result -> result.getPlanAreaSno().equals(area.getPlanAreaSno())).findFirst(); String approvalCd = ""; Double fltElevMax = null; - if(first.isPresent()){ + if (first.isPresent()) { DosFltPlanResult dosFltPlanResult = first.get(); approvalCd = dosFltPlanResult.getApprovalCd(); fltElevMax = dosFltPlanResult.getFltElevMax(); @@ -77,6 +79,23 @@ public class BasDosService { continue; } + List coordBuffers = areaUtils.createCircle(new Coordinate(area.getLon(), area.getLat()), area.getBufferZone()); + + if ("GIMPO".equalsIgnoreCase(rq.getSelectZone())) { + AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); + Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(coordBuffers); + + AirspaceUtils.FeatureInfo targetfeatureInfo = new AirspaceUtils.FeatureInfo(null, null, 0.0, area.getFltElev(), rqGeometry); + boolean isDuplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetfeatureInfo, AirspaceUtils.AirspaceType.GIMPO); + if (!isDuplicatedAirspace) { + continue; + } + } + + + List> bufferCoordList = coordBuffers.stream().map(coord -> Map.of("lat", coord.y, "lon", coord.x)).collect(Collectors.toList()); + + BasDosPlanAreaRs areaRs = BasDosPlanAreaRs.builder() .planAreaSno(area.getPlanAreaSno()) .planSno(area.getPlanSno()) @@ -88,7 +107,7 @@ public class BasDosService { .lon(area.getLon()) .approvalCd(approvalCd) .fltElevMax(fltElevMax) - .bufferCoordList(getBufferCoords(area)) + .bufferCoordList(bufferCoordList) .build(); areaRsList.add(areaRs); } @@ -119,7 +138,7 @@ public class BasDosService { * 비행구역의 데이터를 이용하여 주변의 좌표를 추출한다. * * @param area: DosFltPlanArea - * @return List> + * @return List> */ private List> getBufferCoords(DosFltPlanArea area) { // Circle만 체크