From 87caad7e124f708e7e7f8c9cd91dbb520c95d335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?scnoh=28=EB=85=B8=EC=8A=B9=EC=B2=A0=29?= Date: Wed, 31 Aug 2022 10:34:02 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B9=84=EC=A0=95=EC=83=81=20=EC=83=81?= =?UTF-8?q?=ED=99=A9=20=ED=8C=90=EB=B3=84=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ctr/cntrl/service/CtrCntrlService.java | 78 +++++++++++++++---- .../flt/FltPlanQueryRepository.java | 21 ++--- .../java/com/palnet/comn/utils/AreaUtils.java | 1 + 3 files changed, 77 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java index c0654b4..37a718f 100644 --- a/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java +++ b/src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java @@ -21,6 +21,7 @@ import com.palnet.comn.utils.AreaUtils; import com.palnet.comn.utils.DateUtils; import org.apache.commons.lang3.StringUtils; import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -90,7 +91,13 @@ public class CtrCntrlService { return filterList; } - + + /** + * TODO 관제 상세 조회 + * + * @param controlId + * @return + */ public CtrCntrlDtlModel getDetail(String controlId) { CtrCntrlDtlModel result = new CtrCntrlDtlModel(); @@ -134,15 +141,33 @@ public class CtrCntrlService { } + /** + * TODO 관제 이력 조회 + * + * @param controlId + * @return + */ public List getHistory(String controlId) { return query.getDroneHistory(controlId); } - + + /** + * TODO 사용자가 속한 그룹 정보 조회 + * + * @param cstmrSno + * @return + */ public List getGroupAuthInfo(Integer cstmrSno) { List list = query.findByGroupInfo(cstmrSno); return list; } - + + /** + * TODO 비정상 상황 이력 조회 + * + * @param controlId + * @return + */ public List getWarnLog(String controlId) { List logs = warnLogRepository.findAllByCntrlId(controlId); List warnLog = new ArrayList(); @@ -160,6 +185,12 @@ public class CtrCntrlService { return warnLog; } + /** + * TODO 식별 번호에 해당되는 비행구역 조회 + * + * @param idntfNum + * @return + */ @Transactional(readOnly = true) public List getFlightPlan(String idntfNum) { List rs = new ArrayList<>(); @@ -209,8 +240,12 @@ public class CtrCntrlService { // Buffer 영역 생성 저장 if("LINE".equals(area.getAreaType())) { List convertCoordinates = areaUtils.convertCoordinates(areaMapping.getCoordList()); - List bufferList = areaUtils.buffer(convertCoordinates, areaMapping.getBufferZone()); - List bufferCoordList = areaUtils.convertModel(bufferList); + List transCoordList = areaUtils.transform(convertCoordinates, "EPSG:4326", "EPSG:5181"); + + List bufferList = areaUtils.buffer(transCoordList, areaMapping.getBufferZone()); + List transBufferList = areaUtils.transform(bufferList, "EPSG:5181", "EPSG:4326"); // buffer 영역 좌표계 변환 + + List bufferCoordList = areaUtils.convertModel(transBufferList); areaMapping.setBufferCoordList(bufferCoordList); } @@ -232,6 +267,12 @@ public class CtrCntrlService { return rs; } + /** + * TODO 비행 관제 비정상 상황 판별 + * + * @param rq + * @return + */ public CtrCntrlPlanContainsRs checkPlanContains(CtrCntrlPlanContainsRq rq) { CtrCntrlPlanContainsRs rs = new CtrCntrlPlanContainsRs(); @@ -241,31 +282,42 @@ public class CtrCntrlService { for(BasFlightPlanModel plan : rq.getPlanList()) { for(BasFlightPlanAreaModel area : plan.getAreaList()) { List planArea = areaUtils.convertCoordinates(area.getCoordList()); - //드론 위치 + + // 드론 위치 Coordinate targetCoord = new Coordinate(rq.getLon(), rq.getLat()); + /** + * 1. 비행 구역에 벗어나면 모든 경우의 수는 비정상 상황으로 판단 + * 2. 비정상 상황 TYPE(비행구역, 공역)에 따라 구분 (미적용) + */ boolean areaContains = true; - boolean airspaceContains = false; +// boolean airspaceContains = false; if("LINE".equals(area.getAreaType())) { - List planBuffer = areaUtils.buffer(planArea, area.getBufferZone()); + List transPlanArea = areaUtils.transform(planArea, "EPSG:4326", "EPSG:5181"); - areaContains = areaUtils.contains(planBuffer, targetCoord); - airspaceContains = areaUtils.contains(targetCoord); + List planBuffer = areaUtils.buffer(transPlanArea, area.getBufferZone()); + List transPlanBuffer = areaUtils.transform(planBuffer, "EPSG:5181", "EPSG:4326"); + + areaContains = areaUtils.contains(transPlanBuffer, targetCoord); +// airspaceContains = areaUtils.contains(targetCoord); } if("POLYGON".equals(area.getAreaType())) { planArea.add(planArea.get(0)); areaContains = areaUtils.contains(planArea, targetCoord); - airspaceContains = areaUtils.contains(targetCoord); +// airspaceContains = areaUtils.contains(targetCoord); } if("CIRCLE".equals(area.getAreaType())) { List circle = areaUtils.createCircle(planArea.get(0), area.getBufferZone()); +// List transCircle = areaUtils.transform(circle, "EPSG:5181", "EPSG:4326"); + areaContains = areaUtils.contains(circle, targetCoord); - airspaceContains = areaUtils.contains(targetCoord); +// airspaceContains = areaUtils.contains(targetCoord); } - if(areaContains || !airspaceContains) countSuccess++; +// if(areaContains || !airspaceContains) countSuccess++; + if(areaContains) countSuccess++; } } } diff --git a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java index 2e157db..b701c54 100644 --- a/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java +++ b/src/main/java/com/palnet/biz/jpa/repository/flt/FltPlanQueryRepository.java @@ -162,16 +162,17 @@ public class FltPlanQueryRepository { )) .from(bas) .where((((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) - .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) - .or((bas.schFltStDt.goe(rq.getSchFltStDt())) - .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) - .and(bas.delYn.eq("N"))) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and((bas.schFltStDt.loe(rq.getSchFltEndDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltEndDt())))) + .or(((bas.schFltStDt.loe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.goe(rq.getSchFltStDt()))) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt()))) + .or((bas.schFltStDt.goe(rq.getSchFltStDt())) + .and(bas.schFltEndDt.loe(rq.getSchFltEndDt())))) + .and(bas.delYn.eq("N")) + .and(bas.groupId.eq(rq.getGroupId()))) .fetch(); return list; } diff --git a/src/main/java/com/palnet/comn/utils/AreaUtils.java b/src/main/java/com/palnet/comn/utils/AreaUtils.java index 0efa4b7..1083c4e 100644 --- a/src/main/java/com/palnet/comn/utils/AreaUtils.java +++ b/src/main/java/com/palnet/comn/utils/AreaUtils.java @@ -145,6 +145,7 @@ public class AreaUtils { Point target = geometryFactory.createPoint(targetCoordinate); result = plan.contains(target); +// target.contains(plan); } return result;