当前位置: 首页 > article >正文

vue3中openlayers绘制多个Overlay

项目需求是要在地图上显示多个div,之前使用Overlay绘制单个显示正常,结果绘制多个的时候就显示一个,不过也解决了,下面我就把核心代码贴一下,如果有什么问题可以留言,我就是提供一个思路。
效果图
在这里插入图片描述
上面图片的信号塔是动态显示的,一般可以使用动态图片,但是我觉得动态图片达不到我想要的效果,所以改成了svg加css做出的动态效果图。

  <span v-for="(item, index) in locationList" :key="index">
    <img
    class="css_animation"
    ref="animationdiv"
    src="../../assets/Signaltower.svg"
    alt=""
    srcset=""
    :id="index"
   
  />
  </span>
  <style lang="less" scoped>
  .css_animation {
  height: 30px;
  width: 30px;
  display: none;
  animation: myfirst 3s ease-in-out;
  animation-iteration-count: infinite;
}

@keyframes myfirst {
  0%,
  100% {
    opacity: 0.5;
    // transform: translateX(-100%); /* 从左侧开始隐藏 */
  }

  50% {
    opacity: 1;
    // transform: translateX(0); /* 在中间状态下居中显示 */
  }
}
    </style>

忽略我命名的不规范,这只是我模拟的假数据

<script setup>
const aaa=ref({ "payload": {
    "lat": 43.887798338,
    "lon": 125.3587389704,
    "radiu": 4000,
    "deviceId": null,
    "locationList": [
      {
        "lat": 43.887798338,
        "lng": 125.3587389704
      },
      {
        "lat": 43.877798338,
        "lng": 125.3587389704
      },
      {
        "lat": 43.879798338,
        "lng": 125.3587389704
      }
    ]
  }
})
const ysjdequipmentlist=(timeToNextHour)=>{
locationList.value=aaa.value.payload.locationList
   aaa.value.payload.locationList.forEach((val,i) => {
          nextTick().then(() => {
        
            initImage(
                animationdiv.value[i],
                {lat: val.lat,lng:val.lng},
                aaa.value.payload.radiu,
                timeToNextHour,
                isdeviceIdShow.value
            ); 
          });            
        
        });
       
    } 
</script>

地图核心代码

 /**
     * 创建地图中心点 
     * @point_div 信号塔容器
     * @value 经纬度
     * @range 半径
     * @timeToNextHour 如果有时间传入说明要更新了
     * @deviceIdEqit 设备id
     */
  
    function initImage(point_div, value, range, timeToNextHour,deviceIdEqit) {   
        if (point_div) {
            // 半径为0不渲染信号塔和圈
            if (range != '0') {
                point_div.style.display = 'block'
                let  point_overlay = new Overlay({
                    name:'Signaltowerlayer',
                    element: point_div,
                    positioning: "center-center",
                    position: [value.lng, value.lat],
                    id:'Signaltowerlayer'
                });
               
                imap.addOverlay(point_overlay);           
                console.log(imap.getOverlays().getArray(),'添加信号塔');
            }else if(range == '0'){
                var feature = new Feature({
                    geometry: new Point( [value.lng, value.lat]),
                });
                let iconStyle = new Style({
                    image: new Icon({
                        //图片地址
                        src: isImageKong,
                        //长宽缩放比
                        scale: [0.2, 0.2],
                        //锚点位置
                        anchor: [0.2, 0.2],
                        //给图片着色
                        // color: 'rgba(255, 0, 0,0.5)',
                        //旋转弧度
                        rotation: 0
                    }),
                });
                feature.setStyle(iconStyle);
                var layers = imap.getLayers();
                layers.forEach(element => {
                    if (element?.get('name') == 'Circlelayers') {
                        element.getSource().addFeature(feature);
                    }
                  });
            }
            imap.getView().setCenter([value.lng, value.lat]);//定位
          
        }
    }

http://www.kler.cn/a/291009.html

相关文章:

  • SQL 插入数据详解
  • RestTemplate远程调用、服务注册、
  • 免费GIS工具箱:轻松将glb文件转换成3DTiles文件
  • 文心一言对接FreeSWITCH实现大模型呼叫中心
  • 【Java基础面试题024】Java中包装类型和基本类型的区别是什么?
  • javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:
  • Linux云计算学习笔记11 (日志轮转)
  • 卷到怀疑人生!一屋子人都在做Java笔试
  • Django学习(一)(项目开始时settings.py里的设置)
  • SpringBoot使用QQ邮箱发送邮件
  • NL2SQL:基于LLM的解决方案是最好的吗?
  • 利用javacv实现视频转h264
  • 万物皆对象 - 一文详解JS面向对象编程的核心方法
  • C# WPF上位机与PLC如何是实现通信同步
  • 华为云Flexus云服务器X实例与AI大模型融合实践:打造高效智能应用
  • 二、基本语法配置请求
  • 果蔬识别系统性能优化之路
  • 集成电路学习:什么是MCU微控制器
  • 软件测试中错误推断法(错误猜测法或错误推测法)
  • 排序
  • MATLAB基础应用精讲-【数模应用】极差分析(附MATLAB、python和R语言代码实现)
  • 深度学习(八)-图像色彩操作
  • 基于FCM模糊聚类算法的图像分割matlab仿真
  • 【小设计】基于宏实现的C++ 可复用setter 和getter设计
  • 嵌入式面经 嵌入式软件开发 嵌入式硬件开发 经纬恒润嵌入式面试汇总总结
  • RK3588平台开发系列讲解(显示篇)图像的宽高和跨距