この回答は、OpenLayersのベクター機能からDOM要素を取得する方法にも投稿しています。
カスタムオーバーレイを表示できるようにホバー上のマウスまたは機能の位置を見つけたい場合は、カスタムホバーコントロールを作成し、次のように機能強調表示機能を定義します。
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要素へのアクセスが必要な場合(サードパーティのライブラリを使用していて、ソースコードを変更したくない場合)、次の行のいずれかを使用します(必要かどうかに応じてレイヤーまたは機能):
var layerElement = map.getLayersByName("My Layer")[0].features.root;
var layerElementId = map.getLayersByName("My Layer")[0].features.root.id;
var featureElementId = map.getLayersByName("My Layer")[0].getFeaturesByAttribute("name","My Feature Name")[0].geometry.components[0].id;
これは要素のIDのみを取得するため、適切なメソッドを使用して要素自体への参照を取得する必要があることに注意してください。次のいずれかのようなもの:
var elementReference1 = document.getElementById(featureElementId);
var elementReference2 = jQuery('#'+featureElementId)[0];