From 63df42d87582d02ac1ebe6481f5c50c703f87e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Thu, 25 Jul 2024 10:07:36 +0900 Subject: [PATCH] feat: AirAreaUtils - areaUtils merge --- http/server/server.http | 30 +++++++++++----- .../api/bas/dos/service/BasDosService.java | 5 ++- .../com/palnet/comn/utils/AirAreaUtils.java | 35 +++++++++++++++++++ 3 files changed, 58 insertions(+), 12 deletions(-) diff --git a/http/server/server.http b/http/server/server.http index a7316485..44e8d609 100644 --- a/http/server/server.http +++ b/http/server/server.http @@ -7,10 +7,10 @@ // } // dev-gmp-admin - const loginInfo = { - userId: "gmp-admin", - userPswd: "palnet5909!" - } + // const loginInfo = { + // userId: "gmp-admin", + // userPswd: "palnet5909!" + // } // prod-root // const loginInfo = { @@ -37,10 +37,10 @@ // } // 김항소-관제과 - // const loginInfo = { - // userId: "GMPATC2", - // userPswd: "GMPATC12!@" - // } + const loginInfo = { + userId: "GMPATC2", + userPswd: "GMPATC12!@" + } request.variables.set("loginInfo", JSON.stringify(loginInfo)) @@ -63,9 +63,21 @@ GET {{appHost}}/api/acnt/jwt/profile/{{cstmrSno}} Authorization: {{accessToken}} ### dos(드론원스톱) 목록 조회 -GET {{appHost}}/api/bas/dos/plan?searchStDt=2024-06-29&searchEndDt=2024-06-29 +GET {{appHost}}/api/bas/dos/plan?searchStDt=2024-06-14&searchEndDt=2024-06-15 Authorization: {{accessToken}} +> {% +const respData = response.body; +console.log('plan count: ', respData.length); +let cnt = 0; +respData.forEach(plan => { + cnt += plan.areaList.length; +}) + +console.log('area count: ', cnt); + + %} + ### dos(드론원스톱) 목록 수정 PUT {{appHost}}/api/bas/dos/plan Content-Type: application/json 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 7b53b89c..f53d81d2 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 @@ -152,7 +152,7 @@ public class BasDosService { Coordinate centerPoint = new Coordinate(area.getLon(), area.getLat()); if("DF0002".equals(cptAuthCode)) { // 관제과(9.3km) - AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); + AirspaceUtils airspaceUtils = AirspaceUtils.getInstance(); List airspaces = airspaceUtils.getAirspaces(AirspaceUtils.AirspaceType.GIMPO); GeometryFactory geometryFactory = new GeometryFactory(); Point point = geometryFactory.createPoint(centerPoint); @@ -162,7 +162,7 @@ public class BasDosService { }); if(!isContain) continue; }else if("DF0002-1".equals(cptAuthCode)) { - // TODO 운항과(김항소 관리 전역) + // TODO 운항과(김항소 관리 전역 + 김포공항 9.3km) // if(boundary == null) { // boundary = comnCoordinateService.getDeptGeometry("F0002"); // } @@ -874,5 +874,4 @@ public class BasDosService { return null; } } - } diff --git a/pav-server/src/main/java/com/palnet/comn/utils/AirAreaUtils.java b/pav-server/src/main/java/com/palnet/comn/utils/AirAreaUtils.java index 86695ee6..8ba0d6b0 100644 --- a/pav-server/src/main/java/com/palnet/comn/utils/AirAreaUtils.java +++ b/pav-server/src/main/java/com/palnet/comn/utils/AirAreaUtils.java @@ -15,6 +15,7 @@ import org.json.simple.parser.JSONParser; import org.locationtech.jts.geom.*; import org.locationtech.jts.operation.buffer.BufferOp; import org.locationtech.jts.operation.buffer.BufferParameters; +import org.locationtech.jts.util.GeometricShapeFactory; import org.locationtech.proj4j.BasicCoordinateTransform; import org.locationtech.proj4j.CRSFactory; import org.locationtech.proj4j.ProjCoordinate; @@ -664,6 +665,7 @@ public class AirAreaUtils { // ---------------------- AreaUtils ---------------------- + // TODO 버퍼 생성시 임의로 좌표변환을 해야만 하는지 확인 ex) espg:4326 -> espg:5181 -> espg:4326 /** * 좌표계 변환 * @@ -723,6 +725,39 @@ public class AirAreaUtils { return new ArrayList<>(Arrays.asList(coords)); } + // TODO 곡률로 구성된 원 생성방법 확인(타원이 아닌) + /** + * 타원 생성 + * + * @param CircleCoord + * @param BufferZone + * @return + */ + public List createCircle(Coordinate CircleCoord, double BufferZone) { + GeometricShapeFactory shapeFactory = new GeometricShapeFactory(); + + double lng = CircleCoord.x; + double lat = CircleCoord.y; + double diameterInMeters = BufferZone; + + shapeFactory.setCentre(new Coordinate(lng , lat)); + shapeFactory.setHeight((diameterInMeters * 2) / 111320d); + shapeFactory.setWidth((diameterInMeters * 2) / (40075000 * Math.cos(Math.toRadians(lat)) / 360)); + shapeFactory.setNumPoints(64); + + final Polygon circle = shapeFactory.createCircle(); + circle.setSRID(4326); + + Geometry geometry = geometryFactory.createGeometry(circle); + Coordinate[] coords = geometry.getCoordinates(); + List coordList = new ArrayList<>(); + coordList.addAll(Arrays.asList(coords)); + + return coordList; + } + + + public static void main(String[] args) { AirAreaUtils utils = AirAreaUtils.getInstance(); log.info("utils: {}", utils);