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

Loading…
Cancel
Save