Browse Source

거리측정 3자리 콤마추가(거리,둘레,면적) 및 다각형 기능 작업중

master
김장현 2 months ago
parent
commit
13a22a855b
  1. 13
      src/containers/flight/OperationApprovalsContainer.js
  2. 68
      src/utility/MapUtils.js

13
src/containers/flight/OperationApprovalsContainer.js

@ -100,6 +100,7 @@ export default function OperationApprovalsContainer({ mode }) {
const [isDistanceStartPoint, setIsDistanceStartPoint] = useState(true); const [isDistanceStartPoint, setIsDistanceStartPoint] = useState(true);
const [isResetDisabled, isSetResetDisabled] = useState(true); const [isResetDisabled, isSetResetDisabled] = useState(true);
const totalDistanceRef = useRef(null); const totalDistanceRef = useRef(null);
const totalAreaRef = useRef(null);
const mouseCursorRef = useRef(null); const mouseCursorRef = useRef(null);
const distanceBoxRef = useRef(null); const distanceBoxRef = useRef(null);
@ -468,7 +469,10 @@ export default function OperationApprovalsContainer({ mode }) {
const handlerDrawTypeChange = (e, val) => { const handlerDrawTypeChange = (e, val) => {
drawObj.deleteAll(); drawObj.deleteAll();
distanceMarkers.map(i => i.remove()); distanceMarkers.map(i => i.remove());
isSetResetDisabled(true);
distanceBoxRef.current.style.display = 'block'; distanceBoxRef.current.style.display = 'block';
totalDistanceRef.current.innerText = '';
totalAreaRef.current.innerText = '';
dispatch(clientChangeDrawType(val)); dispatch(clientChangeDrawType(val));
handlerStartMode(val, drawObj); handlerStartMode(val, drawObj);
}; };
@ -482,7 +486,7 @@ export default function OperationApprovalsContainer({ mode }) {
{ {
totalDistanceRef, totalDistanceRef,
mouseCursorRef, mouseCursorRef,
distanceBoxRef totalAreaRef
}, },
obj obj
); );
@ -722,6 +726,13 @@ export default function OperationApprovalsContainer({ mode }) {
> >
거리 : 1050.24m 거리 : 1050.24m
</span> </span>
<span
ref={totalAreaRef}
className='finish'
style={{ display: 'none' }}
>
거리 : 1050.24m
</span>
</p> </p>
</div> </div>
</div> </div>

68
src/utility/MapUtils.js

@ -167,7 +167,7 @@ export const handlerFitBounds = (map, paths, padding, type, page) => {
bounds.extend(paths[i]); bounds.extend(paths[i]);
} }
} }
console.log(bounds);
if (page === 'flight') { if (page === 'flight') {
const syncPadding = Math.min( const syncPadding = Math.min(
padding, padding,
@ -673,7 +673,7 @@ export const handlerStartMode = (mode, drawObj) => {
export const handlerDrawEvents = (mapInstance, callback, refObj, drawObj) => { export const handlerDrawEvents = (mapInstance, callback, refObj, drawObj) => {
const originLineClickHandler = MapboxDraw.modes.draw_line_string.onClick; const originLineClickHandler = MapboxDraw.modes.draw_line_string.onClick;
const originPolygonClickHandler = MapboxDraw.modes.draw_polygon.onClick; const originPolygonClickHandler = MapboxDraw.modes.draw_polygon.onClick;
const { totalDistanceRef, mouseCursorRef } = refObj; const { totalDistanceRef, mouseCursorRef, totalAreaRef } = refObj;
let startPoint; let startPoint;
@ -681,7 +681,7 @@ export const handlerDrawEvents = (mapInstance, callback, refObj, drawObj) => {
originLineClickHandler.call(this, state, e); originLineClickHandler.call(this, state, e);
startPoint = e.lngLat; startPoint = e.lngLat;
const distance = getDrawDistance(drawObj); const distance = getDrawDistance(drawObj, 'draw_line_string');
if (typeof distance === 'string') { if (typeof distance === 'string') {
totalDistanceRef.current.style.display = 'block'; totalDistanceRef.current.style.display = 'block';
totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`; totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`;
@ -694,26 +694,36 @@ export const handlerDrawEvents = (mapInstance, callback, refObj, drawObj) => {
MapboxDraw.modes.draw_polygon.onClick = function (state, e) { MapboxDraw.modes.draw_polygon.onClick = function (state, e) {
originPolygonClickHandler.call(this, state, e); originPolygonClickHandler.call(this, state, e);
startPoint = e.lngLat; startPoint = e.lngLat;
if (state.currentVertexPosition > 2) {
const distance = getDrawDistance(drawObj, 'draw_polygon');
const area = getArea(drawObj);
const markerList = getDintancePointPopupList(drawObj); totalDistanceRef.current.style.display = 'block';
callback(mapInstance, markerList, drawObj); totalDistanceRef.current.innerText = `둘레 : ${distance.toLocaleString()}m`;
totalAreaRef.current.style.display = 'block';
totalAreaRef.current.innerText = `면적 : ${area}`;
}
// const markerList = getDintancePointPopupList(drawObj);
// callback(mapInstance, markerList, drawObj);
}; };
mapInstance.on('mousemove', e => { mapInstance.on('mousemove', e => {
const drawMode = drawObj.getMode();
if (startPoint) { if (startPoint) {
mouseCursorRef.current.style.display = 'none'; mouseCursorRef.current.style.display = 'none';
if (drawObj.getMode() === 'direct_select') { if (drawMode === 'direct_select') {
// distanceMarkers.map(i => i.remove()); // distanceMarkers.map(i => i.remove());
const distance = getDrawDistance(drawObj); const distance = getDrawDistance(drawObj, drawMode);
totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`; totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`;
} }
} }
if (drawObj.getMode() === 'direct_select') { if (drawMode === 'direct_select') {
const markerList = getDintancePointPopupList(drawObj); const markerList = getDintancePointPopupList(drawObj);
callback(mapInstance, markerList, drawObj); callback(mapInstance, markerList, drawObj);
} }
if (drawObj.getMode() === 'draw_line_string') { if (drawMode === 'draw_line_string') {
if (drawObj.getAll().features[0].geometry.coordinates.length === 1) { if (drawObj.getAll().features[0].geometry.coordinates.length === 1) {
mouseCursorRef.current.style.display = 'block'; mouseCursorRef.current.style.display = 'block';
mouseCursorRef.current.style.left = e.originalEvent.pageX + 'px'; mouseCursorRef.current.style.left = e.originalEvent.pageX + 'px';
@ -741,27 +751,55 @@ export const handlerDrawEvents = (mapInstance, callback, refObj, drawObj) => {
* @param {MapboxDraw} drawObj * @param {MapboxDraw} drawObj
* @returns 거리 : number * @returns 거리 : number
*/ */
export const getDrawDistance = drawObj => { export const getDrawDistance = (drawObj, drawMode) => {
const drawGeometry = drawObj.getAll().features[0]; const drawGeometry = drawObj.getAll().features[0];
let distance = 0; let distance = 0;
if (drawGeometry) { if (drawGeometry) {
const feature = []; const feature = [];
drawGeometry.geometry.coordinates.map(i => feature.push(i)); drawGeometry.geometry.coordinates.map(i => feature.push(i));
const obj = { const obj = {
type: 'Feature',
geometry: { geometry: {
coordinates: [...feature], type: drawMode === 'draw_line_string' ? 'LineString' : 'Polygon',
type: 'LineString' coordinates: [...feature]
}, }
type: 'Feature'
}; };
distance = turf.length(obj, { units: 'kilometers' }); distance = turf.length(obj, { units: 'kilometers' });
distance = distance * 1000; distance = distance * 1000;
distance = distance.toFixed(2); distance = distance
.toFixed(2)
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
if (distance === '0.00') return; if (distance === '0.00') return;
} }
return distance; return distance;
}; };
export const getArea = drawObj => {
const drawGeometry = drawObj.getAll().features[0];
let area = 0;
if (drawGeometry) {
const feature = [];
drawGeometry.geometry.coordinates.map(i => feature.push(i));
const obj = {
type: 'Feature',
geometry: {
type: 'Polygon',
coordinates: [...feature]
}
};
area = turf.area(obj);
area = area
.toFixed(2)
.toString()
.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
return area;
};
/** /**
* *
* @param {MapboxDraw} drawObj * @param {MapboxDraw} drawObj

Loading…
Cancel
Save