Browse Source

电子灾害地图调整

Hwf 2 months ago
parent
commit
125d36da7d

+ 9 - 10
public/transform/systemTransform-worker.js

@@ -1,16 +1,15 @@
 importScripts('libSystemTransform.js');
 importScripts('libSystemTransform.js');
     const RECORDRTP = 0;  //录制一份未经过转封装的码流原始数据,用于定位问题
     const RECORDRTP = 0;  //录制一份未经过转封装的码流原始数据,用于定位问题
     let dataType = 1;
     let dataType = 1;
-    
+
     // 转封装库回调函数
     // 转封装库回调函数
     self.STCallBack = function (fileIndex,indexLen, data, dataLen)
     self.STCallBack = function (fileIndex,indexLen, data, dataLen)
     {
     {
         //stFrameInfo的类型见DETAIL_FRAME_INFO
         //stFrameInfo的类型见DETAIL_FRAME_INFO
 		let stFrameInfo = Module._GetDetialFrameInfo();
 		let stFrameInfo = Module._GetDetialFrameInfo();
         let nIsMp4Index = stFrameInfo.nIsMp4Index;
         let nIsMp4Index = stFrameInfo.nIsMp4Index;
-		//console.log("FrameType is " , stFrameInfo);	
+		//console.log("FrameType is " , stFrameInfo);
 		//console.log("nIsMp4Index is " + nIsMp4Index);
 		//console.log("nIsMp4Index is " + nIsMp4Index);
-        //debugger
         var pData = null;
         var pData = null;
         pData = new Uint8Array(dataLen);
         pData = new Uint8Array(dataLen);
         pData.set(Module.HEAPU8.subarray(data, data + dataLen));
         pData.set(Module.HEAPU8.subarray(data, data + dataLen));
@@ -34,10 +33,10 @@ importScripts('libSystemTransform.js');
 		//let nFrameNum = stFrameInfo.nFrameNum;
 		//let nFrameNum = stFrameInfo.nFrameNum;
 		//let nTimeStamp = stFrameInfo.nTimeStamp;
 		//let nTimeStamp = stFrameInfo.nTimeStamp;
         //let nIsMp4Index = stFrameInfo.nIsMp4Index;
         //let nIsMp4Index = stFrameInfo.nIsMp4Index;
-		
-		//console.log("FrameType is " + stFrameType);	
-		//console.log("nIsMp4Index is " + nIsMp4Index);	
-        
+
+		//console.log("FrameType is " + stFrameType);
+		//console.log("nIsMp4Index is " + nIsMp4Index);
+
     }
     }
 
 
     // self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
     // self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
@@ -55,14 +54,14 @@ importScripts('libSystemTransform.js');
             } else {
             } else {
                 var iHeadLen = data.len;
                 var iHeadLen = data.len;
                 var pHead = Module._malloc(iHeadLen);
                 var pHead = Module._malloc(iHeadLen);
-    
+
                 self.writeArrayToMemory(new Uint8Array(data.buf), pHead);
                 self.writeArrayToMemory(new Uint8Array(data.buf), pHead);
                 var iTransType = data.packType;//目标格式
                 var iTransType = data.packType;//目标格式
                 var iRet = Module._CreatHandle(pHead, iTransType, 4096);
                 var iRet = Module._CreatHandle(pHead, iTransType, 4096);
                 if (iRet != 0) {
                 if (iRet != 0) {
                     console.log("_CreatHandle failed!" + iRet);
                     console.log("_CreatHandle failed!" + iRet);
                 } else {
                 } else {
-                    iRet = Module._SysTransRegisterDataCallBack();			
+                    iRet = Module._SysTransRegisterDataCallBack();
                     if(iRet != 0)
                     if(iRet != 0)
                     {
                     {
                         console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
                         console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
@@ -117,4 +116,4 @@ importScripts('libSystemTransform.js');
             }
             }
             close();
             close();
         }
         }
-    };
+    };

+ 8 - 0
src/types/components.d.ts

