|
|
|
@ -578,9 +578,7 @@ export const getDraw = mode => {
|
|
|
|
|
userProperties: true, |
|
|
|
|
boxSelect: false, |
|
|
|
|
modes: { |
|
|
|
|
...modes, |
|
|
|
|
draw_circle: CircleMode, |
|
|
|
|
drag_circle: DragCircleMode |
|
|
|
|
...modes |
|
|
|
|
}, |
|
|
|
|
styles: [ |
|
|
|
|
{ |
|
|
|
@ -673,49 +671,72 @@ export const handlerStartMode = (mode, drawObj) => {
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
export const handlerOnClickDrawLineString = (mapInstance, callback) => { |
|
|
|
|
const originClickHandler = MapboxDraw.modes.draw_line_string.onClick; |
|
|
|
|
const originMouseMoveHandler = MapboxDraw.modes.draw_line_string.onMouseMove; |
|
|
|
|
export const handlerOnClickDrawLineString = ( |
|
|
|
|
mapInstance, |
|
|
|
|
callback, |
|
|
|
|
refObj, |
|
|
|
|
drawObj |
|
|
|
|
) => { |
|
|
|
|
const originLineClickHandler = MapboxDraw.modes.draw_line_string.onClick; |
|
|
|
|
const { totalDistanceRef, mouseCursorRef, distanceBoxRef } = refObj; |
|
|
|
|
|
|
|
|
|
let startPoint; |
|
|
|
|
let markerList = []; |
|
|
|
|
let distance = 0; |
|
|
|
|
|
|
|
|
|
MapboxDraw.modes.draw_line_string.onClick = function (state, e) { |
|
|
|
|
originClickHandler.call(this, state, e); |
|
|
|
|
originLineClickHandler.call(this, state, e); |
|
|
|
|
startPoint = e.lngLat; |
|
|
|
|
state.line.coordinates.map((i, idx) => { |
|
|
|
|
if ( |
|
|
|
|
i[0] !== state.line.coordinates[state.line.coordinates.length - 1][0] |
|
|
|
|
) { |
|
|
|
|
const obj = { |
|
|
|
|
geometry: { |
|
|
|
|
coordinates: [i, state.line.coordinates[idx + 1]], |
|
|
|
|
type: 'LineString' |
|
|
|
|
}, |
|
|
|
|
type: 'Feature' |
|
|
|
|
|
|
|
|
|
const markerList = getDintancePointPopupList(drawObj); |
|
|
|
|
callback(mapInstance, markerList); |
|
|
|
|
}; |
|
|
|
|
let distance = turf.length(obj, { units: 'kilometers' }); |
|
|
|
|
distance = distance * 1000; |
|
|
|
|
distance = distance.toFixed(2); |
|
|
|
|
markerList.push({ |
|
|
|
|
text: `${distance.toLocaleString()}m`, |
|
|
|
|
coord: [state.line.coordinates[idx + 1]] |
|
|
|
|
|
|
|
|
|
mapInstance.on('mousemove', e => { |
|
|
|
|
if (startPoint) { |
|
|
|
|
mouseCursorRef.current.style.display = 'none'; |
|
|
|
|
if (drawObj.getMode() === 'direct_select') { |
|
|
|
|
// distanceMarkers.map(i => i.remove());
|
|
|
|
|
|
|
|
|
|
const distance = getDrawDistance(drawObj); |
|
|
|
|
totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (drawObj.getMode() === 'draw_line_string') { |
|
|
|
|
console.log('@@@@'); |
|
|
|
|
mouseCursorRef.current.style.display = 'block'; |
|
|
|
|
mouseCursorRef.current.style.left = e.originalEvent.pageX + 'px'; |
|
|
|
|
mouseCursorRef.current.style.top = e.originalEvent.pageY + 45 + 'px'; |
|
|
|
|
mouseCursorRef.current.innerText = '시작점 선택'; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
mapInstance.on('draw.modechange', obj => { |
|
|
|
|
if (obj.mode === 'simple_select') { |
|
|
|
|
totalDistanceRef.current.style.display = 'block'; |
|
|
|
|
const distance = getDrawDistance(drawObj); |
|
|
|
|
totalDistanceRef.current.innerText = `총 거리 : ${distance.toLocaleString()}m`; |
|
|
|
|
mouseCursorRef.current.style.display = 'none'; |
|
|
|
|
mouseCursorRef.current.style.innerText = ''; |
|
|
|
|
const markerList = getDintancePointPopupList(drawObj); |
|
|
|
|
callback(mapInstance, markerList); |
|
|
|
|
} else if (obj.mode === 'direct_select') { |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
callback(mapInstance, markerList, startPoint); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
MapboxDraw.modes.draw_line_string.onMouseMove = function (state, e) { |
|
|
|
|
originMouseMoveHandler.call(this, state, e); |
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @param {MapboxDraw} drawObj |
|
|
|
|
* @returns 총 거리 : number |
|
|
|
|
*/ |
|
|
|
|
export const getDrawDistance = drawObj => { |
|
|
|
|
const drawGeometry = drawObj.getAll().features[0]; |
|
|
|
|
let distance = 0; |
|
|
|
|
console.log; |
|
|
|
|
if (startPoint) { |
|
|
|
|
console.log(state); |
|
|
|
|
|
|
|
|
|
const drawGeometry = state.line.coordinates; |
|
|
|
|
if (drawGeometry) { |
|
|
|
|
const feature = []; |
|
|
|
|
drawGeometry.map(i => feature.push(i)); |
|
|
|
|
drawGeometry.geometry.coordinates.map(i => feature.push(i)); |
|
|
|
|
const obj = { |
|
|
|
|
geometry: { |
|
|
|
|
coordinates: [...feature], |
|
|
|
@ -726,32 +747,44 @@ export const handlerOnClickDrawLineString = (mapInstance, callback) => {
|
|
|
|
|
distance = turf.length(obj, { units: 'kilometers' }); |
|
|
|
|
distance = distance * 1000; |
|
|
|
|
distance = distance.toFixed(2); |
|
|
|
|
// mouseCursorRef.current.style.display = 'none';
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if (drawObj.getMode() === 'simple_select') {
|
|
|
|
|
// // startPoint = null;
|
|
|
|
|
// const totalDistance = document.getElementById('total_distance');
|
|
|
|
|
// totalDistance.style.display = 'block';
|
|
|
|
|
// totalDistance.innerText = `총 거리 : ${distance.toLocaleString()}m`;
|
|
|
|
|
// mouseCursorRef.current.style.display = 'none';
|
|
|
|
|
// mouseCursorRef.current.style.innerText = '';
|
|
|
|
|
// }
|
|
|
|
|
// if (drawObj.getMode() === 'direct_select') {
|
|
|
|
|
// distanceMarkers.map(i => i.remove());
|
|
|
|
|
// distanceMarkers = [];
|
|
|
|
|
// const totalDistance = document.getElementById('total_distance');
|
|
|
|
|
// totalDistance.innerText = `총 거리 : ${distance.toLocaleString()}m`;
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
// else {
|
|
|
|
|
// if (drawObj.getMode() === 'draw_line_string') {
|
|
|
|
|
// document.getElementById('distance_box').style.display = 'block';
|
|
|
|
|
// mouseCursorRef.current.style.display = 'block';
|
|
|
|
|
// mouseCursorRef.current.style.left = e.originalEvent.pageX + 'px';
|
|
|
|
|
// mouseCursorRef.current.style.top = e.originalEvent.pageY + 45 + 'px';
|
|
|
|
|
// mouseCursorRef.current.innerText = '시작점 선택';
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
return distance; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @param {MapboxDraw} drawObj |
|
|
|
|
* @returns Draw 각 포인트 거리 팝업 리스트 |
|
|
|
|
*/ |
|
|
|
|
export const getDintancePointPopupList = drawObj => { |
|
|
|
|
const drawGeometry = drawObj.getAll().features[0]; |
|
|
|
|
console.log(drawObj.getAll().features[0]); |
|
|
|
|
let markerList = []; |
|
|
|
|
if (drawGeometry?.geometry) { |
|
|
|
|
drawGeometry.geometry.coordinates.map((i, idx) => { |
|
|
|
|
if ( |
|
|
|
|
i[0] !== |
|
|
|
|
drawGeometry.geometry.coordinates[ |
|
|
|
|
drawGeometry.geometry.coordinates.length - 1 |
|
|
|
|
][0] |
|
|
|
|
) { |
|
|
|
|
const obj = { |
|
|
|
|
geometry: { |
|
|
|
|
coordinates: [i, drawGeometry.geometry.coordinates[idx + 1]], |
|
|
|
|
type: 'LineString' |
|
|
|
|
}, |
|
|
|
|
type: 'Feature' |
|
|
|
|
}; |
|
|
|
|
let distance = turf.length(obj, { units: 'kilometers' }); |
|
|
|
|
distance = distance * 1000; |
|
|
|
|
distance = distance.toFixed(2); |
|
|
|
|
markerList.push({ |
|
|
|
|
text: `${distance.toLocaleString()}m`, |
|
|
|
|
coord: [drawGeometry.geometry.coordinates[idx + 1]] |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return markerList; |
|
|
|
|
}; |
|
|
|
|