gpt4 book ai didi

popup - OpenLayers(OSM)中触发功能弹出窗口的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-01 11:57:34 25 4
gpt4 key购买 nike

我有功能 ID,我可以在 GeoRSS loadend 上抓取标记层,但我仍然不确定如何以编程方式显示弹出窗口。

如果有必要,我会按需创建弹出窗口,但似乎我应该能够获取 map 上绘制的标记的 ID 并在其上调用一些事件。我试过使用 jQuery 并在 map 元素上调用 $(marker-id).click() 事件,但这似乎不起作用。我错过了什么?

由于我被要求提供代码,并且我认为它是样板文件,所以到目前为止我是这样的:

map = new OpenLayers.Map('myMap'); 
map.addLayer(new OpenLayers.Layer.OSM());
map.addLayer(new OpenLayers.Layer.GeoRSS(name,url));

//I've done some stuff as well in re: projections and centering and
//setting extents, but those really don't pertain to this question.

我在其他地方做了一些 jQuery 模板,并为我构建了一个很好的列表,列出了 map 上显示的所有点。我知道如何从图层 loadend 进行回调并获取图层对象,我知道如何手动从 map 中检索我的图层,我知道如何遍历图层集合并找到我的图层.所以我可以获取有关弹出窗口的任何细节,但我仍然不知道如何使用 DOM 或此 API 的内置方法使其像 element.click() 一样简单 这是我更愿意做的。

最佳答案

您不必单击该功能来打开弹出窗口。

首先,您需要从功能 ID 中引用该功能。我会在 GeoRSS 层的 loadend 事件中使用层上的 markers 属性执行此操作。

假设您有对您的功能的引用,我会编写一个处理自动弹出窗口的方法:

var popups = {}; // to be able to handle them later 

function addPopup(feature) {

var text = getHtmlContent(feature); // handle the content in a separate function.

var popupId = evt.xy.x + "," + evt.xy.y;
var popup = popups[popupId];
if (!popup || !popup.map) {
popup = new OpenLayers.Popup.Anchored(
popupId,
feature.lonlat,
null,
" ",
null,
true,
function(evt) {
delete popups[this.id];
this.hide();
OpenLayers.Event.stop(evt);
}
);
popup.autoSize = true;
popup.useInlineStyles = false;
popups[popupId] = popup;
feature.layer.map.addPopup(popup, true);
}
popup.setContentHTML(popup.contentHTML + text);
popup.show();

}

关于popup - OpenLayers(OSM)中触发功能弹出窗口的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5495656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com