如何从openlayers矢量特性中获取DOM元素

如何从openlayers矢量特性中获取DOM元素,openlayers,Openlayers,(我在这篇文章中搜索了一下,但没有多大成功。他们似乎只解决了事件的问题。) 我们的网站正在使用qTip2作为工具提示,我想在我的向量层中有一些功能的弹出窗口。为了简化操作,我想使用qTip2工具提示而不是openlayers弹出窗口(这样我们就可以使用自己的样式了) 创建特征时,我需要对DOM对象的引用,以便将qTip2工具提示附加到该对象: function onFeatureCreate(feature){ var elem=? $(elem).qTip2(...); }

(我在这篇文章中搜索了一下,但没有多大成功。他们似乎只解决了事件的问题。)

我们的网站正在使用qTip2作为工具提示,我想在我的向量层中有一些功能的弹出窗口。为了简化操作,我想使用qTip2工具提示而不是openlayers弹出窗口(这样我们就可以使用自己的样式了)

创建特征时,我需要对DOM对象的引用,以便将qTip2工具提示附加到该对象:

function onFeatureCreate(feature){
    var elem=?
    $(elem).qTip2(...);
}

如果我从图层中获取了功能,如何获取DOM对象?

如果您的功能是数据驱动的,您可以向功能属性对象添加一些元数据,这些元数据应该映射到DOM属性,然后您可以使用这些属性来查询,我认为如果您想在该图层上查找鼠标或功能的位置,这应该是可行的悬停,以便显示自定义覆盖、创建自定义悬停控件并定义featurehighlighted函数,如下所示:

var featureHoverControl = new OpenLayers.Control.SelectFeature([myLayer], {
    id: 'featureHoverControl',
    hover: true,
    autoActivate: true,
    highlightOnly: true,
    renderIntent: "temporary",
    eventListeners: {
       featurehighlighted: function(e) {
            // either use the mouse's position when the event was triggered
            var mouseXPosition = this.handlers.feature.evt.x;
            var mouseYPosition = this.handlers.feature.evt.y;

            // or retrieve the feature's center point
            var featureCenterLonLat = e.feature.geometry.bounds.getCenterLonLat();
            var featureCenterPoint = map.getPixelFromLonLat(featureCenterLonLat);

            // display your custom popup here
            // e.g. showTooltip(e.feature.attributes.name, featureCenterPoint.x, featureCenterPoint.y)
        }
        ,
        featureunhighlighted: function(e) {
            // hide your custom popup here
            // e.g. hideTooltip()
        }
    }
});
map.addControl(featureHoverControl);
如果您需要访问表示图层/功能的SVG元素(如果您使用的是第三方库且不想修改源代码),请使用以下任一行(取决于您是否需要图层或功能):

请注意,由于这只获取元素的id,因此仍然需要使用适当的方法获取对元素本身的引用。类似于以下任一情况:

var elementReference1 = document.getElementById(featureElementId);
var elementReference2 = jQuery('#'+featureElementId)[0];

据我所知,你真的不知道。OpenLayers中的所有功能都以SVG或VML(在IE中)的形式呈现,它们并不是真正被设计为直接选择和样式化为DOM元素。你可以覆盖openlayers CSS,创建自己版本的工具提示等等。这看起来很有意义,但我在几个月前放弃了这一点,转而采用另一种方法。我无法验证此解决方案是否有效,但感谢您的回答。
var elementReference1 = document.getElementById(featureElementId);
var elementReference2 = jQuery('#'+featureElementId)[0];