1. 程式人生 > 其它 >高德地圖使用websocket後重新設定點進行優化

高德地圖使用websocket後重新設定點進行優化

// 設定第一次點賦值,重新定義一個新陣列,將裝置號為物件名,索引值作為鍵值  
const getListNEW = useCallback(
    (params, reload, gps) => {
      if (gps && markArrNew.current) {
        openBus(markArrNew.current, reload, gps);
      } else {
        openBus(params, reload);
        markArrNew.current = params;
        let json 
= {}; if (params?.list?.length > 0) { params.list.forEach((item, index) => { json[item.coding] = index; }); } else if (params?.flow_list?.length > 0) { params.flow_list.forEach((item, index) => { json[item.coding] = index; }); } console.log(
'json----', json); markArrNew1.current = json; } }, [markArrNew.current], );
// 判斷資料是否存在於物件中,如果有必定大於-1,沒有則為-1,將websocket的陣列以相同的物件名放入新陣列
let gps = dataNew; // websocket返回的陣列
let carList = dealCarList(markArrNew.current);  // 去重後的陣列
let nowIndex =
    markArrNew1.current[gps.device_name] 
> -1 ? markArrNew1.current[gps.device_name] : -1; console.log('nowIndex', nowIndex); if (nowIndex >= 0 && carList[nowIndex]?.longitude) { markArrNew2.current = markArrNew2.current || {}; markArrNew2.current[gps.device_name || gps.data.deviceNo] = dataNew;
// 每隔3秒執行一下,這個陣列,不管裡面有多少資料,都執行一遍,達到實時位置的效果  
const throttleRef = useRef(
    throttle(() => {
      console.log('throttleRef', markArrNew2.current);
      for (let i in markArrNew2.current) {
        setGPS(i, markArrNew2.current[i]);
      }
      markArrNew2.current = {};
    }, 3000),
  ).current;