我有一个使用OpenLayers 2.13.1的应用程序。它正在利用一个bing 底图和覆盖WMS图层。我正在使用FramedCloud弹出窗口。我会 比如弹出窗口出现在用户点击的位置,有时也会出现。 有时它会随机出现在用户点击的东边或西边。 这是一段显示我如何设置的代码:
boxSize = new OpenLayers.Size(450, 120);
if (innovate.popupbox[mapID]) {
innovate.popupbox[mapID].lonlat = map.getLonLatFromPixel(event.xy);
innovate.popupbox[mapID].setContentHTML(content);
innovate.popupbox[mapID].setSize(boxSize);
//innovate.popupbox[mapID].panIntoView();
//innovate.popupbox[mapID].updatePosition();
innovate.popupbox[mapID].show();
} else {
//first popup load - we will create a popup object
//and for next time we will reuse this object rather than creating a new one
innovate.popupbox[mapID] = new OpenLayers.Popup.FramedCloud(
"innovate_info_popup_" + mapID,
map.getLonLatFromPixel(event.xy),
boxSize,
content,
null,
true
);
innovate.popupbox[mapID].panMapIfOutOfView = true;
innovate.popupbox[mapID].hide = function() {
this.div.style.display = 'none';
map.panTo(innovate.lastPopupCenter[mapID]);
}
map.addPopup(innovate.popupbox[mapID]);
}
答案 0 :(得分:1)
您应该使用map.getLonLatFromViewPortPx(event.xy)
来获取LonLat对象而不是map.getLonLatFromPixel(event.xy)
。
不是那么丰富(想要;)getLonLatFromViewPortPx的解释和相应的方法可以从documentation获得。