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]);//定位
          
        }
    }
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3是最新版本的Vue.js框架,是一种现代的JavaScript框架,用于构建交互式和响应式的应用程序。OpenLayers是一个很受欢迎的用于Web地图应用程序的JavaScript库。 Vue3和OpenLayers两者结合使用可以创建出高级的Web地图应用程序,因为Vue3拥有丰富的生态系统和丰富的组件库,能够轻松地集成OpenLayers的功能和样式。Vue3非常适合用于开发Web应用程序,因为它提供了许多工具和功能来优化应用程序的性能和开发体验。 通过Vue3,您可以轻松地将OpenLayers与其他Vue组件集成在一起,以创建具有高级功能和交互性的地图应用程序。Vue3的响应式数据绑定特性可以轻松地更新OpenLayers的图层和标记等地图元素。Vue3还提供了一种方便的方法来管理地图事件,您可以方便地为每个地图事件创建自定义处理程序和生命周期钩子。 总之,Vue3和OpenLayers的结合使用可以为您带来一个强大的Web地图应用程序框架,提高开发和设计的效率,并在可扩展性和性能方面提供更好的解决方案。 ### 回答2: Vue3是一种现代web应用程序框架,可以用于构建基于数据驱动的单页面应用程序。OpenLayers则是一种开源JavaScript库,用于在Web上呈现交互式地图和地理空间数据。 Vue3和OpenLayers的结合可以为开发人员提供一种强大的工具,用于构建可视化地图和地理空间数据的应用程序。Vue3可以通过其组件系统便于地组织代码和数据,并且可以使用其响应式数据绑定来更新UI。OpenLayers可以允许开发人员轻松地创建交互式地图,并使用其丰富的API来操作地图的样式和数据。 与以前版本的Vue相比,Vue3的主要优势是其重新设计的响应式API。Vue3的响应式API更加高效和灵活,使得开发人员可以更轻松地处理大量数据的更改。在开发地图应用程序时,这非常重要,因为大量的地理空间数据会随时间而变化。Vue3的新特性还包括更简单的编译器、更好的渲染性能和更好的TypeScript支持。 熟练使用Vue3和OpenLayers可以使开发人员轻松构建功能强大且可定制的地图应用程序。使用组件化的方法来管理应用程序代码,可以使应用程序更容易维护和扩展。OpenLayers强大的功能可以使开发人员制定定制的地图风格和数据显示,从而为用户提供更丰富的交互体验。总而言之,Vue3和OpenLayers的结合是开发地图应用程序的绝佳选择。 ### 回答3: Vue3-OpenLayers是基于Vue3框架的客户端Web地图库。该库结合了Vue3的响应式数据流和OpenLayers的强大地图功能,提供了一个简单易用、灵活可定制的地图开发框架。通过Vue3-OpenLayers,开发者可以较为轻松地搭建起自己的地图应用,实现各种地图需求。 Vue3-OpenLayers库的主要特点包括: 1. 基于Vue3响应式系统,便于数据更新和管理; 2. 提供了完整的OpenLayers组件库,如地图、图层、控件、交互等,方便使用; 3. 支持灵活的地图样式配置和自定义功能开发; 4. 支持OpenLayers的各种地图源,如瓦片图、WMS、WMTS等等。 Vue3-OpenLayers库的使用对于有Vue3开发经验的开发者而言较为友好,借助Vue3的响应式能力,实现地图数据和业务逻辑的跟随变化响应,并且组件化的设计模式方便了多层级嵌套的地图应用开发。同时,开发者还可以利用Vue3提供的组件化构建特性,设计出符合自己需求的定制化地图组件。 总之,Vue3-OpenLayers是一款强大的地图库,它将Vue3和OpenLayers优势结合起来,为地图应用开发者提供了更为简单、灵活的地图开发解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值