forked from integrated_whb/integrated_whb_vue
				
			历史轨迹增加计算移动速度逻辑
							parent
							
								
									5122d11abb
								
							
						
					
					
						commit
						e92fd99252
					
				|  | @ -697,7 +697,9 @@ var CustomCesium; | ||||||
|                 l = new S.Tween({x: a._value.x, y: a._value.y, z: a._value.z}); |                 l = new S.Tween({x: a._value.x, y: a._value.y, z: a._value.z}); | ||||||
|             l.to({x: o.x, y: o.y, z: o.z}, n), l.onUpdate((({x: e, y: t, z: i}) => { |             l.to({x: o.x, y: o.y, z: o.z}, n), l.onUpdate((({x: e, y: t, z: i}) => { | ||||||
|                 let n = new Cesium.Cartesian3(e, t, i); |                 let n = new Cesium.Cartesian3(e, t, i); | ||||||
|  |                 if(this.entity){ | ||||||
|                     this.entity.position = n; |                     this.entity.position = n; | ||||||
|  |                 } | ||||||
|                 let a = r.Cartesian3ToWGS84(this.icy.viewer, n); |                 let a = r.Cartesian3ToWGS84(this.icy.viewer, n); | ||||||
|                 s(a) |                 s(a) | ||||||
|             })), l.start() |             })), l.start() | ||||||
|  | @ -1387,7 +1389,9 @@ var CustomCesium; | ||||||
|                 a = new S.Tween({x: n._value.x, y: n._value.y, z: n._value.z}); |                 a = new S.Tween({x: n._value.x, y: n._value.y, z: n._value.z}); | ||||||
|             a.to({x: s.x, y: s.y, z: s.z}, r), a.onUpdate((({x: e, y: t, z: i}) => { |             a.to({x: s.x, y: s.y, z: s.z}, r), a.onUpdate((({x: e, y: t, z: i}) => { | ||||||
|                 let r = new Cesium.Cartesian3(e, t, i); |                 let r = new Cesium.Cartesian3(e, t, i); | ||||||
|                 this.entity.position = r |                 if(this.entity){ | ||||||
|  |                     this.entity.position = r; | ||||||
|  |                 } | ||||||
|             })), a.start() |             })), a.start() | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -129,7 +129,8 @@ const { | ||||||
|             currentData[0], |             currentData[0], | ||||||
|             currentData[1] |             currentData[1] | ||||||
|           ) |           ) | ||||||
|         : undefined |         : undefined, | ||||||
|  |       1000 / data.speed | ||||||
|     ); |     ); | ||||||
|   }, |   }, | ||||||
| }); | }); | ||||||
|  | @ -156,10 +157,10 @@ const fnGetData = async () => { | ||||||
|     ElMessage.warning("请选择时间"); |     ElMessage.warning("请选择时间"); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   hadleDestroy(); |  | ||||||
|   data.positions = []; |   data.positions = []; | ||||||
|   pause(); |   pause(); | ||||||
|   reset(); |   reset(); | ||||||
|  |   hadleDestroy(); | ||||||
|   await getTrajectoriesData( |   await getTrajectoriesData( | ||||||
|     data.searchForm.personnel, |     data.searchForm.personnel, | ||||||
|     data.searchForm.dates[0], |     data.searchForm.dates[0], | ||||||
|  | @ -210,6 +211,7 @@ const fnPause = () => { | ||||||
| 
 | 
 | ||||||
| onBeforeUnmount(() => { | onBeforeUnmount(() => { | ||||||
|   console.log("onBeforeUnmount"); |   console.log("onBeforeUnmount"); | ||||||
|  |   pause(); | ||||||
|   hadleDestroy(); |   hadleDestroy(); | ||||||
| }); | }); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
|  | @ -16,7 +16,7 @@ | ||||||
| </template> | </template> | ||||||
| <script setup> | <script setup> | ||||||
| import { reactive } from "vue"; | import { reactive } from "vue"; | ||||||
| import { reduction } from "../js/map"; | import { flyTo, reduction } from "../js/map"; | ||||||
| import { useFullscreen } from "@vueuse/core"; | import { useFullscreen } from "@vueuse/core"; | ||||||
| 
 | 
 | ||||||
| const { isFullscreen, toggle } = useFullscreen(); | const { isFullscreen, toggle } = useFullscreen(); | ||||||
|  | @ -44,6 +44,7 @@ const data = reactive({ | ||||||
|         .href, |         .href, | ||||||
|       check: false, |       check: false, | ||||||
|       label: "返回中心点", |       label: "返回中心点", | ||||||
|  |       action: flyTo, | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       img: new URL("/src/assets/images/map/rico3.png", import.meta.url).href, |       img: new URL("/src/assets/images/map/rico3.png", import.meta.url).href, | ||||||
|  |  | ||||||
|  | @ -100,16 +100,16 @@ export const showLine = (positions) => { | ||||||
|  * entityArr 接收人物模型分组 |  * entityArr 接收人物模型分组 | ||||||
|  * billboardArr 接收人物铭牌分组 |  * billboardArr 接收人物铭牌分组 | ||||||
|  */ |  */ | ||||||
| export const peoMovement = (id, lon, lat, height, alt) => { | export const peoMovement = (id, lon, lat, height, alt,speed) => { | ||||||
|   entityArr.children.forEach((b, m) => { |   entityArr.children.forEach((b, m) => { | ||||||
|     if (b.entity._id === id) { |     if (b.entity._id === id) { | ||||||
|       b.updateAngle([alt, 0, 0]); // 改变人物朝向
 |       b.updateAngle([alt, 0, 0]); // 改变人物朝向
 | ||||||
|       b.animationMove(lon, lat, height, 1000, () => {}); // 人物平滑移动
 |       b.animationMove(lon, lat, height, speed, () => {}); // 人物平滑移动
 | ||||||
|       billboardArr.children[m].animationMove( |       billboardArr.children[m].animationMove( | ||||||
|         lon, |         lon, | ||||||
|         lat, |         lat, | ||||||
|         Number(Number(height) + 2.05), |         Number(Number(height) + 2.05), | ||||||
|         1000 |           speed | ||||||
|       ); // 人物铭牌平滑移动
 |       ); // 人物铭牌平滑移动
 | ||||||
|     } else { |     } else { | ||||||
|       console.log(`人物移动数据错误`); |       console.log(`人物移动数据错误`); | ||||||
|  |  | ||||||
|  | @ -18,6 +18,8 @@ import { getVideoManagerView } from "@/request/video_manager.js"; | ||||||
| const loadMap = 3; | const loadMap = 3; | ||||||
| let $entityTransparent = []; | let $entityTransparent = []; | ||||||
| const clickModel = new Map(); | const clickModel = new Map(); | ||||||
|  | let centerLon = 0; | ||||||
|  | let centerLat = 0; | ||||||
| export const initMap = (corp) => { | export const initMap = (corp) => { | ||||||
|   window.$scene = new window.CustomCesium.Scene( |   window.$scene = new window.CustomCesium.Scene( | ||||||
|     "map", |     "map", | ||||||
|  | @ -36,7 +38,9 @@ export const initMap = (corp) => { | ||||||
|     ), |     ), | ||||||
|   }); |   }); | ||||||
|   const [wgsLat, wgsLon] = bd09ToWgs84(corp.LATITUDE, corp.LONGITUDE); |   const [wgsLat, wgsLon] = bd09ToWgs84(corp.LATITUDE, corp.LONGITUDE); | ||||||
|   flyTo(wgsLon, wgsLat); |   centerLon = wgsLon; | ||||||
|  |   centerLat = wgsLat; | ||||||
|  |   flyTo(); | ||||||
|   // 亮度设置
 |   // 亮度设置
 | ||||||
|   const stages = window.$icy.viewer.scene.postProcessStages; |   const stages = window.$icy.viewer.scene.postProcessStages; | ||||||
|   window.$icy.viewer.scene.brightness = |   window.$icy.viewer.scene.brightness = | ||||||
|  | @ -127,13 +131,12 @@ const transformlng = (lng, lat) => { | ||||||
|   return ret; |   return ret; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // eslint-disable-next-line no-unused-vars
 | export const flyTo = () => { | ||||||
| const flyTo = (lng, lat) => { |  | ||||||
|   window.$carmer.flyTo({ |   window.$carmer.flyTo({ | ||||||
|     // 视角飞入
 |     // 视角飞入
 | ||||||
|     maxHeight: 1500, |     maxHeight: 1500, | ||||||
|     time: 1, |     time: 1, | ||||||
|     position: [lng, lat, 200], |     position: [centerLon, centerLat, 200], | ||||||
|     angle: [0, -60, 0], |     angle: [0, -60, 0], | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -25,6 +25,11 @@ const { open, close } = useWebSocket( | ||||||
|       const msg = unzip(event.data); |       const msg = unzip(event.data); | ||||||
|       const decodedMsg = JSON.parse(decodeURIComponent(msg)); |       const decodedMsg = JSON.parse(decodeURIComponent(msg)); | ||||||
|       if (decodedMsg.msg === "000") { |       if (decodedMsg.msg === "000") { | ||||||
|  |         console.log(decodedMsg.data); | ||||||
|  |         // decodedMsg.data = [
 | ||||||
|  |         //   "8379,119.447708695738,39.918422294137,-232.39015608699566,0.12000000000000001,,1,0,大大",
 | ||||||
|  |         //   "9979,119.447611105937,39.918443403627,-343.76932562302534,0.12000000000000001,9979,1,0,测试一",
 | ||||||
|  |         // ];
 | ||||||
|         peoMovement(decodedMsg.data); |         peoMovement(decodedMsg.data); | ||||||
|       } |       } | ||||||
|       if (decodedMsg.msg === "006") { |       if (decodedMsg.msg === "006") { | ||||||
|  | @ -32,7 +37,7 @@ const { open, close } = useWebSocket( | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     onDisconnected: () => { |     onDisconnected: () => { | ||||||
|       if (entityArr) { |       if (entityArr && entityArr.children) { | ||||||
|         entityArr.children.forEach((e) => { |         entityArr.children.forEach((e) => { | ||||||
|           e.destroy(); |           e.destroy(); | ||||||
|         }); |         }); | ||||||
|  | @ -159,25 +164,32 @@ const unzip = (b64Data) => { | ||||||
| function peoMovement(moveData) { | function peoMovement(moveData) { | ||||||
|   const map = new Map(); |   const map = new Map(); | ||||||
|   moveData.forEach((i, n) => { |   moveData.forEach((i, n) => { | ||||||
|  |     let addFlag = false; | ||||||
|     map.set(i.split(",")[0], n); |     map.set(i.split(",")[0], n); | ||||||
|     if (!entityArr || !entityArr.children) { |     if (!entityArr || !entityArr.children) { | ||||||
|  |       addFlag = true; | ||||||
|       entityArr = new window.CustomCesium.GroupModel("人物模型"); |       entityArr = new window.CustomCesium.GroupModel("人物模型"); | ||||||
|       billboardArr = new window.CustomCesium.GroupModel("人物姓名"); |       billboardArr = new window.CustomCesium.GroupModel("人物姓名"); | ||||||
|       const entity = i.split(","); |       const entity = i.split(","); | ||||||
|  |       console.log(entity[0], 111111); | ||||||
|       addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); |       addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|       addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); |       addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     entityArr.children.forEach((b, m) => { |     entityArr.children.forEach((b, m) => { | ||||||
|       if (!b.entity) { |       if (!b.entity) { | ||||||
|  |         addFlag = true; | ||||||
|         const entity = i.split(","); |         const entity = i.split(","); | ||||||
|  |         console.log(entity[0], 2222222); | ||||||
|         addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); |         addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|         addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); |         addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       const index = map.get(b.entity._id); |       const index = map.get(b.entity._id); | ||||||
|       const item = moveData[index]; |       const item = moveData[index]; | ||||||
|       if (index !== undefined) { |       const entity = i.split(","); | ||||||
|  |       if (index !== undefined && entity[0] === b.entity._id) { | ||||||
|  |         addFlag = true; | ||||||
|         const itData = item.split(","); // itData下标:0=【卡号】,(1,2,4)=【lon,lat,alt】,3=【人物朝向角度】,5=【工号】,6=【当前楼层】
 |         const itData = item.split(","); // itData下标:0=【卡号】,(1,2,4)=【lon,lat,alt】,3=【人物朝向角度】,5=【工号】,6=【当前楼层】
 | ||||||
|         if (itData[4] != null && itData.length >= 6) { |         if (itData[4] != null && itData.length >= 6) { | ||||||
|           b.updateAngle([itData[3], 0, 0]); // 改变人物朝向
 |           b.updateAngle([itData[3], 0, 0]); // 改变人物朝向
 | ||||||
|  | @ -185,25 +197,28 @@ function peoMovement(moveData) { | ||||||
|             itData[1], |             itData[1], | ||||||
|             itData[2], |             itData[2], | ||||||
|             Number(itData[4]), |             Number(itData[4]), | ||||||
|             2000, |             1000, | ||||||
|             () => {} |             () => {} | ||||||
|           ); // 人物平滑移动
 |           ); // 人物平滑移动
 | ||||||
|           billboardArr.children[m].animationMove( |           billboardArr.children[m].animationMove( | ||||||
|             itData[1], |             itData[1], | ||||||
|             itData[2], |             itData[2], | ||||||
|             Number(Number(itData[4]) + 2.05), |             Number(Number(itData[4]) + 2.05), | ||||||
|             2000 |             1000 | ||||||
|           ); // 人物铭牌平滑移动
 |           ); // 人物铭牌平滑移动
 | ||||||
|         } else { |         } else { | ||||||
|           console.log(`人物移动数据错误,错误参数:'${item}'`); |           console.log(`人物移动数据错误,错误参数:'${item}'`); | ||||||
|         } |         } | ||||||
|       } else { |       } | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     if (!addFlag) { | ||||||
|       const entity = i.split(","); |       const entity = i.split(","); | ||||||
|  |       console.log(entity[0], 333333); | ||||||
|       addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); |       addEntity(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|       addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); |       addBillboard(entity[0], entity[8], entity[1], entity[2], entity[4]); | ||||||
|     } |     } | ||||||
|   }); |   }); | ||||||
|   }); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export const handleFence = async (b) => { | export const handleFence = async (b) => { | ||||||
|  |  | ||||||
|  | @ -234,13 +234,13 @@ | ||||||
|               <el-radio v-model="data.form.FOURTYPE" :label="1"> |               <el-radio v-model="data.form.FOURTYPE" :label="1"> | ||||||
|                 平面四色图 |                 平面四色图 | ||||||
|               </el-radio> |               </el-radio> | ||||||
|               <el-radio |               <!--              <el-radio--> | ||||||
|                 v-model="data.form.FOURTYPE" |               <!--                v-model="data.form.FOURTYPE"--> | ||||||
|                 :label="2" |               <!--                :label="2"--> | ||||||
|                 @change="fnProhibitSelect" |               <!--                @change="fnProhibitSelect"--> | ||||||
|               > |               <!--              >--> | ||||||
|                 3D图 |               <!--                3D图--> | ||||||
|               </el-radio> |               <!--              </el-radio>--> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-col> |           </el-col> | ||||||
|           <el-col v-if="data.form.FOURTYPE === 1" :span="24"> |           <el-col v-if="data.form.FOURTYPE === 1" :span="24"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue