openlayers4.6-marker添加点击事件

  getIconMakers(map) {
    var pos = ol.proj.fromLonLat([118.208889, 35.3725]);
    var pos2 = ol.proj.fromLonLat([112.208889, 34.3725]);
    console.dir(pos);

    var startMarker = new ol.Feature({
      type: 'icon',
      name: 'museum',
      geometry: new ol.geom.Point(pos)
    });
    var vectorSource = new ol.source.Vector({});
    vectorSource.addFeature(startMarker);

    var vectorLayer = new ol.layer.Vector({
      source: vectorSource,
      style: new ol.style.Style({
        image: new ol.style.Icon({
          anchor: [0.5, 1],
          src: 'https://openlayers.org/en/v4.6.5/examples/data/icon.png'
        })
      })
    });
    map.addOverlay(vectorLayer);

    var element = document.getElementById('popup1');
    var popup = new ol.Overlay({
      element: element,
      positioning: 'bottom-center',
      stopEvent: false,
      offset: [0, -50]
    });
    map.addOverlay(popup);

    map.on('click', function (evt) {
      var pixel = map.getEventPixel(evt.originalEvent);
      var feature = map.forEachFeatureAtPixel(evt.pixel, function (feature, layer) {
        return feature;
      });
      let iconName = feature.get('name');
      if (feature) {
        var coordinates = feature.getGeometry().getCoordinates();
        popup.setPosition(coordinates);
        $(element).popover({
          'placement': 'top',
          'html': true,
          'content': feature.get('name')
        });
        $(element).popover('show');
      } else {
        $(element).popover('destroy');
      }
    });
// 鼠标移动的事件
    map.on('pointermove', function (e) {
        if (evt.dragging) {   //如果是拖动地图造成的鼠标移动,则不作处理
            return;
     }
      var pixel = map.getEventPixel(e.originalEvent);
      var hit = map.hasFeatureAtPixel(pixel);
      map.getTargetElement().style.cursor = hit ? 'pointer' : '';
    });
  }

注意,feature中必须设置name属性才能feature.get('name')到值,否则值为undefined会报错。

html

 <div id="map"><div id="popup1"></div></div>

这样,点击marker图标就可以弹出弹框,或者进行其他的交互操作

image.png

参考官网例子:http://openlayers.org/en/v4.6.5/examples/icon.html?q=marker

vue中实现点击marker进行导航跳转,并同时传递参数

  getIconMakers(map) {
    var pos = ol.proj.fromLonLat([118.208889, 35.3725]);
    var pos2 = ol.proj.fromLonLat([112.208889, 34.3725]);
    console.dir(pos);

    var startMarker = new ol.Feature({
      type: 'icon',
      name: 'museum',
      geometry: new ol.geom.Point(pos)
    });
    var startMarker2 = new ol.Feature({
      type: 'icon',
      name: 'car',
      geometry: new ol.geom.Point(pos2)
    });
    var vectorSource = new ol.source.Vector({});
    vectorSource.addFeature(startMarker);
    vectorSource.addFeature(startMarker2);

    var vectorLayer = new ol.layer.Vector({
      source: vectorSource,
      style: new ol.style.Style({
        image: new ol.style.Icon({
          anchor: [0.5, 1],
          src: 'https://openlayers.org/en/v4.6.5/examples/data/icon.png'
        })
      })
    });
    map.addOverlay(vectorLayer);

    map.on('click', function (evt) {
      // var pixel = map.getEventPixel(evt.originalEvent);
      var feature = map.forEachFeatureAtPixel(evt.pixel,
        function (feature) {
          return feature;
        });
      if (feature) {
        // var coordinates = feature.getGeometry().getCoordinates();
        let iconName = feature.get('name');
        router.push({
          name: 'onlineDrawing',
          params: {
            type: iconName
          }
        })
      }
    });
    map.on('pointermove', function (e) {
      var pixel = map.getEventPixel(e.originalEvent);
      var hit = map.hasFeatureAtPixel(pixel);
      map.getTargetElement().style.cursor = hit ? 'pointer' : '';
    });
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,469评论 2 59
  • 2018web前端最新面试题总结 一、Html/Css基础模块 基础部分 什么是HTML?答:​ HTML并不是...
    duans_阅读 10,086评论 3 27
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,677评论 0 13
  • 每日复盘 Objective 你对今天学的记得什么? 很对的人做正确的事! 今天听赵总的分享是放扩音听的,意向代理...
    她念阅读 1,072评论 0 0
  • 一个人的故事 墨念 思量了很多个日夜 在每个日落西山的黄昏 那时的季节...
    亦墨念阅读 3,043评论 3 11