Browse Source

Merge branch 'master' of http://gitea.palntour.com/pav/pav-home

pull/2/head
sanguu(박상현) 2 years ago
parent
commit
f2d441e6be
  1. 78
      src/components/basis/flight/plan/FlightPlanAreaDetailForm.js
  2. 86
      src/components/basis/flight/plan/FlightPlanAreaMap.js
  3. 56
      src/components/map/naver/draw/FlightPlanDraw.js
  4. 41
      src/components/map/naver/dron/DronMarker.js
  5. 12
      src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js
  6. 24
      src/modules/control/gp/apis/controlGpApi.ts

78
src/components/basis/flight/plan/FlightPlanAreaDetailForm.js

@ -17,7 +17,6 @@ const FlightPlanAreaDetailForm = ({
handleBufferList,
data,
mapControl,
// test,
isDone,
isDisabled
}) => {
@ -133,62 +132,12 @@ const FlightPlanAreaDetailForm = ({
});
}}
/>
{/* {isDisabled || isDone ? (
<Input
type='text'
id='bufferZone'
name='bufferZone'
bsSize='sm'
disabled={isDisabled || isDone}
placeholder='반경'
value={
data[0].bufferZone
? data[0].bufferZone
: ''
}
onChange={e => {
const { name, value } = e.target;
handleChange({
name,
value
});
}}
/>
) : (
<Input
type='text'
id='bufferZone'
name='bufferZone'
bsSize='sm'
readOnly={
coordList[0].lat &&
data[0].areaType &&
data[0].areaType != 'POLYGON'
? false
: true
}
placeholder='반경'
value={
data[0].bufferZone
? data[0].bufferZone
: ''
}
onChange={e => {
const { name, value } = e.target;
handleChange({
name,
value
});
}}
/>
)} */}
</div>
<div className='m_ft_box'>
<Button.Ripple
className='mr-1'
color='primary'
size='sm'
// disabled={isDisabled || isDone}
disabled={
isDisabled || isDone
? true
@ -202,33 +151,6 @@ const FlightPlanAreaDetailForm = ({
>
적용
</Button.Ripple>
{/* {isDisabled || isDone ? (
<Button.Ripple
className='mr-1'
color='primary'
size='sm'
disabled={isDisabled || isDone}
onClick={() => handleBufferList()}
>
적용
</Button.Ripple>
) : (
<Button.Ripple
className='mr-1'
color='primary'
size='sm'
disabled={
coordList[0].lat &&
data[0].areaType &&
data[0].areaType != 'POLYGON'
? false
: true
}
onClick={() => handleBufferList()}
>
적용
</Button.Ripple>
)} */}
</div>
</FormGroup>
</Col>

86
src/components/basis/flight/plan/FlightPlanAreaMap.js

@ -4,21 +4,15 @@ import {
CardBody,
Button,
Input,
Row,
Col,
InputGroup,
InputGroupAddon,
InputGroupText,
FormGroup
InputGroupText
} from 'reactstrap';
import { Key, Search } from 'react-feather';
import { Search } from 'react-feather';
import { useDispatch, useSelector } from 'react-redux';
import { FeatureAirZone } from '../../../map/naver/feature/FeatureAirZone';
import {
drawTypeChangeAction,
drawCheckAction
} from '../../../../modules/control/map/actions/controlMapActions';
import { FlightPlanDraw } from '../../../map/naver/draw/FlightPlanDraw';
import { drawTypeChangeAction } from '../../../../modules/control/map/actions/controlMapActions';
import { FlightPlanDraw_init } from '../../../map/naver/draw/FlightPlanDraw';
import { initFlightBas } from '../../../../modules/basis/flight/models/basisFlightModel';
import {
AREA_COORDINATE_LIST_SAVE,
@ -44,6 +38,11 @@ const FlightPlanAreaMap = props => {
const [searchRes, setSearchRes] = useState([]);
const [isSearch, setIsSearch] = useState(false);
const [dragSize, setDragSize] = useState(70);
const [pastDragCircle, setDragCircle] = useState([]);
const [number, setNumber] = useState(0);
useEffect(() => {
NaverMapInit();
return () => {
@ -51,6 +50,10 @@ const FlightPlanAreaMap = props => {
};
}, []);
useEffect(() => {
pastDragCircle.forEach(c => c.setRadius(dragSize));
}, [dragSize]);
useEffect(() => {
setIsMapLoad(true);
}, [airArea]);
@ -65,18 +68,21 @@ const FlightPlanAreaMap = props => {
areaCoordList[0].coordList[0].lat !== 0 &&
areaCoordList[0].coordList[0].lon !== 0
) {
if (map) {
map.setCenter(
new naver.maps.LatLng(
areaCoordList[0].coordList[0].lat,
areaCoordList[0].coordList[0].lon
)
);
setMapAreaCoordList(areaCoordList);
if (number === 0) {
if (map) {
map.setCenter(
new naver.maps.LatLng(
areaCoordList[0].coordList[0].lat,
areaCoordList[0].coordList[0].lon
)
);
setNumber(number + 1);
}
}
setMapAreaCoordList(areaCoordList);
}
}
}, [areaCoordList, map]);
}, [areaCoordList, map, number]);
const ModeInit = () => {
setMode(mapControl.drawType);
@ -107,7 +113,7 @@ const FlightPlanAreaMap = props => {
const mapOptions = {
// center: new naver.maps.LatLng(36.56793936069445, 127.85101412107547),
center: new naver.maps.LatLng(37.520357, 126.610166),
zoom: !areaCoordList ? 13 : bufferzoom.bufferzoom,
zoom: !areaCoordList ? 14 : bufferzoom.bufferzoom,
zoomControl: true,
mapTypeId: naver.maps.MapTypeId.NORMAL,
zoomControlOptions: {
@ -115,7 +121,20 @@ const FlightPlanAreaMap = props => {
style: naver.maps.ZoomControlStyle.SMALL
}
};
setMap(new naver.maps.Map('map', mapOptions));
const mapp = new naver.maps.Map('map', mapOptions);
naver.maps.Event.addListener(mapp, 'idle', function () {
// console.log(dragSize);
});
naver.maps.Event.addListener(mapp, 'zoom_changed', function () {
let radius = 17920;
for (let i = 6; i < 22; i++) {
if (i == mapp.zoom) {
setDragSize(radius);
}
radius = radius / 2;
}
});
setMap(mapp);
};
const handlerDrawType = val => {
@ -205,7 +224,7 @@ const FlightPlanAreaMap = props => {
<div style={{ position: 'relative' }}>
<div id='map' style={{ width: '100%', height: '60vh' }}>
{map ? (
<FlightPlanDraw
<FlightPlanDraw_init
map={map}
naver={naver}
mode={mode}
@ -216,6 +235,9 @@ const FlightPlanAreaMap = props => {
handleConfirm={props.handleConfirm}
isDone={props.isDone}
isDisabled={props.isDisabled}
dragSize={dragSize}
pastDragCircle={pastDragCircle}
setDragCircle={setDragCircle}
/>
) : null}
@ -273,26 +295,6 @@ const FlightPlanAreaMap = props => {
</div>
</div>
</div>
{/* <div className='map-comp'>
<Input
type='text'
id='searchInput'
name='searchInput'
className='area-input'
placeholder='검색명을 입력하세요.'
onChange={handleChange}
bsSize='sm'
/>
<Button.Ripple
className='area-button'
color='primary'
onClick={handleSearch}
size='sm'
>
검색
</Button.Ripple>
</div> */}
</div>
</div>

56
src/components/map/naver/draw/FlightPlanDraw.js

@ -4,10 +4,9 @@ import { useDispatch, useSelector } from 'react-redux';
import * as Actions from '../../../../modules/basis/flight/actions/basisFlightAction';
import { InfoModal } from '../../../modal/InfoModal';
export const FlightPlanDraw = props => {
export const FlightPlanDraw_init = props => {
const dispatch = useDispatch();
const mapControl = useSelector(state => state.controlMapReducer);
// const isYour = props.isYour;
const isDone = props.isDone;
const isDisabled = props.isDisabled;
@ -15,7 +14,9 @@ export const FlightPlanDraw = props => {
const [pastBuffer, setBuffer] = useState();
const [pastPolygon, setPolygon] = useState();
const [pastCircle, setCircle] = useState([]);
const [pastDragCircle, setDragCircle] = useState([]);
// const [pastDragCircle, setDragCircle] = useState([]);
const pastDragCircle = props.pastDragCircle;
const setDragCircle = props.setDragCircle;
const [pastClickEve, setClickEve] = useState();
const [pastMarker, setMarker] = useState([]);
@ -33,7 +34,6 @@ export const FlightPlanDraw = props => {
const naver = props.naver;
const map = props.map;
let mode = props.mode;
let dragCircleSize = props.dragCircleSize;
let areaInfo;
let lastDistance;
@ -62,6 +62,12 @@ export const FlightPlanDraw = props => {
dispatch(Actions.FLIGHT_PLAN_AREA_BUFFER_LIST.request(areaDetail));
};
const [radiusCircle, setRadiusCircle] = useState();
useEffect(() => {
setRadiusCircle(props.dragSize);
}, [props.dragSize]);
useEffect(() => {
drawInit();
}, [mapControl.drawType]);
@ -119,12 +125,6 @@ export const FlightPlanDraw = props => {
setDragCircle([]);
setBuffer();
}
if (pastCircle.length != 0) {
pastCircle.forEach(prev => prev.setMap(null));
naver.maps.Event.removeListener(pastClickEve);
setCircle([]);
}
if (pastPolygon) {
pastPolygon.setMap(null);
pastDragCircle.forEach(c => c.setMap(null));
@ -132,6 +132,12 @@ export const FlightPlanDraw = props => {
setPolygon();
setDragCircle([]);
}
if (pastCircle.length != 0) {
pastCircle.forEach(prev => prev.setMap(null));
naver.maps.Event.removeListener(pastClickEve);
setCircle([]);
}
if (pastMarker.length != 0) {
pastMarker.forEach(m => m.setMap(null));
setMarker([]);
@ -198,11 +204,9 @@ export const FlightPlanDraw = props => {
title: '좌표 최소 개수',
desc: '좌표를 두 개 점으로 이어주세요.'
});
polyline.setMap(null);
polyline = '';
}
setFigure(polyline);
} else if (polygon) {
let path = polygon.getPath();
@ -549,7 +553,7 @@ export const FlightPlanDraw = props => {
};
areaInfo.coordinates.push(point);
areaInfo.bufferZone = circle.getRadius();
areaInfo.bufferZone = Math.round(circle.getRadius());
areaInfo.areaType = 'CIRCLE';
}
props.handleCoordinates(areaInfo);
@ -592,8 +596,6 @@ export const FlightPlanDraw = props => {
let clickSet;
{
// isDisabled === true ? (clickSet = false) : (clickSet = true);
// (isYour || isDone) === true ? (clickSet = false) : (clickSet = true);
(isDisabled || isDone) === true
? (clickSet = false)
: (clickSet = true);
@ -626,17 +628,14 @@ export const FlightPlanDraw = props => {
fillColor: '#ffffff',
fillOpacity: 1,
center: paths[i],
radius: 17,
// radius: dragCircleSize,
map: map,
clickable: clickSet,
...(props.dragSize ? { radius: radiusCircle } : { radius: 140 })
// radius: 17,
// clickable: true
clickable: clickSet
})
);
// dragCircleEve.push(naver.maps.Event.addListener(dragCircle[i], 'mousedown', function () { onMouseDownDrag(i) }))
{
// isDisabled
// isYour || isDone
isDisabled || isDone
? {}
: dragCircleEve.push(
@ -740,17 +739,14 @@ export const FlightPlanDraw = props => {
fillColor: '#ffffff',
fillOpacity: 1,
center: paths[i],
radius: 15,
// radius: dragCircleSize,
map: map,
clickable: clickSet,
...(props.dragSize ? { radius: radiusCircle } : { radius: 140 })
// radius: 17,
// clickable: true
clickable: clickSet
})
);
// dragCircleEve.push(naver.maps.Event.addListener(dragCircle[i], 'mousedown', function () { onMouseDownDrag(i) }))
{
// isDisabled
// isYour || isDone
isDisabled || isDone
? {}
: dragCircleEve.push(
@ -837,19 +833,15 @@ export const FlightPlanDraw = props => {
circle = new naver.maps.Circle({
strokeColor: '#283046',
strokeOpacity: 1,
// fillColor: '#ff0000',
fillColor: '#7367F0',
fillOpacity: 0.1,
center: paths[0],
radius: areas.bufferZone,
map: map,
// clickable: true
clickable: clickSet
// clickable: true
});
// Eve.mousedownEve = naver.maps.Event.addListener(circle, 'mousedown', function () { onMouseDownDrag(0); })
{
// isDisabled
// isYour || isDone
isDisabled || isDone
? {}
: (Eve.mousedownEve = naver.maps.Event.addListener(

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

@ -30,7 +30,6 @@ export const DronMarker = props => {
let naver = props.naver;
let map = props.map;
let CustomOverlay;
let infoWindow;
const infowindowOpen = data => {
const content = `
@ -77,16 +76,23 @@ export const DronMarker = props => {
}, [controlGpList]);
useEffect(() => {
let imageUrl;
arrMarkers.map(clickMarker => {
if (objectId === clickMarker.controlId && isClickObject) {
clickMarker.setIcon({
url: clickMarker.id.indexOf('PALDRONE') > -1 ? DronDetailIcon : FlightDetailIcon,
origin: new naver.maps.Point(0, 0),
anchor: new naver.maps.Point(15, 15)
});
if (objectId === clickMarker.controlId && isClickObject) {
imageUrl =
clickMarker.id.indexOf('PALDRONE') > -1
? DronDetailIcon
: FlightDetailIcon;
clickMarker.setIcon({
content: `<img src="${imageUrl}" alt="" style="transform: rotate(${clickMarker.gps.heading}deg)">`,
origin: new naver.maps.Point(0, 0),
anchor: new naver.maps.Point(15, 15)
});
} else {
imageUrl =
clickMarker.id.indexOf('PALDRONE') > -1 ? DronIcon : FlightIcon;
clickMarker.setIcon({
url: clickMarker.id.indexOf('PALDRONE') > -1 ? DronIcon : FlightIcon,
content: `<img src="${imageUrl}" alt="" style="transform: rotate(${clickMarker.gps.heading}deg)">`,
origin: new naver.maps.Point(0, 0),
anchor: new naver.maps.Point(15, 15)
});
@ -106,18 +112,22 @@ export const DronMarker = props => {
//마커를 그린다.
const addMarkers = (position, id, controlId, gps) => {
const iconOption = {};
const homePath = window.HOME_PATH || '.';
iconOption.url = id.indexOf('PALDRONE') > -1 ? DronIcon : FlightIcon;
iconOption.origin = new naver.maps.Point(0, 0);
iconOption.anchor = new naver.maps.Point(15, 15);
iconOption.anchor = new naver.maps.Point(15, 15);
const marker = new naver.maps.Marker({
position: position,
title: id,
id: id,
controlId: controlId,
icon: iconOption,
icon: {
content: `<img src="${iconOption.url}" alt="" style="transform: rotate(${gps.heading}deg)">`,
origin: iconOption.origin,
anchor: iconOption.anchor
},
gps: gps
});
marker.setMap(props.map);
@ -146,15 +156,14 @@ export const DronMarker = props => {
}
});
setArrMarkers(m => [...m, marker]);
};
setArrMarkers(m => [...m, marker]);
};
const handlerDronClick = (controlId, idntfNum) => {
const handlerDronClick = (controlId, idntfNum) => {
// get detail, history, flight-plan
dispatch(objectClickAction(controlId));
dispatch(controlGpDtlAction.request(controlId));
dispatch(controlGpFlightPlanAction.request(idntfNum));
dispatch(controlGpFlightPlanAction.request(idntfNum));
};
//마커를 삭제 한다.

12
src/containers/basis/flight/plan/FlightPlanAreaDetailContainer.js

@ -70,11 +70,21 @@ const FlightPlanAreaDetailContainer = ({ handleModal, isDone, isDisabled }) => {
};
const handleChange = ({ name, value }) => {
let size;
if (name === 'bufferZone') {
const regex = /^[0-9]{0,100}$/;
if (regex.test(value)) {
size = value;
} else {
return;
}
}
setAreaDetail(prevState => {
const areaList = prevState.map((area, i) => {
return {
...area,
[name]: value
...(value === 'bufferZone' ? { [name]: size } : { [name]: value })
// [name]: value
};
});

24
src/modules/control/gp/apis/controlGpApi.ts

@ -26,7 +26,7 @@ export const controlGpApi = {
const { data }: ResponseControlGpWarnLog = await axios.get(
`api/ctr/cntrl/warn/detail/${id}`
);
return data;
},
getDetail: async (id: string) => {
@ -46,30 +46,24 @@ export const controlGpApi = {
return null;
}
const { data } = await axios.get(
`api/ctr/cntrl/flight_plan/${idntfNum}`
);
const { data } = await axios.get(`api/ctr/cntrl/flight_plan/${idntfNum}`);
return data;
},
checkPlanContains: async (rq: ControlGpPlanContainsRQ) => {
if(!rq.idntfNum) {
return null;
if (!rq.idntfNum) {
return null;
}
const { data } = await axios.post(
`api/ctr/cntrl/contains`, rq
);
const { data } = await axios.post(`api/ctr/cntrl/contains`, rq);
return data;
},
getArcrftWarnList: async (id: string) => {
if(!id) return null;
if (!id) return null;
const { data } = await axios.get(`api/ctr/cntrl/arcrft/warn/list?id=${id}`);
const { data } = await axios.get(
`api/ctr/cntrl/arcrft/warn/list?id=${id}`
);
return data;
}
};

Loading…
Cancel
Save