回答:
実際、クリックイベントのサンプルは、あなたが望むものを提供します。
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.trigger
}, this.handlerOptions
);
},
trigger: function(e) {
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
});
必要に応じて、座標をピクセルに変換してポップアップを表示できます。
編集-機能を選択したときにのみ座標を取得するには:
var options = {
onSelect: getCoordinates,
};
var selectEt = new OpenLayers.Control.SelectFeature(mylayer, options);
map.addControl(selectEt);
function getCoordinates(e) {
// this should work
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
APIは、SelectFeature
コントロールからクリック位置を取得する方法を提供しません-しかし、そうする必要があります。それは些細な追加になります(イベントにxy
含めたためfeatureselected
)。これを発券すると、それを実現するための最初のステップになります。
それまでの間、SelectFeature
コントロールで使用される機能ハンドラーのマウスイベントにアクセスできます。そのため、次のようなリスナーが存在する場合があります。
layer.events.on({featureselected: function(event) {
// should be event.xy, but it's not available currently
var pixel = control.handlers.feature.evt.xy;
var location = map.getLonLatFromPixel(pixel);
alert("You clicked near " + location);
});
これは(明らかに)SelectFeature
コントロールとマップへの参照があることを前提としています。
次を使用して、クリックイベントの最新情報を取得できました。
clickFeature
ハンドラー内
var clickedlonlat =
Ext.getCmp("coreRef").parent.map.getLonLatFromPixel(
new OpenLayers.Pixel(
selectFeatureReference.handlers.feature.evt.layerX,
selectFeatureReference.handlers.feature.evt.layerY
));
どこselectFeatureReference
への参照であるSelectFeature
あなたが作成していることは。