【问题标题】:Openlayers 3. How to make tootlip for featureOpenlayers 3. 如何制作功能提示
【发布时间】:2016-03-07 16:18:39
【问题描述】:

现在我将我的项目从 openlayers 2 移动到 openlayers 3。不幸的是,我找不到如何显示功能的标题(工具提示)。在 OL2 中有一个名为 graphicTitle 的样式。 您能给我建议如何在 OL3 上实现工具提示吗?

【问题讨论】:

  • 你试过谷歌吗?谷歌它的“ol3 tooltip”,有很多链接
  • 试过了,但没有结果。几乎所有的链接都在迁移到 OL2
  • 如果您愿意,请查看this fiddle
  • 你应该检查这个链接OpenLayers 3.10.1 - Feature Popup

标签: openlayers-3


【解决方案1】:

这是来自 ol3 开发人员的示例。 jsfiddle.net/uarf1888/

var tooltip = document.getElementById('tooltip');
var overlay = new ol.Overlay({
  element: tooltip,
  offset: [10, 0],
  positioning: 'bottom-left'
});
map.addOverlay(overlay);

function displayTooltip(evt) {
  var pixel = evt.pixel;
  var feature = map.forEachFeatureAtPixel(pixel, function(feature) {
    return feature;
  });
  tooltip.style.display = feature ? '' : 'none';
  if (feature) {
    overlay.setPosition(evt.coordinate);
    tooltip.innerHTML = feature.get('name');
  }
};

map.on('pointermove', displayTooltip);

【讨论】:

    【解决方案2】:

    这是来自 openlayers 网站的 Icon Symobolizer 示例。它显示了当您单击图标功能时如何弹出窗口。相同的原则适用于任何类型的功能。这是我做的时候用的例子。

    【讨论】:

    • 这个例子展示了如何使用 Bootstrap 自定义按钮工具提示。我需要示例如何显示功能的工具提示。
    • 你去。我编辑了一个相关示例的链接。我可以将 用作对多边形几何特征进行弹出窗口的示例。
    • 谢谢,但我想像在OL2中一样制作简单的标题。任何 html 元素都可以有这个属性....如果我不能这样做,我会试试你的例子。
    • 功能在 OpenLayers 3 中不会呈现为 html 或 svg 元素。所有内容都呈现为画布元素。对于简单的工具提示,您可能想看看这个小提琴:jsfiddle.net/uarf1888
    【解决方案3】:

    这是一个使用ol 库的基本示例。最重要的是定义overlay 对象。我们需要一个元素来附加我们想要在工具提示中显示的文本、一个显示工具提示的位置以及工具提示将开始的偏移量(x 和 y)。

    const tooltip = document.getElementById('tooltip');
    const overlay = new ol.Overlay({
      element: tooltip,
      offset: [10, 0],
      positioning: 'bottom-left'
    });
    map.addOverlay(overlay);
    

    现在,我们需要动态更新工具提示的innerHTML

    function displayTooltip(evt) {
      const pixel = evt.pixel;
      const feature = map.forEachFeatureAtPixel(pixel, function(feature) {
        return feature;
      });
      tooltip.style.display = feature ? '' : 'none';
      if (feature) {
        overlay.setPosition(evt.coordinate);
        tooltip.innerHTML = feature.get('name');
      }
    };
    
    map.on('pointermove', displayTooltip);
    

    let styleCache = {};
    const styleFunction = function(feature, resolution) {
      // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a
      // standards-violating <magnitude> tag in each Placemark.  We extract it from
      // the Placemark's name instead.
      const name = feature.get('name');
      const magnitude = parseFloat(name.substr(2));
      const radius = 5 + 20 * (magnitude - 5);
      
      let style = styleCache[radius];
      if (!style) {
        style = [new ol.style.Style({
          image: new ol.style.Circle({
            radius: radius,
            fill: new ol.style.Fill({
              color: 'rgba(255, 153, 0, 0.4)'
            }),
            stroke: new ol.style.Stroke({
              color: 'rgba(255, 204, 0, 0.2)',
              width: 1
            })
          })
        })];
        styleCache[radius] = style;
      }
      
      return style;
    };
    
    const vector = new ol.layer.Vector({
      source: new ol.source.Vector({
        url: 'https://gist.githubusercontent.com/anonymous/5f4202f2d49d8574fd3c/raw/2c7ee40e3f4ad9dd4c8d9fb31ec53aa07e3865a9/earthquakes.kml',
        format: new ol.format.KML({
          extractStyles: false
        })
      }),
      style: styleFunction
    });
    
    const raster = new ol.layer.Tile({
      source: new ol.source.Stamen({
        layer: 'toner'
      })
    });
    
    const map = new ol.Map({
      layers: [raster, vector],
      target: 'map',
      view: new ol.View({
        center: [0, 0],
        zoom: 2
      })
    });
    
    const tooltip = document.getElementById('tooltip');
    const overlay = new ol.Overlay({
      element: tooltip,
      offset: [10, 0],
      positioning: 'bottom-left'
    });
    map.addOverlay(overlay);
    
    function displayTooltip(evt) {
      const pixel = evt.pixel;
      const feature = map.forEachFeatureAtPixel(pixel, function(feature) {
        return feature;
      });
      tooltip.style.display = feature ? '' : 'none';
      if (feature) {
        overlay.setPosition(evt.coordinate);
        tooltip.innerHTML = feature.get('name');
      }
    };
    
    map.on('pointermove', displayTooltip);
    #map {
      position: relative;
      height: 100vh;
      width: 100vw;
      
    }
    .tooltip {
      position: relative;
      padding: 3px;
      background: rgba(0, 0, 0, .7);
      color: white;
      opacity: 1;
      white-space: nowrap;
      font: 10pt sans-serif;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="map" class="map">
      <div id="tooltip" class="tooltip"></div>
    </div>
    <script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.8.1/build/ol.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.8.1/css/ol.css">

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多