Browse Source

[관제] 공역 접근시 경고 처리

feature/auth
노승철 2 years ago
parent
commit
14348f91c8
  1. 1
      src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java
  2. 20
      src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java
  3. 28
      src/main/java/com/palnet/comn/utils/AreaUtils.java
  4. 2
      src/main/resources/application.yml

1
src/main/java/com/palnet/biz/api/bas/flight/service/BasFlightService.java

@ -23,7 +23,6 @@ import com.palnet.biz.api.bas.flight.model.BasFlightPlanAreaModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanListRq;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanPilotModel;
import com.palnet.biz.api.bas.flight.model.BasFlightPlanResultMessageRq;
import com.palnet.biz.jpa.entity.FltPlanArcrft;
import com.palnet.biz.jpa.entity.FltPlanArea;
import com.palnet.biz.jpa.entity.FltPlanAreaCoord;

20
src/main/java/com/palnet/biz/api/ctr/cntrl/service/CtrCntrlService.java

@ -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);

28
src/main/java/com/palnet/comn/utils/AreaUtils.java

@ -104,14 +104,34 @@ public class AreaUtils {
Polygon targetPolygon = geometryFactory.createPolygon(targetCoordList.toArray(new Coordinate[] {}));
Polygon effectivePolygon = geometryFactory.createPolygon(effectiveCoordList.toArray(new Coordinate[] {}));
Geometry overlabsGeometry = geometryFactory.createGeometry(effectivePolygon);
Geometry targetGeometry = geometryFactory.createGeometry(targetPolygon);
return targetPolygon.overlaps(effectivePolygon);
}
/**
* TODO 드론 관제시 정상 비행 체크 (공역)
*
* @param targetCoordinate - 드론 좌표 정보
* @return boolean - true(비정상), false(정상)
*/
public boolean contains(Coordinate targetCoordinate) {
boolean result = true;
Point target = geometryFactory.createPoint(targetCoordinate);
return targetGeometry.overlaps(overlabsGeometry);
for(Polygon polygon : polygons) {
boolean contains = polygon.contains(target);
if(contains) {
result = true;
break;
}
}
return result;
}
/**
* TODO 드론 관제시 정상 비행 체크 (Line, Polygon)
* TODO 드론 관제시 정상 비행 체크 (비행 구역)
*
* @param areaCoordList - 비행 구역 좌표 리스트
* @param targetCoordinate - 드론 좌표 정보

2
src/main/resources/application.yml

@ -50,7 +50,7 @@ spring:
# show_sql: true
# format_sql: true
rabbitmq:
host: 192.168.0.24
host: localhost
port: 5672
username: guest
password: guest

Loading…
Cancel
Save