Browse Source

无极切换修改

zhiyuan-007 1 month ago
parent
commit
d77bf92dbe

+ 299 - 187
src/components/mapJK.vue

@@ -60,6 +60,7 @@ import FeaturePointsPlottingEvent from "../units/map/FeaturePointsPlottingEvent.
 import FeaturePolygonPlottingEvent from "../units/map/FeaturePolygonPlottingEvent.js";
 import HeatMap from "../units/map/HeatMap.js";
 import AddGraphicsEvent from "../units/map/AddGraphicsEvent.js";
+import GeometryMeshFrustumEffect from "../units/map/GeometryMeshFrustumEffect.js";
 export default {
   name: "mapJK",
   setup(){
@@ -95,6 +96,8 @@ export default {
     let addGraphicsEvent = null;
     let featurePointsPlottingEvent = null;
     let currentShowGridId = null;
+    let realFlyPointDataQueue = [];
+    let lastChosenLevelIndex = null;
     onMounted(() =>{
       bus.on('CreateMap',() =>{
         MapReady = $.Deferred();
@@ -230,6 +233,9 @@ export default {
           case "GeometryMeshPrismEffect":
             geometryMeshPrismEffect(params);
             break;
+          case "GeometryMeshFrustumEffect":
+            geometryMeshFrustumEffect(params);
+            break;
           case "PathPipe":
             pathPipe(params);
             break;
@@ -1112,18 +1118,86 @@ export default {
 
 
       //不同比例尺加载白膜
+      // function showLayersWithScaleEventsReturn(scaleValue){
+      //   let layer = m_map.layers.find(item => item.id === "WhiteMold");
+      //   if(scaleValue > 50000){
+      //     if(layer){
+      //       layer.visible = false;
+      //     }
+      //   }else{
+      //     if(layer){
+      //       layer.visible = true;
+      //     }
+      //   }
+      // }
+
+
+
+      //不同比例尺加载网格
       function showLayersWithScaleEventsReturn(scaleValue){
-        let layer = m_map.layers.find(item => item.id === "WhiteMold");
-        if(scaleValue > 50000){
-          if(layer){
-            layer.visible = false;
-          }
-        }else{
-          if(layer){
-            layer.visible = true;
-          }
+        debugger
+        switch (true) {
+          case (scaleValue > 1000000):  //15级以上隐藏
+            getRealPower2({
+              status:'hide'
+            })
+            break;
+          case (scaleValue <= 1000000 && scaleValue > 30000): //15级
+            getRealPower2({
+              status:"show",
+              id:"power_wj",
+              fields:["demographics","green","river","road","collision_buffer","no_fly_zone_buffer","clear_zone_buffer"],
+              center:m_view.center,
+              radius: (m_view.extent.xmax - m_view.extent.xmin) > (m_view.extent.ymax - m_view.extent.ymin) ? (m_view.extent.xmax - m_view.extent.xmin) : (m_view.extent.ymax - m_view.extent.ymin),
+              minZ: 0,
+              maxZ: 1000,
+              level: 15,
+              size:{ x: 1582.2726823222256, y: 1856.6079667204758, z: 1724.5956527210265 }
+            })
+            break;
+          case (scaleValue <= 30000 && scaleValue > 5000): //20级
+            getRealPower2({
+              status:"show",
+              id:"power_wj",
+              fields:["demographics","green","river","road","collision_buffer","no_fly_zone_buffer","clear_zone_buffer"],
+              center:m_view.center,
+              radius: (m_view.extent.xmax - m_view.extent.xmin) > (m_view.extent.ymax - m_view.extent.ymin) ? (m_view.extent.xmax - m_view.extent.xmin) : (m_view.extent.ymax - m_view.extent.ymin),
+              minZ: 0,
+              maxZ: 120,
+              level: 20,
+              size:{ x: 52.887881893650956, y: 61.627412608112536, z: 53.887012166300096 }
+            })
+            break;
+          case (scaleValue <= 5000 && scaleValue > 1000): //22级
+            getRealPower2({
+              status:"show",
+              id:"power_wj",
+              fields:["demographics","green","river","road","collision_buffer","no_fly_zone_buffer","clear_zone_buffer"],
+              center:m_view.center,
+              radius: (m_view.extent.xmax - m_view.extent.xmin) > (m_view.extent.ymax - m_view.extent.ymin) ? (m_view.extent.xmax - m_view.extent.xmin) : (m_view.extent.ymax - m_view.extent.ymin),
+              minZ: 0,
+              maxZ: 20,
+              level: 22,
+              size:{ x: 13.222978864358083, y: 15.406742669116284, z: 13.471596544164798 }
+            })
+            break;
+          case (scaleValue <= 1000): //23级
+            getRealPower2({
+              status:"show",
+              id:"power_wj",
+              fields:["demographics","green","river","road","collision_buffer","no_fly_zone_buffer","clear_zone_buffer"],
+              center:m_view.center,
+              radius: (m_view.extent.xmax - m_view.extent.xmin) > (m_view.extent.ymax - m_view.extent.ymin) ? (m_view.extent.xmax - m_view.extent.xmin) : (m_view.extent.ymax - m_view.extent.ymin),
+              minZ: 0,
+              maxZ: 20,
+              level: 23,
+              size:{ x: 6.7358, y: 7.7024, z: 6.6111 }
+            })
+            break;
         }
       }
+
+
       function viewshedAnalysis(params){
         let status = params.status;
         if(status === "hide"){
@@ -1241,6 +1315,28 @@ export default {
         m_map.add(geometryMeshPrismEffect.graphicsLayer);
       }
 
+
+      function geometryMeshFrustumEffect(params){
+        debugger
+        let status = params.status;
+        let f_layer = m_map.layers.find(item => item.id === "geometryMeshFrustumEffect");
+        if (f_layer) {
+          m_map.remove(f_layer);
+        }
+        if(status == "hide"){
+          return
+        }
+        let geometryMeshFrustumEffect = new GeometryMeshFrustumEffect({
+          view:m_view,
+          m_map,
+          height:params.height,
+          topRadius:params.topRadius,
+          bottomRadius:params.bottomRadius,
+          position:params.position
+        });
+        m_map.add(geometryMeshFrustumEffect.graphicsLayer);
+      }
+
       // 路径冲突
       function pathConflict(params){
 
@@ -1442,203 +1538,209 @@ export default {
             };
             socket.onmessage = (messageEvent) => {
               let messages = JSON.parse(messageEvent.data).data;
-              //发送消息
-              bus.emit('SendMessage',{
-                action:"RealTimeUAVList",
-                data:{
-                  "message":messages
-                }
-              })
-              messages.forEach(message => {
-                message.routeInfoVO.speed = message.routeInfoVO.speed * 1 +(Math.random() * 2).toFixed(2) * 1
-                if(message.overall == "SAFE"){
-                  addGraphics({
-                    "id": message.uavid+'_conflict',
-                    "status": "hide"
-                  });
-                  pathPipe({
-                    "id": message.uavid+'_conflict',
-                    "status": "hide"
-                  });
+              realFlyPointDataQueue.push(messages);
+            };
+            socket.onerror = (error) => {
+              console.error('WebSocket 出错:', error);
+            };
+
+            socket.onclose = () => {
+              console.log('WebSocket 连接已关闭');
+            };
+          }
+        };
+        connectWebSocket();
+        processRealFlyPointData();
+      }
+
+      //如果是等待,就要设置另一台无人机继续飞行
+      function processRealFlyPointData(){
+        setInterval(() => {
+          if (realFlyPointDataQueue.length > 0) {
+            const messages = realFlyPointDataQueue.shift(); // 从队列中取出数据
+            //发送消息
+            bus.emit('SendMessage',{
+              action:"RealTimeUAVList",
+              data:{
+                "message":messages
+              }
+            })
+            messages.forEach(message => {
+              message.routeInfoVO.speed = message.routeInfoVO.speed * 1 +(Math.random() * 2).toFixed(2) * 1
+              if(message.overall == "SAFE"){
+                addGraphics({
+                  "id": message.uavid+'_conflict',
+                  "status": "hide"
+                });
+                pathPipe({
+                  "id": message.uavid+'_conflict',
+                  "status": "hide"
+                });
+                flyGLTF({
+                  id:message.id,
+                  uavid:message.uavid,
+                  status:message.routeInfoVO.status == 3?"hide":"show",
+                  //duration:message.time + 100,
+                  duration:2500,
+                  point:message.position_cj,
+                  uavInfo: {
+                    type:"safe",
+                    data:message.routeInfoVO,
+                    origin:message.routeInfoVO
+                  }
+                });
+              }else{
+                if(message.nearestAircraft.status !="SAFE"){ //碰撞
                   flyGLTF({
                     id:message.id,
                     uavid:message.uavid,
                     status:message.routeInfoVO.status == 3?"hide":"show",
                     //duration:message.time + 100,
-                    duration:2100,
+                    duration:2500,
                     point:message.position_cj,
                     uavInfo: {
-                      type:"safe",
-                      data:message.routeInfoVO,
-                      origin:message.routeInfoVO
+                      type:"conflict",
+                      action:message.routeInfoVO.avoidanceType,
+                      data:message.routeInfoVO.avoidanceType == "wait" ?message.nearestAircraft:message.routeInfoVO,
+                      origin:{
+                        ...message.nearestAircraft,
+                        ...message.routeInfoVO
+                      }
                     }
                   });
+                  addGraphics({
+                    id: message.uavid+'_conflict',
+                    status:message.routeInfoVO.status == 3?"hide":"show",
+                    data: {
+                      "geometry": { "type": "point", "x": message.nearestAircraft.conflictPoint[0],   "y":  message.nearestAircraft.conflictPoint[1], "z": message.nearestAircraft.conflictPoint[2] },
+                      "attributes": { "name": "碰撞点位" }
+                    }
+                  });
+                  pathPipe({
+                    "id": message.uavid+'_conflict',
+                    "status": message.routeInfoVO.status == 3?"hide":"show",
+                    "paths":[message.nearestAircraft.conflictPath],
+                    "color": "#FF0000",
+                    "intensity": 1.5,
+                    "pipeRadius": 10
+                  });
                 }else{
-                  if(message.nearestAircraft.status !="SAFE"){ //碰撞
+                  addGraphics({
+                    "id": message.uavid+'_conflict',
+                    "status": "hide"
+                  });
+                  pathPipe({
+                    "id": message.uavid+'_conflict',
+                    "status": "hide"
+                  });
+                  // if(message.noFlyZone.status != "SAFE"){
+                  //   console.log("禁飞区预警",message);
+                  //   flyGLTF({
+                  //     id:message.id,
+                  //     uavid:message.uavid,
+                  //     status:message.routeInfoVO.status == 3?"hide":"show",
+                  //     //duration:message.time + 100,
+                  //     duration:2100,
+                  //     point:message.position_cj,
+                  //     uavInfo: {
+                  //       type:"noFlyZone",
+                  //       data:message.routeInfoVO,
+                  //       origin:message.routeInfoVO
+                  //     }
+                  //   });
+                  // }else
+
+                  if(message.routeDeviate.status != "SAFE" && message.routeDeviate.distance * 1 > 14){
+                    console.log("偏航异常预警",message);
                     flyGLTF({
                       id:message.id,
                       uavid:message.uavid,
                       status:message.routeInfoVO.status == 3?"hide":"show",
                       //duration:message.time + 100,
-                      duration:2100,
+                      duration:2500,
                       point:message.position_cj,
                       uavInfo: {
-                        type:"conflict",
-                        action:message.routeInfoVO.avoidanceType,
-                        data:message.routeInfoVO.avoidanceType == "wait" ?message.nearestAircraft:message.routeInfoVO,
+                        type:"routeDeviate",
+                        data:message.routeDeviate,
+                        index:message.index,
                         origin:{
-                          ...message.nearestAircraft,
+                          ...message.routeDeviate,
                           ...message.routeInfoVO
                         }
                       }
                     });
-                    addGraphics({
-                      id: message.uavid+'_conflict',
+                  }
+                      //   else if(message.electricityWarning.status != "SAFE"){
+                      //   console.log("电量异常预警",message);
+                      //   flyGLTF({
+                      //     id:message.id,
+                      //     uavid:message.uavid,
+                      //     status:message.routeInfoVO.status == 3?"hide":"show",
+                      //     //duration:message.time + 100,
+                      //     duration:2100,
+                      //     point:message.position_cj,
+                      //     uavInfo: {
+                      //       type:"electricityWarning",
+                      //       data:message.electricityWarning,
+                      //       origin:message.routeInfoVO
+                      //     }
+                      //   });
+                      // }
+                      //   else if(message.collision.status != "SAFE"){
+                      //   console.log("建筑物过近异常信息",message);
+                      //   flyGLTF({
+                      //     id:message.id,
+                      //     uavid:message.uavid,
+                      //     status:message.routeInfoVO.status == 3?"hide":"show",
+                      //     //duration:message.time + 100,
+                      //     duration:2100,
+                      //     point:message.position_cj,
+                      //     uavInfo: {
+                      //       type:"collision",
+                      //       data:message.collision,
+                      //       origin:message.routeInfoVO
+                      //     }
+                      //   });
+                      // }
+
+                      //   else if(message.clearZone.status != "SAFE"){
+                      //   console.log("净空区异常预警",message);
+                      //   flyGLTF({
+                      //     id:message.id,
+                      //     uavid:message.uavid,
+                      //     status:message.routeInfoVO.status == 3?"hide":"show",
+                      //     //duration:message.time + 100,
+                      //     duration:2100,
+                      //     point:message.position_cj,
+                      //     uavInfo: {
+                      //       type:"clearZone",
+                      //       data:message.clearZone,
+                      //       origin:message.routeInfoVO
+                      //     }
+                      //   });
+                  // }
+                  else{
+                    flyGLTF({
+                      id:message.id,
+                      uavid:message.uavid,
                       status:message.routeInfoVO.status == 3?"hide":"show",
-                      data: {
-                          "geometry": { "type": "point", "x": message.nearestAircraft.conflictPoint[0],   "y":  message.nearestAircraft.conflictPoint[1], "z": message.nearestAircraft.conflictPoint[2] },
-                          "attributes": { "name": "碰撞点位" }
-                        }
-                    });
-                    pathPipe({
-                      "id": message.uavid+'_conflict',
-                      "status": message.routeInfoVO.status == 3?"hide":"show",
-                      "paths":[message.nearestAircraft.conflictPath],
-                      "color": "#FF0000",
-                      "intensity": 1.5,
-                      "pipeRadius": 10
-                    });
-                  }else{
-                    addGraphics({
-                      "id": message.uavid+'_conflict',
-                      "status": "hide"
-                    });
-                    pathPipe({
-                      "id": message.uavid+'_conflict',
-                      "status": "hide"
+                      //duration:message.time + 100,
+                      duration:2500,
+                      point:message.position_cj,
+                      uavInfo: {
+                        type:"safe",
+                        data:message.routeInfoVO,
+                        origin:message.routeInfoVO
+                      }
                     });
-                    // if(message.noFlyZone.status != "SAFE"){
-                    //   console.log("禁飞区预警",message);
-                    //   flyGLTF({
-                    //     id:message.id,
-                    //     uavid:message.uavid,
-                    //     status:message.routeInfoVO.status == 3?"hide":"show",
-                    //     //duration:message.time + 100,
-                    //     duration:2100,
-                    //     point:message.position_cj,
-                    //     uavInfo: {
-                    //       type:"noFlyZone",
-                    //       data:message.routeInfoVO,
-                    //       origin:message.routeInfoVO
-                    //     }
-                    //   });
-                    // }else
-
-                      if(message.routeDeviate.status != "SAFE" && message.routeDeviate.distance * 1 > 14){
-                      console.log("偏航异常预警",message);
-                      flyGLTF({
-                        id:message.id,
-                        uavid:message.uavid,
-                        status:message.routeInfoVO.status == 3?"hide":"show",
-                        //duration:message.time + 100,
-                        duration:2100,
-                        point:message.position_cj,
-                        uavInfo: {
-                          type:"routeDeviate",
-                          data:message.routeDeviate,
-                          index:message.index,
-                          origin:{
-                            ...message.routeDeviate,
-                            ...message.routeInfoVO
-                          }
-                        }
-                      });
-                    }
-                    //   else if(message.electricityWarning.status != "SAFE"){
-                    //   console.log("电量异常预警",message);
-                    //   flyGLTF({
-                    //     id:message.id,
-                    //     uavid:message.uavid,
-                    //     status:message.routeInfoVO.status == 3?"hide":"show",
-                    //     //duration:message.time + 100,
-                    //     duration:2100,
-                    //     point:message.position_cj,
-                    //     uavInfo: {
-                    //       type:"electricityWarning",
-                    //       data:message.electricityWarning,
-                    //       origin:message.routeInfoVO
-                    //     }
-                    //   });
-                    // }
-                    //   else if(message.collision.status != "SAFE"){
-                    //   console.log("建筑物过近异常信息",message);
-                    //   flyGLTF({
-                    //     id:message.id,
-                    //     uavid:message.uavid,
-                    //     status:message.routeInfoVO.status == 3?"hide":"show",
-                    //     //duration:message.time + 100,
-                    //     duration:2100,
-                    //     point:message.position_cj,
-                    //     uavInfo: {
-                    //       type:"collision",
-                    //       data:message.collision,
-                    //       origin:message.routeInfoVO
-                    //     }
-                    //   });
-                    // }
-
-                    //   else if(message.clearZone.status != "SAFE"){
-                    //   console.log("净空区异常预警",message);
-                    //   flyGLTF({
-                    //     id:message.id,
-                    //     uavid:message.uavid,
-                    //     status:message.routeInfoVO.status == 3?"hide":"show",
-                    //     //duration:message.time + 100,
-                    //     duration:2100,
-                    //     point:message.position_cj,
-                    //     uavInfo: {
-                    //       type:"clearZone",
-                    //       data:message.clearZone,
-                    //       origin:message.routeInfoVO
-                    //     }
-                    //   });
-                    // }
-                      else{
-                      flyGLTF({
-                        id:message.id,
-                        uavid:message.uavid,
-                        status:message.routeInfoVO.status == 3?"hide":"show",
-                        //duration:message.time + 100,
-                        duration:2100,
-                        point:message.position_cj,
-                        uavInfo: {
-                          type:"safe",
-                          data:message.routeInfoVO,
-                          origin:message.routeInfoVO
-                        }
-                      });
-                    }
                   }
                 }
-              })
-
-            };
-
-            socket.onerror = (error) => {
-              console.error('WebSocket 出错:', error);
-            };
-
-            socket.onclose = () => {
-              console.log('WebSocket 连接已关闭');
-            };
+              }
+            })
+          } else {
+            console.log("No data to process.");
           }
-        };
-        connectWebSocket();
-      }
-
-      //如果是等待,就要设置另一台无人机继续飞行
-      function conflict_wait(){
-
+        }, 2500); // 每3秒处理一次数据
       }
 
       function conflict_fly(params){
@@ -1743,20 +1845,21 @@ export default {
         let size = params.size;
         let fields = params.fields;
         currentShowGridId = id;
-        showThreeCubeDetail({
-          id:id,
-          status:"hide"
-        });
-        showThreeCubeDetail({
-          id:lastId,
-          status:"hide"
-        });
         if(status == "hide"){
+          showThreeCubeDetail({
+            id:params.id,
+            status:"hide"
+          });
+          showThreeCubeDetail({
+            id:params.lastId,
+            status:"hide"
+          });
           currentShowGridId = null;
           return
         }
         getSixPowerPoints({
           id,
+          lastId,
           "x": center.x,
           "y": center.y,
           status,
@@ -1782,6 +1885,14 @@ export default {
           fields: params.fields,
           scrollId: params.scrollId,
         }).then(res =>{
+          showThreeCubeDetail({
+            id:params.id,
+            status:"hide"
+          });
+          showThreeCubeDetail({
+            id:params.lastId,
+            status:"hide"
+          });
           if(currentShowGridId == params.id){
             if(res.data.data.list?.length >= 100000 && res.data.data.scrollId){
               // res.data.data.list.forEach((point) =>{
@@ -1816,6 +1927,7 @@ export default {
 
       //需要添加初始路径(手动绘制和自动绘制)结果
       function draw(params){
+        debugger
         let id = params.id;
         let geometryType = params.type;
         let status = params.status;

+ 50 - 2
src/config/basicTool.json

@@ -42,7 +42,7 @@
             "title":"BaseMap",
             "visible": true,
             "opacity": 1,
-            "url": "https://cimweb.zjw.sh.cegn.cn:2008/MapServiceProxy/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzczNTkzMDQsImtleSI6IjkzNDkzMzIxIiwic2VydmljZU5vIjoiRDkwMDEwMDcxMjAyMzA4MDEiLCJ1c2VybmFtZSI6InB0Z2wifQ.oAFlepo9-LzFo6RxcbrXTJBIlyyEKAReYyRyn7Ks8rE",
+            "url": "https://cimweb.zjw.sh.cegn.cn:2008/MapServiceProxy/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Mzk1MzU1MDcsImtleSI6IjkzNDkzMzIxIiwic2VydmljZU5vIjoiRDkwMDEwMDcxMjAyMzA4MDEiLCJ1c2VybmFtZSI6InB0Z2wifQ.t3S-wreYHssdtkJiOiu-vG29CUKsFBG07s96UtKyv30",
             "token": ""
           }
         }
@@ -58,7 +58,7 @@
             "title":"WhiteMold",
             "visible": true,
             "opacity": 1,
-            "url": "https://cimweb.zjw.sh.cegn.cn:2008/MapServiceProxy/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzczNzExNjgsImtleSI6IjA1MTk1NDE4Iiwic2VydmljZU5vIjoiRDkwMDMwMDA2MjAyMzA4MDEiLCJ1c2VybmFtZSI6InB0Z2wifQ.6sMjNd4Faz9ZaxOw_GYNip8ww8GRMLZfKRF3xcoEKgo/SceneServer",
+            "url": "https://cimweb.zjw.sh.cegn.cn:2008/MapServiceProxy/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3Mzk0MTE0ODQsImtleSI6IjA1MTk1NDE4Iiwic2VydmljZU5vIjoiRDkwMDMwMDA2MjAyMzA4MDEiLCJ1c2VybmFtZSI6InB0Z2wifQ.EN28BolVC79OxdF8BDaNQwWsRhV3gVFkKruFNS6-MQg",
             "token": ""
           }
         }
@@ -879,6 +879,36 @@
           }
         }
       },
+      {
+        "code": "1-28-1",
+        "title": "绘制_圆锥",
+        "data": {
+          "ActionName": "Draw",
+          "Parameters": {
+            "type": "point",
+            "hasZ": true,
+            "status":"show",
+            "point": {
+              "x": 0,
+              "y": 0,
+              "z": -10
+            },
+            "symbol": {
+              "type": "point-3d",
+              "symbolLayers": [{
+                "type": "object",
+                "width": 200,
+                "height": 200,
+                "depth": 200,
+                "anchor": "origin",
+                "resource": { "primitive": "inverted-cone" },
+                "material": { "color": [0, 255, 0,0.3] }
+              }]
+            },
+            "token": ""
+          }
+        }
+      },
       {
         "code": "1-20",
         "title": "绘制_管道",
@@ -1405,6 +1435,24 @@
             "token": ""
           }
         }
+      },
+      {
+        "code": "1-44",
+        "title": "圆台绘制",
+        "data": {
+          "ActionName": "GeometryMeshFrustumEffect",
+          "Parameters": {
+            "status": "show",
+            "position": {
+              "x": 0,
+              "y": 0,
+              "z": 0
+            },
+            "height": 100,
+            "topRadius": 200,
+            "bottomRadius": 10
+          }
+        }
       }
     ]
   }

+ 100 - 0
src/units/map/GeometryMeshFrustumEffect.js

@@ -0,0 +1,100 @@
+import Graphic from "@arcgis/core/Graphic.js";
+import Mesh from "@arcgis/core/geometry/Mesh.js";
+import GraphicsLayer from "@arcgis/core/layers/GraphicsLayer.js";
+
+class GeometryMeshFrustumEffect{
+    constructor(options) {
+        this.view = options.view;
+        this.height = options.height;
+        this.topRadius = options.topRadius;
+        this.bottomRadius = options.bottomRadius;
+        this.position = options.position;
+        this.m_map = options.m_map;
+        this.graphicsLayer = null;
+        this.addGeometryMeshFrustumEffect()
+    }
+
+    addGeometryMeshFrustumEffect(){
+        debugger
+        let mesh = this.createTruncatedCone(this.bottomRadius, this.topRadius, this.height,this.position);
+        let graphic = new Graphic({
+            geometry: mesh,
+            symbol: {
+                type: "mesh-3d",
+                symbolLayers: [{
+                    type: "fill",
+                    material: { color: [
+                            201,254,246,
+                            0.2
+                        ] }
+                }]
+            }
+        });
+        this.graphicsLayer = new GraphicsLayer({
+            id: "geometryMeshFrustumEffect",
+            title: "空域分层"
+        })
+        this.graphicsLayer.add(graphic);
+    }
+
+
+    createTruncatedCone(bottomRadius, topRadius, height, position) {
+        const segments = 30; // 细分程度,值越大越平滑
+        let vertices = [];
+        let faces = [];
+
+        // 下圆
+        for (let i = 0; i < segments; i++) {
+            let angle = (i / segments) * 2 * Math.PI;
+            // 将圆心坐标 (cx, cy, cz) 加到每个顶点的位置
+            vertices.push(position.x + Math.cos(angle) * bottomRadius, position.y + Math.sin(angle) * bottomRadius, position.z);
+        }
+
+        // 上圆
+        for (let i = 0; i < segments; i++) {
+            let angle = (i / segments) * 2 * Math.PI;
+            // 将圆心坐标 (cx, cy, cz) 加到每个顶点的位置
+            vertices.push(position.x + Math.cos(angle) * topRadius, position.y + Math.sin(angle) * topRadius, position.z + height);
+        }
+
+        // 侧面
+        for (let i = 0; i < segments; i++) {
+            let next = (i + 1) % segments;
+            let bottom1 = i;
+            let bottom2 = next;
+            let top1 = i + segments;
+            let top2 = next + segments;
+
+            faces.push(bottom1, bottom2, top1);
+            faces.push(bottom2, top2, top1);
+        }
+
+        // 底面
+        for (let i = 1; i < segments - 1; i++) {
+            faces.push(0, i, i + 1);
+        }
+
+        // 顶面
+        for (let i = 1; i < segments - 1; i++) {
+            faces.push(segments, segments + i, segments + i + 1);
+        }
+
+        return new Mesh({
+            vertexAttributes: {
+                position: vertices
+            },
+            components: [{
+                faces: faces,
+                material: { color: "red" }
+            }],
+            spatialReference: {
+                wkid: 102100 // 空间参考系
+            }
+        });
+    }
+
+    clear(){
+        this.graphicsLayer.removeAll();
+    }
+}
+export default GeometryMeshFrustumEffect;

+ 1 - 1
src/units/map/InitMap.js

@@ -25,7 +25,7 @@ class InitMap{
             spatialReference:this.m_spatialReference,
             qualityProfile:"high",
             environment: {
-                starsEnabled: false,
+                starsEnabled: true,
                 atmosphereEnabled: true, //大气层
                 weather: {
                     type: "sunny",

+ 1 - 0
src/units/map/addDrawEvent.js

@@ -9,6 +9,7 @@ class AddDrawEvent {
         this.hasZ = options.hasZ || false;
         this.graphicLayer = null;
         this.path = options.path || null;
+        this.point = options.point || null;
         this.graphic = null;
         this.sketchViewModel = null;
         this.createListenerEventHander = null;

+ 4 - 1
src/units/threejs/pathPipe.js

@@ -19,6 +19,10 @@ export const PathPipeClass = {
         this.renderer = new THREE.WebGLRenderer({
             context: this.gl, // 可用于将渲染器附加到已有的渲染环境(RenderingContext)中
             premultipliedAlpha: false, // renderer是否假设颜色有 premultiplied alpha. 默认为true
+            antialias: true,
+            logarithmicDepthBuffer: true,
+            polygonOffset: true, // 启用 polygon offset 防止 z-fighting
+            alpha: true
         });
         this.renderer.setPixelRatio(window.devicePixelRatio); // 设置设备像素比。通常用于避免HiDPI设备上绘图模糊
         this.renderer.setViewport(0, 0, this.view.width, this.view.height); // 视口大小设置
@@ -186,7 +190,6 @@ export const PathPipeClass = {
         // Projection matrix can be copied directly
         this._camera.projectionMatrix.fromArray(cam.projectionMatrix);
 
-
         if (this.uniforms) {
             this.uniforms.time.value =  (this.uniforms.time.value + 0.01) % 1;
         }

+ 1 - 1
vite.config.js

@@ -28,7 +28,7 @@ export default defineConfig({
       },
       '/netapi': {
         // 代理请求之后的请求地址(你的真实接口地址)
-        target: 'http://58.34.215.19:19259/DataSearch/',
+        target: 'http://58.34.215.19:8100/DataSearch/',
         //target: 'http://10.1.163.15:19259/DataSearch/',
         //target: 'http://localhost:9250/',
         secure: false,