| | |
| | | }) |
| | | } |
| | | |
| | | // 生成圆形坐标点 |
| | | function buildCirclePositions(center, radius, segments = 120) { |
| | | const cartographic = Cesium.Cartographic.fromCartesian(center) |
| | | const positions = [] |
| | | for (let i = 0; i < segments; i++) { |
| | | const angle = (i / segments) * 2 * Math.PI |
| | | const lat = cartographic.latitude + (radius / 6378137) * Math.cos(angle) |
| | | const lon = cartographic.longitude + (radius / (6378137 * Math.cos(cartographic.latitude))) * Math.sin(angle) |
| | | positions.push(Cesium.Cartesian3.fromRadians(lon, lat)) |
| | | } |
| | | return positions |
| | | } |
| | | |
| | | // 渲染 |
| | | function renderingAllDevice(list) { |
| | | list.forEach(item => { |
| | |
| | | pixelOffset: new Cesium.Cartesian2(0, -20), |
| | | }, |
| | | }) |
| | | // 覆盖范围 - 5km圆形区域 |
| | | viewer.entities.add({ |
| | | position: position, |
| | | ellipse: { |
| | | semiMajorAxis: 5000, |
| | | semiMinorAxis: 5000, |
| | | material: Cesium.Color.fromBytes(45, 140, 240, 80), |
| | | outline: false, |
| | | heightReference: Cesium.HeightReference.CLAMP_TO_GROUND, |
| | | }, |
| | | }) |
| | | // 覆盖范围描边线 - 贴地 |
| | | const circlePositions = buildCirclePositions(position, 5000) |
| | | viewer.entities.add({ |
| | | polyline: { |
| | | positions: [...circlePositions, circlePositions[0]], |
| | | clampToGround: true, |
| | | width: 2, |
| | | material: Cesium.Color.fromBytes(45, 140, 240, 255), |
| | | }, |
| | | }) |
| | | }) |
| | | } |
| | | |
| | |
| | | |
| | | const menuItems = |
| | | type === 'polygon' |
| | | ? [{ title: '删除测区', class: 'del-planar-polygon' }] |
| | | ? [{ title: '删除范围', class: 'del-planar-polygon' }] |
| | | : [{ title: '删除端点', class: 'del-planar-point' }] |
| | | |
| | | menuItems.forEach(item => { |