¿Cómo obtengo las coordenadas de un clic en la característica / capa vectorial en OpenLayers?

13

Necesito obtener la coordenada del clic cuando el usuario hace clic en una función vectorial en el mapa de OpenLayers. SelectControl solo proporciona la función en la que se hizo clic y no las coordenadas del clic. ¿De todos modos llegar a las coordenadas del clic sobre un vector? Necesito mostrar AnchoredBubble en el punto de clic del usuario.

    
pregunta Vish 15.11.2011 - 20:58

6 respuestas

16

En realidad, la muestra de evento de clic le ofrece lo que desea.

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 es necesario, puede convertir las coordenadas en píxel a mostrar la ventana emergente.

Editar: para obtener coordenadas solo al seleccionar una función :

   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");
}
    
respondido por el simo 15.11.2011 - 21:52
6

La API no proporciona una forma de obtener la ubicación de clic desde el control SelectFeature , pero debería hacerlo. Sería una adición trivial (tener xy incluido en el evento featureselected ). Si compra esto, sería el primer paso para que esto suceda.

Mientras tanto, puede acceder al evento del mouse en el controlador de características utilizado por el control SelectFeature . Por lo tanto, es posible que tenga un oyente que se parece a esto:

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);
});

Esto supone (obviamente) que tienes una referencia al control SelectFeature y tu mapa.

    
respondido por el Tim Schaub 16.11.2011 - 07:25
3

Pude obtener la latitud del evento de clic utilizando lo siguiente:

Dentro del controlador clickFeature

var clickedlonlat = 
    Ext.getCmp("coreRef").parent.map.getLonLatFromPixel(
        new OpenLayers.Pixel(
            selectFeatureReference.handlers.feature.evt.layerX,
            selectFeatureReference.handlers.feature.evt.layerY
        ));

donde selectFeatureReference es la referencia al SelectFeature que has creado.

    
respondido por el Chris 02.08.2012 - 22:48
1
map.on('click', function(evt){
    console.log(ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326'));
});

Así es como lo descubrí en v3.8.2 para obtener coordenadas como las siguientes:
[-1.1645507812500016, 53.2257684357902]
cuando hago clic en todo el Reino Unido.

    
respondido por el khandaniel 16.10.2018 - 12:56
0

Puedes usar feature.getBounds().getCenterLonLat() . Funciona para entidades de tipo punto / línea / polígono. Y no tienes que saber qué es, ya que funciona para todos.

    
respondido por el Vadim 15.11.2011 - 21:45
0

En caso de que alguien se tropiece con esta vieja pregunta como lo hice yo, en la última versión de OpenLayers en este momento (3.20.0) puede obtener la posición pulsada usando e.mapBrowserEvent.coordinate donde e es el evento Select.

    
respondido por el Adam Franco 14.12.2016 - 04:11

Lea otras preguntas en las etiquetas