Openlayer系列:点击地图上的点位,弹出信息窗在点位上方显示;

9 篇文章 0 订阅
6 篇文章 0 订阅
文章描述了一种在OpenLayer6集成于Vue2和Element的应用中,当用户点击地图点位时,如何创建并定位一个弹出框在点位上方显示的方法。涉及到的关键技术包括Overlay和Select,以及处理单击事件来更新地图中心和缩放级别。
摘要由CSDN通过智能技术生成

遇到问题

有没有精通openlayer web开发呀
需要点地图的上点位的时候,弹出框在点位上方显示(UI效果图如下,使用的vue2和element、openlayer6)

在这里插入图片描述

解决思路

我自己找的方法,openlayer的Overlay、Select都使用到了,

// 创建一个弹窗 Overlay 对象
      var overlay = new Overlay({
        element: container, //绑定 Overlay 对象和 DOM 对象的
        autoPan: true, // 定义弹出窗口在边缘点击时候可能不完整 设置自动平移效果
        offset: [-110, -180],//偏移量,使得弹出框显示在坐标点正上方
        autoPanAnimation: {
          duration: 250 //自动平移效果的动画时间 9毫秒
        }
      });

      window.map.addOverlay(overlay);

      window.map.on('singleclick', function (evt) {
        
        let coordinate = evt.coordinate
        // 点击尺 (这里是尺(米),并不是经纬度);
        var feature = window.map.forEachFeatureAtPixel(evt.pixel, (feature) => {
          return feature;
        });

        console.log('singleclick feature1', feature);

        if (JSON.stringify(feature) == 'undefined' || !feature) {

          console.log('closed le');
          _that.isShowDialog = false;
          return;
        } else if (!feature.values_.data) {
          _that.isShowDialog = false;
          return;
        }
        if (feature.values_.data) { //捕捉到要素
          let Coordinates = [feature.values_.data.longitude, feature.values_.data.latitude];
          // window.map.getView().setCenter(fromLonLat(Coordinates, 'EPSG:3857'))
          window.map.getView().animate({ // 只设置需要的属性即可
            target: 'map',
            center: fromLonLat(Coordinates, 'EPSG:3857'),
            zoom: 12.6, // 缩放级别
            rotation: undefined, // 缩放完成view视图旋转弧度
            duration: 1000 // 缩放持续时间,默认不需要设置
          })
        }
    }

    overlay.setPosition(coordinate); //把 overlay 显示到指定的 x,y坐标
          if (_that.mapInfo.projectName) {
            console.log('_that.mapInfo.projectName 44', _that.mapInfo.projectName);
            setTimeout(() => {
              _that.isShowDialog = true;
            }, 600);
          }
    


未完待续

OpenLayers中,当你想要在用户点击地图时动态地添加标记图片并显示相关信息弹窗,可以按照以下步骤操作: 1. **初始化地图**: 首先,你需要加载OpenLayers库,并创建一个地图容器。例如: ```javascript var map = new ol.Map({ target: 'map', // 地图容器id layers: [your_layer], // 添加基础地图层 view: new ol.View({ center: [lon, lat], // 中心坐标 zoom: 8 // 初始缩放级别 }) }); ``` 2. **监听click事件**: 使用`map.on('click', function(event) { ... })`来监听地图点击事件。在这个回调函数里处理点击动作: ```javascript map.on('click', function(event) { // event.coordinate 是鼠标点击的位置 }); ``` 3. **添加标记和图片**: 在点击事件的回调中,你可以创建一个新的标记(marker)实例,附上图片: ```javascript var marker = new ol.Feature({ geometry: new ol.geom.Point(event.coordinate), properties: { imgUrl: 'path/to/your/image.png', // 图片URL popupContent: '<div>这里是弹窗内容</div>' // 弹窗HTML } }); var source = new ol.source.Vector({features: [marker]}); var layer = new ol.layer.Vector({ source: source, style: your_style_function(marker) // 样式函数根据需求定制 }); map.addLayer(layer); ``` 4. **显示弹窗**: 当标记被添加到地图上时,可以利用OpenLayers的Popup组件来显示弹窗信息: ```javascript var popup = new ol.control.Popup(); map.addControl(popup); popup.showAt(event.coordinate, marker.getPopup().content); ``` 5. **样式定制**: `style_function(marker)` 可能需要自定义,以便调整标记的外观,比如颜色、图标等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪潮行舟

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值