En fait, l' exemple d'événement de clic vous donne ce que vous voulez.
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");
}
});
Si nécessaire, vous pouvez convertir les coordonnées en pixels pour afficher la fenêtre contextuelle.
Modifier - pour obtenir les coordonnées uniquement lors de la sélection de l'entité :
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");
}
L'API ne fournit pas un moyen d'obtenir l'emplacement du clic à partir du
SelectFeature
contrôle - mais cela devrait. Ce serait un ajout trivial (àxy
inclure dans l'featureselected
événement). Si vous ajoutez cela, ce serait la première étape pour y arriver.En attendant, vous pouvez accéder à l'événement de souris sur le gestionnaire de fonctionnalités utilisé par le
SelectFeature
contrôle. Donc, vous pourriez avoir un écouteur qui ressemble à ceci:Cela suppose (évidemment) que vous avez une référence au
SelectFeature
contrôle et à votre carte.la source
J'ai pu obtenir le dernier lon de l'événement click en utilisant les éléments suivants:
À l'intérieur du
clickFeature
gestionnaireoù
selectFeatureReference
est la référence auSelectFeature
que vous avez créé.la source
C'est ainsi que je l'ai compris dans la v3.8.2 afin d'obtenir des coordonnées comme celle-ci:
[-1.1645507812500016, 53.2257684357902]
lorsque je clique sur UK.
la source
Vous pouvez utiliser
feature.getBounds().getCenterLonLat()
. Fonctionne pour les entités de type point / ligne / polygone. Et vous n'avez pas besoin de savoir ce que c'est, car cela fonctionne pour tous.la source
Au cas où quelqu'un tomberait sur cette vieille question comme je l'ai fait, dans la dernière version d'OpenLayers à ce moment (3.20.0), vous pouvez obtenir la position cliquée en utilisant
e.mapBrowserEvent.coordinate
où see
trouve l'événement Select.la source