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

标签 popup openlayers markers georss

我有功能 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/

相关文章:

swift - 从父 View Controller 向 subview Controller 发送数据

javascript - 使用 PHP 函数弹出文本区域预览

Javascript 弹出功能

Openlayers 3 View setProperties 不填充 map

javascript - Mapbox: map 外部的标记导航链接

android - Eclipse 中的多个标记错误(Android 应用程序)

javascript - 弹出窗口无法在 IE7 上打开

angularjs - 具有开放层的 Angular JS

javascript - 停止 OpenLayers 2 中的事件?

svg - 如何沿着 SVG 线放置多个均匀分布的箭头?