如何通过无限平移(OpenLayers)获取投影要素的坐标

时间:2018-07-27 20:55:25

标签: openlayers openlayers-3 openlayers-5

我正在创建一个弹出控件,用于当用户将鼠标移到特定图层上的要素上时显示信息。我希望弹出窗口捕捉到特征的几何形状(点),而不要使用鼠标位置的坐标。

问题是,此操作在主要要素上工作正常,但是,当向左或向右平移地球旋转并悬停在投影要素上时,弹出式窗口会在原始坐标处越过主要要素,而不是在在扩展的平移视图中。

这是我的代码:

const container = document.getElementById('popup');
const content = document.getElementById('popup-content');

var popup = new ol.Overlay({
  element: container,
  positioning: "bottom-center",
  stopEvent: false
});

map.addOverlay(popup);

map.on("pointermove", function (e) {
  if (e.dragging) {
    popup.setPosition(undefined);
    return;
  }

  const feature = map.forEachFeatureAtPixel(e.pixel,
    function (feature, layer) {
      if (layer === participantLayer) {
        return feature;
        }
    }, { hitTolerance: 10 });

    if (feature) {
      popup.setPosition(feature.getGeometry().getCoordinates());
      content.innerHTML = "...";
    } else {
       popup.setPosition(undefined);
  }
});

我认为问题与使用feature.getGeometry().getCoordinates()有关,因为它仅返回实际要素的坐标,而不返回投影要素的坐标。有没有办法返回投影特征几何位置的像素坐标?

1 个答案:

答案 0 :(得分:0)

let featureCoords = feature.getGeometry().getCoordinates();  
const projWidth = ol.extent.getWidth(map.getView().getProjection().getExtent());  
const worldsAway = Math.round(e.coordinate[0] / projWidth);  
featureCoords[0] = featureCoords[0] + worldsAway * projWidth;  
popup.setPosition(featureCoords);   

尝试一下。