|
|
|
@ -235,7 +235,7 @@ public class CtrCntrlService {
|
|
|
|
|
public CtrCntrlPlanContainsRs checkPlanContains(CtrCntrlPlanContainsRq rq) { |
|
|
|
|
CtrCntrlPlanContainsRs rs = new CtrCntrlPlanContainsRs(); |
|
|
|
|
|
|
|
|
|
int countContains = 0; |
|
|
|
|
int countSuccess = 0; |
|
|
|
|
|
|
|
|
|
if(rq.getIdntfNum() != null) { |
|
|
|
|
for(BasFlightPlanModel plan : rq.getPlanList()) { |
|
|
|
@ -244,27 +244,33 @@ public class CtrCntrlService {
|
|
|
|
|
//드론 위치
|
|
|
|
|
Coordinate targetCoord = new Coordinate(rq.getLon(), rq.getLat()); |
|
|
|
|
|
|
|
|
|
boolean result = true; |
|
|
|
|
boolean areaContains = true; |
|
|
|
|
boolean airspaceContains = false; |
|
|
|
|
if("LINE".equals(area.getAreaType())) { |
|
|
|
|
List<Coordinate> planBuffer = areaUtils.buffer(planArea, area.getBufferZone()); |
|
|
|
|
result = areaUtils.contains(planBuffer, targetCoord); |
|
|
|
|
|
|
|
|
|
areaContains = areaUtils.contains(planBuffer, targetCoord); |
|
|
|
|
airspaceContains = areaUtils.contains(targetCoord); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if("POLYGON".equals(area.getAreaType())) { |
|
|
|
|
result = areaUtils.contains(planArea, targetCoord); |
|
|
|
|
areaContains = areaUtils.contains(planArea, targetCoord); |
|
|
|
|
airspaceContains = areaUtils.contains(targetCoord); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if("CIRCLE".equals(area.getAreaType())) { |
|
|
|
|
List<Coordinate> circle = areaUtils.createCircle(planArea.get(0), area.getBufferZone()); |
|
|
|
|
result = areaUtils.contains(circle, targetCoord); |
|
|
|
|
areaContains = areaUtils.contains(circle, targetCoord); |
|
|
|
|
airspaceContains = areaUtils.contains(targetCoord); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if(result) countContains++; |
|
|
|
|
if(areaContains || !airspaceContains) countSuccess++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (countContains > 0) { |
|
|
|
|
// 1개라도
|
|
|
|
|
if (countSuccess > 0) { |
|
|
|
|
rs.setWarning(false); |
|
|
|
|
} else { |
|
|
|
|
rs.setWarning(true); |
|
|
|
|