Browse Source

绘制线段以及线段的悬停展示

wxp
ctw 2 months ago
parent
commit
73ad32a5a2
  1. 90
      ruoyi-ui/src/views/cesiumMap/index.vue

90
ruoyi-ui/src/views/cesiumMap/index.vue

@ -17,6 +17,15 @@
:result="measurementResult" :result="measurementResult"
@close="measurementResult = null" @close="measurementResult = null"
/> />
<hover-tooltip
v-if="hoverTooltip.visible"
:visible="hoverTooltip.visible"
:content="hoverTooltip.content"
:style="{
left: hoverTooltip.position.x + 'px',
top: hoverTooltip.position.y + 'px'
}"
/>
</div> </div>
</template> </template>
<script> <script>
@ -24,6 +33,7 @@ import * as Cesium from 'cesium'
import 'cesium/Build/Cesium/Widgets/widgets.css' import 'cesium/Build/Cesium/Widgets/widgets.css'
import DrawingToolbar from './DrawingToolbar.vue' import DrawingToolbar from './DrawingToolbar.vue'
import MeasurementPanel from './MeasurementPanel.vue' import MeasurementPanel from './MeasurementPanel.vue'
import HoverTooltip from './HoverTooltip.vue'
import axios from 'axios' import axios from 'axios'
import request from '@/utils/request' import request from '@/utils/request'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
@ -74,6 +84,12 @@ export default {
selectedEntity: null, // selectedEntity: null, //
// //
measurementResult: null, measurementResult: null,
//
hoverTooltip: {
visible: false,
content: '',
position: { x: 0, y: 0 }
},
// //
defaultStyles: { defaultStyles: {
point: { color: '#FF0000', size: 12 }, point: { color: '#FF0000', size: 12 },
@ -90,7 +106,8 @@ export default {
}, },
components: { components: {
DrawingToolbar, DrawingToolbar,
MeasurementPanel MeasurementPanel,
HoverTooltip
}, },
mounted() { mounted() {
console.log(this.drawDomClick,999999) console.log(this.drawDomClick,999999)
@ -131,20 +148,31 @@ export default {
this.viewer.entities.remove(this.tempPreviewEntity); this.viewer.entities.remove(this.tempPreviewEntity);
this.tempPreviewEntity = null; this.tempPreviewEntity = null;
} }
// // 线
if (this.allEntities) { if (this.allEntities) {
// // 线线
this.allEntities.forEach(item => { this.allEntities = this.allEntities.filter(item => {
if (item.entity) this.viewer.entities.remove(item.entity); // 线
const isRouteRelated = item.type === 'route' || item.routeId ||
(item.entity && item.entity.properties &&
(item.entity.properties.isMissionWaypoint || item.entity.properties.isMissionRouteLine));
// 线
if (isRouteRelated && item.entity) {
this.viewer.entities.remove(item.entity);
return false;
}
// 线
return true;
}); });
this.allEntities = [];
} }
// //
if (this.drawingPoints) { if (this.drawingPoints) {
this.drawingPoints = []; this.drawingPoints = [];
} }
console.log(">>> [清理完毕] 地图已清空,可以安全加载正式版数据。"); console.log(">>> [清理完毕] 航迹已清空,用户绘制的实体已保留。");
}, },
updateWaypointGraphicById(dbId, newName) { updateWaypointGraphicById(dbId, newName) {
const entities = this.viewer.entities.values; const entities = this.viewer.entities.values;
@ -479,6 +507,7 @@ export default {
this.hoverHandler.setInputAction((movement) => { this.hoverHandler.setInputAction((movement) => {
// //
if (this.isDrawing) { if (this.isDrawing) {
this.hoverTooltip.visible = false;
return; return;
} }
const pickedObject = this.viewer.scene.pick(movement.endPosition) const pickedObject = this.viewer.scene.pick(movement.endPosition)
@ -501,17 +530,22 @@ export default {
// 线 // 线
if (entityData && entityData.type === 'line') { if (entityData && entityData.type === 'line') {
const length = this.calculateLineLength(entityData.positions) const length = this.calculateLineLength(entityData.positions)
this.measurementResult = { //
distance: length, this.hoverTooltip = {
type: 'line' visible: true,
content: `长度:${length.toFixed(2)}`,
position: {
x: movement.endPosition.x + 10,
y: movement.endPosition.y - 10
}
}; };
} else { } else {
// 线 // 线
this.measurementResult = null; this.hoverTooltip.visible = false;
} }
} else { } else {
// //
this.measurementResult = null; this.hoverTooltip.visible = false;
} }
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE) }, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
}, },
@ -701,8 +735,9 @@ export default {
if (!this.rightClickHandler) { if (!this.rightClickHandler) {
this.initRightClickHandler(); this.initRightClickHandler();
} }
// //
this.measurementResult = null; this.measurementResult = null;
this.hoverTooltip.visible = false;
this.viewer.scene.canvas.style.cursor = 'default'; this.viewer.scene.canvas.style.cursor = 'default';
}, },
cancelDrawing() { cancelDrawing() {
@ -723,6 +758,8 @@ export default {
} }
this.drawingPoints = []; this.drawingPoints = [];
this.activeCursorPosition = null; this.activeCursorPosition = null;
//
this.hoverTooltip.visible = false;
}, },
// ******************************************************************** // ********************************************************************
// //
@ -754,11 +791,18 @@ export default {
// 线 // 线
const tempPositions = [...this.drawingPoints, newPosition]; const tempPositions = [...this.drawingPoints, newPosition];
const length = this.calculateLineLength(tempPositions); const length = this.calculateLineLength(tempPositions);
// //
this.measurementResult = { this.hoverTooltip = {
distance: length, visible: true,
type: 'line' content: `长度:${length.toFixed(2)}`,
position: {
x: movement.endPosition.x + 10,
y: movement.endPosition.y - 10
}
}; };
} else {
//
this.hoverTooltip.visible = false;
} }
} }
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE); }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
@ -856,10 +900,11 @@ export default {
const entity = this.addLineEntity([...this.drawingPoints], [...this.drawingPointEntities]); const entity = this.addLineEntity([...this.drawingPoints], [...this.drawingPointEntities]);
// //
const length = this.calculateLineLength([...this.drawingPoints]); const length = this.calculateLineLength([...this.drawingPoints]);
this.measurementResult = { // 使
distance: length, // this.measurementResult = {
type: 'line' // distance: length,
}; // type: 'line'
// };
// //
this.drawingPoints = []; this.drawingPoints = [];
this.drawingPointEntities = []; this.drawingPointEntities = [];
@ -1957,8 +2002,7 @@ export default {
return positions return positions
}, },
calculateLineLength(positions) { calculateLineLength(positions) {
if (!this.selectedRouteDetails || !this.selectedRouteDetails.waypoints) { if (!positions || positions.length < 2) {
console.warn(">>> [长度计算跳过] 航点数据暂不可用");
return 0; return 0;
} }
let totalLength = 0 let totalLength = 0

Loading…
Cancel
Save