@@ -28,6 +28,7 @@ declare module 'vue' {
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
     ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
@@ -56,15 +57,22 @@ declare module 'vue' {
     ElRow: typeof import('element-plus/es')['ElRow']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
     ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
+    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
     ElSlider: typeof import('element-plus/es')['ElSlider']
     ElSlider: typeof import('element-plus/es')['ElSlider']
+    ElStep: typeof import('element-plus/es')['ElStep']
+    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTabPane: typeof import('element-plus/es')['ElTabPane']
+    ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
     ElText: typeof import('element-plus/es')['ElText']
     ElTimeline: typeof import('element-plus/es')['ElTimeline']
     ElTimeline: typeof import('element-plus/es')['ElTimeline']
     ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
+    ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElTree: typeof import('element-plus/es')['ElTree']
     ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']

+ 64 - 54
src/views/comprehensiveGuarantee/electronicDisasterMapManage/index.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div ref="containerRef" class="map-container">
   <div ref="containerRef" class="map-container">
-    <div id="aMap2" class="map"></div>
+    <div id="aMap2" :class="[isMapSelect ? 'map custom-cursor' : 'map']" />
     <!--左上事件列表-->
     <!--左上事件列表-->
     <div class="event-box">
     <div class="event-box">
       <div class="event-box2">
       <div class="event-box2">
@@ -121,7 +121,7 @@
                   <div class="line"></div>
                   <div class="line"></div>
                   <div class="text-box2">
                   <div class="text-box2">
                     <i class="icon2" />
                     <i class="icon2" />
-                    <div class="gradient-text2">{{ item.distance / 1000 }}</div>
+                    <div class="gradient-text2">{{ item.distance }}</div>
                     <div class="text2">公里</div>
                     <div class="text2">公里</div>
                   </div>
                   </div>
                 </div>
                 </div>
@@ -170,11 +170,13 @@ import BigNumber from 'bignumber.js';
 import gcoord from 'gcoord';
 import gcoord from 'gcoord';
 import startImg from '@/assets/images/map/start.png';
 import startImg from '@/assets/images/map/start.png';
 import endImg from '@/assets/images/map/end.png';
 import endImg from '@/assets/images/map/end.png';
+import markImg from '@/assets/images/map/mark.png';
 
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { emergency_resource, disaster_relief_material } = toRefs<any>(proxy?.useDict('emergency_resource', 'disaster_relief_material'));
 const { emergency_resource, disaster_relief_material } = toRefs<any>(proxy?.useDict('emergency_resource', 'disaster_relief_material'));
 // 应急物资
 // 应急物资
 const amapKey = 'e45d4caa2bef3c84714a2ed9b1e27d98';
 const amapKey = 'e45d4caa2bef3c84714a2ed9b1e27d98';
+const tkKey = 'a8df87f1695d224d2679aa805c1268d9';
 let expand = ref(true);
 let expand = ref(true);
 let AMap, map, driving, geocoder;
 let AMap, map, driving, geocoder;
 let routeData = ref([]);
 let routeData = ref([]);
@@ -280,13 +282,21 @@ let queryParams = reactive({
 });
 });
 let total = ref(0);
 let total = ref(0);
 let dataList = ref([]);
 let dataList = ref([]);
