Openlayers 3 如何在Openlayer 3的层中添加自定义Html dom元素

Openlayers 3 如何在Openlayer 3的层中添加自定义Html dom元素,openlayers-3,custom-element,custom-overlay,Openlayers 3,Custom Element,Custom Overlay,我使用过谷歌api OverlayView。我能够使用像素值在latlng位置添加带有html div元素的自定义覆盖 USGSOverlay.prototype.draw = function() { var overlayProjection = this.getProjection(); var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest()); var ne = overlayProjecti

我使用过谷歌api OverlayView。我能够使用像素值在latlng位置添加带有html div元素的自定义覆盖

USGSOverlay.prototype.draw = function() {
var overlayProjection = this.getProjection();
var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());
var div = this.div_;
div.style.left = sw.x + 'px';
div.style.top = ne.y + 'px';
div.style.width = (ne.x - sw.x) + 'px';
 div.style.height = (sw.y - ne.y) + 'px';
      };

现在我正在使用OpenLayer 3。是否有任何选项可以使用像素值在特定位置添加自定义div元素(如标记)。每次放大或缩小地图时,我都可以找到像素位置,并更新div元素的顶部和左侧,使其显示在正确的位置。在OpenLayer3中是否存在这种可能性。

如果要在ol3中的特定位置显示纯HTML,请使用
ol.Overlay
。看。您可以控制纯HTML中的内容和CSS中的样式

  // Vienna marker
  var marker = new ol.Overlay({
    position: pos,
    positioning: 'center-center',
    element: document.getElementById('marker'),
    stopEvent: false
  });
  map.addOverlay(marker);
如果您必须对多个位置执行此操作,比如说超过10个位置,并且您只需要显示某种标记,那么我建议使用
ol.layer.Vector
,而不是使用适当的样式对象。看。您可以使用任何图像作为标记。您还可以控制其定位

  var iconStyle = new ol.style.Style({
    image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
      anchor: [0.5, 46],
      anchorXUnits: 'fraction',
      anchorYUnits: 'pixels',
      src: 'https://openlayers.org/en/v3.20.1/examples/data/icon.png'
    }))
  });

非常感谢。如果我需要更改先前添加的覆盖的位置,我需要使用设置位置。但是如果我有更多的覆盖,比如说50,我如何识别所需的覆盖对象。我是否需要保存覆盖对象的引用并每次循环?是的,你需要循环,除非你为每个覆盖创建一个唯一的id并创建一个包含它们的对象,并使用id作为键直接访问它(这样可以避免循环)。不过,在我看来,您应该选择图层选项。