diff --git a/packages/screen/package.json b/packages/screen/package.json index 00a2548..9091471 100644 --- a/packages/screen/package.json +++ b/packages/screen/package.json @@ -9,17 +9,18 @@ "preview": "vite preview" }, "dependencies": { - "vue": "^3.5.18", - "vue-router": "^4.6.3", - "pinia": "^3.0.3", - "element-plus": "^2.11.5", "@element-plus/icons-vue": "^2.3.2", - "echarts": "^6.0.0", - "vue-echarts": "^8.0.1", - "cesium": "^1.135.0", - "axios": "^1.13.2", + "@h5/shared": "workspace:*", + "@turf/turf": "^7.3.0", "@vueuse/core": "^14.0.0", - "@h5/shared": "workspace:*" + "axios": "^1.13.2", + "cesium": "^1.135.0", + "echarts": "^6.0.0", + "element-plus": "^2.11.5", + "pinia": "^3.0.3", + "vue": "^3.5.18", + "vue-echarts": "^8.0.1", + "vue-router": "^4.6.3" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.1", diff --git a/packages/screen/src/views/cockpit/components/CockpitLayout.vue b/packages/screen/src/views/cockpit/components/CockpitLayout.vue index 1db6ed6..69834bd 100644 --- a/packages/screen/src/views/cockpit/components/CockpitLayout.vue +++ b/packages/screen/src/views/cockpit/components/CockpitLayout.vue @@ -433,12 +433,19 @@ const renderEmergencyForcePoints = async (entityService, points, markerIcon) => * 应急资源表格行被点击时触发 */ const handleEmergencyResourceClick = (resource) => { + let focusKey = null + // 根据区县名称,过滤养护站 const filterList = filterMark.value.serviceFacility const index = filterList.findIndex((item) => item == resource.qxmc) // 实现第一次点击表示选中,第二次点击表示取消选中 - if (index > -1) filterList.splice(index, 1) - else filterList.push(resource.qxmc) + if (index > -1) { + filterList.splice(index, 1) + } + else { + filterList.push(resource.qxmc) + focusKey = resource.qxmc + } // 当点击了某个区县,需要将养护站的legend也点亮 const legendIndex = legendToolActiveItem.value.indexOf('serviceFacility') @@ -451,9 +458,16 @@ const handleEmergencyResourceClick = (resource) => { legendToolActiveItem.value.splice(legendIndex, 1) } - mapImageMarkHook.filterYHZMark("serviceFacility", (item) => { - return filterList.find((filterItem) => filterItem == item.qxmc) - }) + // 调用图例hook来进行数据的请求与图例的绘制,第一个回调函数是过滤点位,第二个是聚焦点位 + mapImageMarkHook.filterYHZMark( + "serviceFacility", + (item) => { + return filterList.find((filterItem) => filterItem == item.qxmc) + }, + (item) => { + return item.qxmc == focusKey + } + ) } diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue deleted file mode 100644 index 1626400..0000000 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue +++ /dev/null @@ -1,391 +0,0 @@ - - - - - diff --git a/packages/screen/src/views/cockpit/composables/useMapImageMark.js b/packages/screen/src/views/cockpit/composables/useMapImageMark.js index 55535f0..135b755 100644 --- a/packages/screen/src/views/cockpit/composables/useMapImageMark.js +++ b/packages/screen/src/views/cockpit/composables/useMapImageMark.js @@ -3,6 +3,7 @@ import { getAllYHZList } from '@/views/cockpit/api/commonHttp' import ImageMarkData from './ImageMarkData' import * as Cesium from 'cesium' +import * as turf from '@turf/turf' import serviceFacilityMarkerIcon from '../assets/legendTool/服务设施icon定位.png' @@ -134,6 +135,28 @@ export const useMapImageMark = (mapStore) => { imageMarkData.tooltip.close() } + /** + * 聚焦到图片实例的中心点 + */ + const focusOnMarkers = (dataList) => { + if (!dataList || dataList.length === 0) return + const positions = dataList.map((item) => { + return [item.mapData.position[0], item.mapData.position[1]] + }) + const features = turf.points(positions) + const center = turf.center(features) + const position = center.geometry.coordinates + mapStore.viewer.camera.setView({ + destination: Cesium.Cartesian3.fromDegrees(position[0], position[1], 160000), + orientation: { + heading: Cesium.Math.toRadians(0), // 方向角 + pitch: Cesium.Math.toRadians(-90), // 俯仰角(-90 为垂直向下看) + roll: 0 // 翻滚角 + } + }) + } + + /** * 根据图标名称请求后台服务,动态加载图标列表 */ @@ -165,7 +188,7 @@ export const useMapImageMark = (mapStore) => { /** * 过滤养护站图标 */ - const filterYHZMark = async (key, filterFn) => { + const filterYHZMark = async (key, filterFn, focusFn) => { const imageMarkData = imageMarkMap[key] if (!imageMarkData) return // 取消上一次请求 @@ -175,7 +198,15 @@ export const useMapImageMark = (mapStore) => { return filterFn(item) }) clearLayerEntity(key) + // 绘制过滤出来的点 drawImageEntities(dataList) + // 聚焦聚焦函数过滤出来的点 + const focusDataList = dataList.filter((item)=>{ + return focusFn(item) + }) + if(focusDataList) { + focusOnMarkers(focusDataList) + } } /**