Browse Source

[비행관제] 비정상 상황 식별 처리

pull/2/head
노승철 2 years ago
parent
commit
37fc28ac07
  1. 13
      src/components/map/naver/NaverMap.js
  2. 33
      src/components/map/naver/dron/DronMarker.js
  3. 24
      src/components/map/naver/dron/DronPlan.js
  4. 1
      src/modules/control/gp/models/controlGpModel.ts
  5. 14
      src/modules/control/gp/sagas/controlGpSaga.ts

13
src/components/map/naver/NaverMap.js

@ -36,19 +36,6 @@ export const NaverCustomMap = () => {
useEffect(() => {
}, [mapObject]);
// useEffect(() => {
// if (controlGpContains) {
// if(!controlGpContains.contains) {
// toast.info(<DronToast title={'비정상 상황 알림'} message={'경로 상에 비행 구역을 이탈하였습니다.'}/>, {
// autoClose: 3000,
// hideProgressBar: true,
// position: toast.POSITION.BOTTOM_RIGHT,
// })
// }
// }
// }, [controlGpContains])
const NaverMapInit = () => {
const mapOptions = {
center: new naver.maps.LatLng(36.56793936069445, 127.85101412107547),

33
src/components/map/naver/dron/DronMarker.js

@ -5,6 +5,8 @@ import DronIconPulple from '../../../../assets/images/drone-marker-icon-pulple.p
import DronIcon from '../../../../assets/images/drone-marker-icon.png';
import { controlGpDtlAction, controlGpHisAction, controlDbHisAction, controlGpFlightPlanAction } from '../../../../modules/control/gp';
import { objectClickAction, objectUnClickAction } from '../../../../modules/control/map/actions/controlMapActions';
import { toast } from 'react-toastify';
import DronToast from './DronToast';
export const DronMarker = props => {
const dispatch = useDispatch();
@ -25,11 +27,38 @@ export const DronMarker = props => {
useEffect(() => {
markerInit();
if (controlGpList) {
controlGpList.forEach(gps => {
if (!gps.controlWarnCd) {
// gps marker가 지도상에 표출된 이후 시점부터 toast 표출
const marker = arrMarkers.find(marker => marker.id === gps.objectId);
if(marker) {
toast.info(
<DronToast
title={`${gps.objectId} 비정상 상황 알림`}
message={'경로 상에 비행 구역을 이탈했습니다.'}
/>
, {
autoClose: 3000,
hideProgressBar: true,
position: toast.POSITION.BOTTOM_RIGHT,
onClick: props => {
if(marker) handlerDronClick(marker);
}
}
)
}
}
})
}
}, [controlGpList]);
useEffect(() => {
arrMarkers.map(clickMarker => {
if (objectId === clickMarker.id && isClickObject) {
if (objectId === clickMarker.controlId && isClickObject) {
// clickMarker.setIcon(DronIconPulple);
clickMarker.setIcon({
url: DronIconPulple,
@ -48,7 +77,7 @@ export const DronMarker = props => {
useEffect(() => {
arrMarkers.map(clickMarker => {
if (objectId === clickMarker.id) {
if (objectId === clickMarker.controlId) {
props.map.setCenter(clickMarker.getPosition());
props.map.setZoom(13, true);
}

24
src/components/map/naver/dron/DronPlan.js

@ -49,18 +49,18 @@ const DronPlan = ({ naver, map }) => {
}
}, [controlGpList])
useEffect(() => {
if (controlGpContains) {
if(!controlGpContains.contains) {
toast.info(<DronToast title={'비정상 상황 알림'} message={'경로 상에 비행 구역을 이탈하였습니다.'}/>, {
autoClose: 3000,
hideProgressBar: true,
position: toast.POSITION.BOTTOM_RIGHT,
})
}
}
}, [controlGpContains])
// useEffect(() => {
// if (controlGpContains) {
// if(!controlGpContains.contains) {
// toast.info(<DronToast title={'비정상 상황 알림'} message={'경로 상에 비행 구역을 이탈하였습니다.'}/>, {
// autoClose: 3000,
// hideProgressBar: true,
// position: toast.POSITION.BOTTOM_RIGHT,
// })
// }
// }
// }, [controlGpContains])
/* 비행 구역 그리기. */

1
src/modules/control/gp/models/controlGpModel.ts

@ -88,6 +88,7 @@ export interface ControlGpData {
dronStatus: string;
controlStartDt: string;
heading: number;
controlWarnCd: boolean;
}
export interface ControlGroupAuthData {

14
src/modules/control/gp/sagas/controlGpSaga.ts

@ -36,6 +36,8 @@ function* getControlGpSaga(
});
}
console.log('gps ', gpsData);
yield put(
Actions.controlGpAction.success({
controlGpList: gpsData
@ -67,18 +69,6 @@ function* getControlGpSaga(
yield put(Actions.controlGpHisAction.success(history));
}
// 비행구역 contains check
if(controlGpFltPlanList) {
const containsRQ = {
idntfNum: detailData.objectId,
lat: detailData.lat,
lon: detailData.lng,
planList: controlGpFltPlanList
}
yield put(Actions.controlGpFlightPlanWarnAction.request(containsRQ));
}
}
} catch (error) {
yield put(Actions.controlGpAction.failure(error));

Loading…
Cancel
Save