+let isMapSelect = ref(false);
 const toSelect = () => {
 const toSelect = () => {
   map.on('click', handleClickMap);
   map.on('click', handleClickMap);
+  isMapSelect.value = true;
+  showAddress.value = false;
+  dataList.value = [];
+  routeData.value = [];
+  clearMarker2();
+  clearLine();
 };
 };
 const handleClickMap = (e) => {
 const handleClickMap = (e) => {
   map.off('click', handleClickMap);
   map.off('click', handleClickMap);
   getAddress([e.lnglat.getLng(), e.lnglat.getLat()]);
   getAddress([e.lnglat.getLng(), e.lnglat.getLat()]);
   showRight.value = true;
   showRight.value = true;
+  isMapSelect.value = false;
 };
 };
 const getAddress = async (location) => {
 const getAddress = async (location) => {
   const gcj02Coord = gcoord.transform(location, gcoord.WGS84, gcoord.GCJ02);
   const gcj02Coord = gcoord.transform(location, gcoord.WGS84, gcoord.GCJ02);
@@ -295,7 +305,6 @@ const getAddress = async (location) => {
   // 调用高德逆向地理编码 API
   // 调用高德逆向地理编码 API
   const response = await fetch(`https://restapi.amap.com/v3/geocode/regeo?key=${amapKey}&location=${gcj02Coord[0]},${gcj02Coord[1]}`);
   const response = await fetch(`https://restapi.amap.com/v3/geocode/regeo?key=${amapKey}&location=${gcj02Coord[0]},${gcj02Coord[1]}`);
   const result = await response.json();
   const result = await response.json();
-
   // 解析地址信息
   // 解析地址信息
   if (result.status === '1' && result.regeocode) {
   if (result.status === '1' && result.regeocode) {
     tempState.address = result.regeocode.formatted_address;
     tempState.address = result.regeocode.formatted_address;
@@ -332,7 +341,7 @@ const selectEvent = (item, unFitView) => {
   // 以 icon URL 的形式创建一个途经点
   // 以 icon URL 的形式创建一个途经点
   const icon = new AMap.Icon({
   const icon = new AMap.Icon({
     size: new AMap.Size(19, 31),
     size: new AMap.Size(19, 31),
-    image: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png'
+    image: markImg
   });
   });
   selectMarker = new AMap.Marker({
   selectMarker = new AMap.Marker({
     position: new AMap.LngLat(item.longitude, item.latitude),
     position: new AMap.LngLat(item.longitude, item.latitude),
@@ -346,44 +355,59 @@ const selectEvent = (item, unFitView) => {
   getList();
   getList();
 };
 };
 
 
+let selectIndex = ref(-1);
+let startPath = ref([]);
+let endPath = ref([]);
 const handleRoutes = async (item) => {
 const handleRoutes = async (item) => {
-  const lnglat = gcoord.transform([item.longitude, item.latitude], gcoord.WGS84, gcoord.GCJ02);
-  const lnglat2 = gcoord.transform([selectData.value.longitude, selectData.value.latitude], gcoord.WGS84, gcoord.GCJ02);
-  const start = [lnglat[0], lnglat[1]];
-  const end = lnglat2;
+  selectIndex.value = -1;
+  const lnglat = [Number(item.longitude), Number(item.latitude)];
+  const lnglat2 = [Number(selectData.value.longitude), Number(selectData.value.latitude)];
+  const start = [lnglat[0].toFixed(6), lnglat[1].toFixed(6)];
+  const end = [lnglat2[0].toFixed(6), lnglat2[1].toFixed(6)];
+  startPath.value = [Number(item.longitude), Number(item.latitude)];
+  endPath.value = [selectData.value.longitude, selectData.value.latitude];
   showAddress.value = true;
   showAddress.value = true;
   routesAddress.value = item.address;
   routesAddress.value = item.address;
-  // 10速度最快 返回结果会躲避拥堵,路程较短,尽量缩短时间,与高德地图的默认策略也就是不进行任何勾选一致
-  // 16费用最低 返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致
-  const url = `https://restapi.amap.com/v3/direction/driving?origin=${start}&destination=${end}&key=${amapKey}`;
-  const response = await fetch(url + '&strategy=10');
-
-  if (!!response.ok) {
-    const data = await response.json();
-    if (data.route && data.route.paths) {
-      data.route.paths.forEach((item) => {
-        item.duration = formatDate(item.duration);
-      });
-      routeData.value = data.route.paths;
-    } else {
-      routeData.value = [];
-    }
-  }
-  const response2 = await fetch(url + '&strategy=16');
-  if (!!response2.ok) {
-    const data2 = await response2.json();
-    if (data2.route && data2.route.paths) {
-      data2.route.paths.forEach((item) => {
-        item.duration = formatDate(item.duration);
+  const ststrategy = ['最快路线', '最短路线', '避开高速'];
+  routeData.value = [];
+  for (let i = 0; i < 3; i++) {
+    const url = `http://api.tianditu.gov.cn/drive?postStr={"orig":"${start}","dest":"${end}","style":"${i}"}&type=search&tk=${tkKey}`;
+    const response = await fetch(url);
+    if (response.status == 200) {
+      const parser = new DOMParser();
+      const xmlString = await response.text();
+      const xmlDoc = parser.parseFromString(xmlString, 'application/xml');
+      const routelatlon = xmlDoc.getElementsByTagName('routelatlon')[0].textContent;
+      const distance = xmlDoc.getElementsByTagName('distance')[0].textContent;
+      const duration = xmlDoc.getElementsByTagName('duration')[0].textContent;
+      const parameters = xmlDoc.getElementsByTagName('parameters')[0].textContent;
+      console.log(parameters);
+      const coordinates = routelatlon
+        .split(';') // 按分号分割为单个坐标点
+        .filter(Boolean) // 过滤空字符串(如末尾分号)
+        .map((pair) => {
+          const [lng, lat] = pair.split(',').map(Number); // 按逗号分割为经纬度
+          return [lng, lat]; // 返回二维数组格式
+        });
+      routeData.value.push({
+        duration: formatDate(Number(duration)),
+        distance: Number(distance).toFixed(3),
+        coordinates: coordinates,
+        strategy: ststrategy[i]
       });
       });
-      routeData.value = routeData.value.concat(data2.route.paths);
+      // 默认展示第一条
+      if (i === 0) {
+        drawRoute(routeData.value[0], 0);
+      }
     }
     }
   }
   }
 };
 };
 
 
-const drawRoute = (route) => {
-  const path = parseRouteToPath(route);
+const drawRoute = (route, index) => {
+  selectIndex.value = index;
+  const path = route.coordinates;
   clearLine();
   clearLine();
+
   const icon1 = new AMap.Icon({
   const icon1 = new AMap.Icon({
     size: new AMap.Size(19, 31),
     size: new AMap.Size(19, 31),
     image: startImg
     image: startImg
@@ -415,29 +439,10 @@ const drawRoute = (route) => {
     lineJoin: 'round'
     lineJoin: 'round'
   });
   });
   routeLine.setMap(map);
   routeLine.setMap(map);
-
   // 调整视野达到最佳显示区域
   // 调整视野达到最佳显示区域
   map.setFitView([startMarker, endMarker, routeLine]);
   map.setFitView([startMarker, endMarker, routeLine]);
 };
 };
 
 
-// 解析DrivingRoute对象,构造成AMap.Polyline的path参数需要的格式
-// DrivingResult对象结构参考文档 https://lbs.amap.com/api/javascript-api/reference/route-search#m_DriveRoute
-const parseRouteToPath = (route) => {
-  var path = [];
-
-  for (var i = 0, l = route.steps.length; i < l; i++) {
-    var step = route.steps[i];
-
-    // 按分号分割字符串,得到一个包含经纬度对的数组
-    const coordinatesPairs = step.polyline.split(';');
-    // 将每个经纬度对进一步分割成经度和纬度,并转换为一个对象
-    path = coordinatesPairs.map((pair) => {
-      const [longitude, latitude] = pair.split(',');
-      return gcoord.transform([longitude, latitude], gcoord.GCJ02, gcoord.WGS84);
-    });
-  }
-  return path;
-};
 function formatDate(seconds: number) {
 function formatDate(seconds: number) {
   // 将秒数转换为BigNumber
   // 将秒数转换为BigNumber
   const secondsBn = new BigNumber(seconds);
   const secondsBn = new BigNumber(seconds);
@@ -959,8 +964,8 @@ onUnmounted(() => {
           }
           }
         }
         }
         .list-content {
         .list-content {
-          height: calc(100vh - 372px);
-          overflow-y: auto;
+          //height: calc(100vh - 372px);
+          //overflow-y: auto;
           .list-item {
           .list-item {
             display: flex;
             display: flex;
             justify-content: space-between;
             justify-content: space-between;
@@ -1222,4 +1227,9 @@ onUnmounted(() => {
 :deep(.amap-info-close) {
 :deep(.amap-info-close) {
   display: none;
   display: none;
 }
 }
+.custom-cursor {
+  cursor:
+    url('@/assets/images/map/mark.png') 13 31,
+    auto !important;
+}
 </style>
 </style>

+ 0 - 1
src/views/globalMap/RightMenu/OnlinePlotting/index.vue

@@ -888,7 +888,6 @@ const handleShowPatternData = () => {
     }
     }
     data.push(item);
     data.push(item);
   });
   });
-  debugger
   const res = mapUtils.drawData(data);
   const res = mapUtils.drawData(data);
   res.forEach((item) => {
   res.forEach((item) => {
     overlays.push(item);
     overlays.push(item);

+ 0 - 1
src/views/informationissue/informationList.vue

@@ -167,7 +167,6 @@ const disposeStatusOptions = reactive([
 ]);
 ]);
 
 
 const getStatusClass = (value) => {
 const getStatusClass = (value) => {
-  debugger
   if (value === 3) {
   if (value === 3) {
     return 'color3';
     return 'color3';
   } else if (value === 1) {
   } else if (value === 1) {

+ 0 - 1
src/views/informationissue/sendDetail.vue

@@ -135,7 +135,6 @@ const { queryParams, form, tableData, loading, total, showSearch, channelOptions
 
 
 // 获取表格数据
 // 获取表格数据
 const fetchTableData = () => {
 const fetchTableData = () => {
-  debugger
   getSentList(queryParams.value).then((res) => {
   getSentList(queryParams.value).then((res) => {
     console.log(res.data);
     console.log(res.data);
     tableData.value = res.data;
     tableData.value = res.data;

+ 0 - 1
src/views/inspectionWork/riskManagement.vue

@@ -278,7 +278,6 @@ const handleUpdate = async (row: RiskVO) => {
 };
 };
 //删除
 //删除
 const handleDelete = (row) => {
 const handleDelete = (row) => {
-  // debugger
   const riskUid = row && row.id ? [row?.id] : ids.value; //planUid 转换为 riskUid
   const riskUid = row && row.id ? [row?.id] : ids.value; //planUid 转换为 riskUid
   proxy?.$modal.confirm('是否确认删除选择的数据项?').then(() => {
   proxy?.$modal.confirm('是否确认删除选择的数据项?').then(() => {
     deleteRisk(riskUid).then(() => {
     deleteRisk(riskUid).then(() => {

+ 0 - 1
src/views/knowledge/HiddenStandards/index.vue

@@ -213,7 +213,6 @@ const handleSelectionChange = (selection) => {
 // }
 // }
 const baseUrl = import.meta.env.VITE_APP_BASE_API;
 const baseUrl = import.meta.env.VITE_APP_BASE_API;
 const downloadPdf = (file: any) => {
 const downloadPdf = (file: any) => {
-  // debugger
   download2(baseUrl + '/file/download/' + file.file_name, file.file_name_desc);
   download2(baseUrl + '/file/download/' + file.file_name, file.file_name_desc);
 };
 };