From 028185a21ce5707dffe3fdecd7c9299ffefb93e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 21 Aug 2024 14:56:54 +0900 Subject: [PATCH] feat: temp commit replace AirspaceUtils to AirAreaUtils --- .../api/bas/dos/service/BasDosService.java | 23 ++++++------ .../external/service/DronOneStopService.java | 37 +++++++++---------- .../com/palnet/biz/config/InitRunner.java | 8 ---- 3 files changed, 29 insertions(+), 39 deletions(-) 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 3b2487a4..6b1a6da7 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 @@ -20,10 +20,7 @@ import com.palnet.biz.jpa.entity.type.ReviewedType; import com.palnet.biz.jpa.repository.dos.*; import com.palnet.comn.code.ErrorCode; import com.palnet.comn.exception.CustomException; -import com.palnet.comn.utils.AirspaceUtils; -import com.palnet.comn.utils.AreaUtils; -import com.palnet.comn.utils.HttpUtils; -import com.palnet.comn.utils.PdfUtils; +import com.palnet.comn.utils.*; import kr.dogfoot.hwpxlib.object.HWPXFile; import kr.dogfoot.hwpxlib.object.content.section_xml.SectionXMLFile; import kr.dogfoot.hwpxlib.object.content.section_xml.paragraph.Run; @@ -163,11 +160,11 @@ public class BasDosService { continue; } // 관제과(9.3km) - AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); - List airspaces = airspaceUtils.getAirspaces(AirspaceUtils.AirspaceType.GIMPO); + AirAreaUtils airAreaUtils = AirAreaUtils.getInstance(); + List airspaceList = airAreaUtils.getAirAreaList(AirAreaUtils.AirAreaType.GIMPO); GeometryFactory geometryFactory = new GeometryFactory(); Point point = geometryFactory.createPoint(centerPoint); - boolean isContain = airspaces.stream().anyMatch(airspace -> { + boolean isContain = airspaceList.stream().anyMatch(airspace -> { Geometry airspaceGeometry = airspace.getGeometry(); return airspaceGeometry.contains(point); }); @@ -193,16 +190,18 @@ public class BasDosService { if (type == PlanSelectType.LIST) { 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); + AirAreaUtils airAreaUtils = AirAreaUtils.getInstance(); + Geometry rqGeometry = airAreaUtils.createGeometryByCoordinate(coordBuffers, AirAreaUtils.GeometryType.POLYGON); - AirspaceUtils.FeatureInfo targetfeatureInfo = AirspaceUtils.FeatureInfo.builder() + AirAreaUtils.FeatureInfo targetfeatureInfo = AirAreaUtils.FeatureInfo.builder() .lowElev(0D) .highElev(area.getFltElev()) .geometry(rqGeometry) .build(); - boolean isDuplicatedAirspace = airspaceUtils.isDuplicatedAirspace(targetfeatureInfo, AirspaceUtils.AirspaceType.GIMPO); - if (!isDuplicatedAirspace) { + + // 중첩여부 확인 + List duplicatedAirAreaIgnoreElev = airAreaUtils.getDuplicatedAirAreaIgnoreElev(targetfeatureInfo, AirAreaUtils.AirAreaType.GIMPO); + if (duplicatedAirAreaIgnoreElev == null || duplicatedAirAreaIgnoreElev.isEmpty()) { continue; } } diff --git a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java index 198ab8d1..1d21eb34 100644 --- a/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java +++ b/pav-server/src/main/java/com/palnet/biz/api/external/service/DronOneStopService.java @@ -10,7 +10,7 @@ import com.palnet.biz.jpa.entity.type.ReviewedType; import com.palnet.biz.jpa.repository.dos.*; import com.palnet.comn.code.ErrorCode; import com.palnet.comn.exception.CustomException; -import com.palnet.comn.utils.AirspaceUtils; +import com.palnet.comn.utils.AirAreaUtils; import com.palnet.comn.utils.AreaUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -196,10 +196,10 @@ public class DronOneStopService { // Buffer 추출 - 테두리 좌표 List coordBuffers = areaUtils.createCircle(centerPoint, bufferZone); - AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); - Geometry rqGeometry = airspaceUtils.createGeometryByCoordinate(coordBuffers); + AirAreaUtils airAreaUtils = AirAreaUtils.getInstance(); + Geometry rqGeometry = airAreaUtils.createGeometryByCoordinate(coordBuffers, AirAreaUtils.GeometryType.POLYGON); - AirspaceUtils.FeatureInfo targetfeatureInfo = AirspaceUtils.FeatureInfo.builder() + AirAreaUtils.FeatureInfo targetfeatureInfo = AirAreaUtils.FeatureInfo.builder() .lowElev(0D) .highElev(fltElev) .geometry(rqGeometry) @@ -212,10 +212,10 @@ public class DronOneStopService { - 김포공항 관제지역 미승인 - F: 관제권내 제한고도 */ // 김포지역의 고도 데이터가 있는 경우만 검증 - List airspaces = airspaceUtils.getAirspaces(AirspaceUtils.AirspaceType.GIMPO); + List airspaces = airAreaUtils.getAirAreaList(AirAreaUtils.AirAreaType.GIMPO); if (airspaces.isEmpty()) { - log.warn("airspace is empty: {}", AirspaceUtils.AirspaceType.GIMPO); + log.warn("airspace is empty: {}", AirAreaUtils.AirAreaType.GIMPO); throw new CustomException(ErrorCode.TS_ETC); } @@ -223,19 +223,19 @@ public class DronOneStopService { Geometry targetGeometry = targetfeatureInfo.getGeometry(); // 중복되는 공역 추출 - List duplicatedAirspaces = airspaces.stream() + List duplicatedAirspaceList = airspaces.stream() .filter(featureInfo -> featureInfo.getGeometry().intersects(targetGeometry)) .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); // 중복되는 공역이 없을 경우 "미대상 지역" - if (duplicatedAirspaces.isEmpty()) { + if (duplicatedAirspaceList.isEmpty()) { result.setApprovalCd(ApprovalCd.UNTARGETED_AREA); return result; } // 중복되는 공역으로 부터 가장 낮은 허용고도 추출 - double minHighElev = duplicatedAirspaces.stream() - .mapToDouble(AirspaceUtils.FeatureInfo::getHighElev) + double minHighElev = duplicatedAirspaceList.stream() + .mapToDouble(AirAreaUtils.FeatureInfo::getHighElev) .min() .orElse(0); @@ -254,7 +254,7 @@ public class DronOneStopService { Point centerGeometry = geometryFactory.createPoint(centerPoint); // 제한 구역 체크 - for (AirspaceUtils.FeatureInfo checkAirspace : duplicatedAirspaces) { + for (AirAreaUtils.FeatureInfo checkAirspace : duplicatedAirspaceList) { Geometry airspaceGeometry = checkAirspace.getGeometry(); if (!airspaceGeometry.contains(centerGeometry)) { continue; @@ -272,7 +272,7 @@ public class DronOneStopService { } - Double allowRadiusDouble = calculateAllowRadius(duplicatedAirspaces, centerGeometry); + Double allowRadiusDouble = calculateAllowRadius(duplicatedAirspaceList, centerGeometry); Long allowRadius = allowRadiusDouble != null ? (long) Math.floor(allowRadiusDouble) : null; Long reqRadius = allowRadius != null ? (long) Math.floor(allowRadius / 10.0) * 10 : null; result.setAllowRadius(allowRadius); @@ -281,17 +281,17 @@ public class DronOneStopService { } - private Double calculateAllowRadius(List duplicatedAirspaces, Point centerGeometry) { + private Double calculateAllowRadius(List duplicatedAirspaces, Point centerGeometry) { if (duplicatedAirspaces == null || duplicatedAirspaces.isEmpty()) { return null; } - List objectAirspaces = duplicatedAirspaces.stream().filter(airspace -> airspace.getHighElev() == 0).collect(Collectors.toList()); + List objectAirspaces = duplicatedAirspaces.stream().filter(airspace -> airspace.getHighElev() == 0).collect(Collectors.toList()); if (objectAirspaces.isEmpty()) { return null; } Double minDistance = null; - for (AirspaceUtils.FeatureInfo airspace : duplicatedAirspaces) { + for (AirAreaUtils.FeatureInfo airspace : duplicatedAirspaces) { // 수평 타입의 airspace만 해당 // 중심 좌표가 수평 airspace 내부에 있는 것만 해당 Geometry airspaceGeometry = airspace.getGeometry(); @@ -331,19 +331,18 @@ public class DronOneStopService { List distances = new ArrayList<>(); for (int i = 0; i < coordinates.length - 1; i++) { // 중심점과 선분위에서 가까운 좌표 계산 - 지구의 곡률을 고려한 좌표 - Coordinate nearestCoordinate = AirspaceUtils.getClosestPoint(coordinates[i], coordinates[i + 1], centerCoordinate); + Coordinate nearestCoordinate = AirAreaUtils.getClosestPoint(coordinates[i], coordinates[i + 1], centerCoordinate); if (Double.isNaN(nearestCoordinate.x) || Double.isNaN(nearestCoordinate.y)) { continue; } // 좌표와 좌표의 거리 계산 - Double distance = AirspaceUtils.calculatePointAndPointDistance(nearestCoordinate, centerCoordinate); + Double distance = AirAreaUtils.calculatePointAndPointDistance(nearestCoordinate, centerCoordinate); distances.add(distance); } // 중심 좌표와 가장 가까운 점 사이의 거리 - Double distance = distances.stream().min(Double::compare).orElse(null); - return distance; + return distances.stream().min(Double::compare).orElse(null); } } diff --git a/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java b/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java index f79a9b6c..9c3c17ff 100644 --- a/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java +++ b/pav-server/src/main/java/com/palnet/biz/config/InitRunner.java @@ -1,7 +1,6 @@ package com.palnet.biz.config; import com.palnet.comn.utils.AirAreaUtils; -import com.palnet.comn.utils.AirspaceUtils; import com.palnet.comn.utils.CoordUtils; import com.palnet.comn.utils.DigitalElevationModelUtils; import lombok.extern.slf4j.Slf4j; @@ -25,13 +24,6 @@ public class InitRunner implements ApplicationRunner { } catch (Exception e) { log.warn("===== InitRunner run error[DigitalElevationModelUtils] : {}", e.getMessage()); } - // airspace load - try { - AirspaceUtils apUtils = AirspaceUtils.getInstance(); - log.info("Air Space Count : {}", apUtils.getSize()); - } catch (Exception e) { - log.warn("===== InitRunner run error[AirspaceUtils] : {}", e.getMessage()); - } try { CoordUtils coordUtils = CoordUtils.getInstance();