Usando el folleto Js, ¿es posible conocer la ubicación al hacer clic de un marcador (ignorar el punto de anclaje)?

11

Tengo un objeto marcador que tiene una altura y un ancho específicos, y aunque apunta a una sola coordenada, la representación visual del marcador abarca muchos píxeles. Cuando hago clic en la representación visual del marcador, me gustaría obtener las coordenadas del mapa subyacente, pero en cambio solo tengo acceso a la única coordenada lat / lng asociada con el marcador.

DarkKunai99
fuente

Respuestas:

12

Por un lado: cuando Leaflet maneja un evento de mouse (o táctil), puede acceder al evento DOM original en la originalEventpropiedad del evento.

Por otra parte: Dado un evento DOM ratón (o táctil), Folleto puede traducir mágicamente sus clientXy clientYpropiedades en una instancia de L.LatLngutilizando map.mouseEventToLatLng().

Combina estas dos cosas juntas, y puedes tener algo como:

marker.on('click', function(ev){
  var latlng = map.mouseEventToLatLng(ev.originalEvent);
  console.log(latlng.lat + ', ' + latlng.lng);
});

Consulte la documentación del folleto para conocer los otros métodos de conversión, ya que pueden resultar útiles.

IvanSanchez
fuente
Gracias, eso hizo el truco. Estaba calculando el latlng en función del recuento de píxeles como tal:var latlng = self._map.containerPointToLatLng([event.originalEvent.clientX - vpWidthDifference, event.originalEvent.clientY - vpHeightDifference]);
DarkKunai99
7

Siempre puede recuperar las coordenadas del mapa de objetos del folleto. Puedes usar algo como esto:

map.on('click', function(e){
  var coord = e.latlng;
  var lat = coord.lat;
  var lng = coord.lng;
  console.log("You clicked the map at latitude: " + lat + " and longitude: " + lng);
  });

Aquí tienes un ejemplo de trabajo.

ramiroaznar
fuente
Hmm, es extraño porque estoy ejecutando Cesium v1.25, y cada vez que hago clic en el marcador, el objeto de evento siempre contiene el enclavamiento del punto de anclaje del marcador, no la coordenada real del mapa como en su ejemplo.
DarkKunai99
No he trabajado con Cesium, tal vez Ivan o en la cesiumetiqueta puedan darle una mejor respuesta.
ramiroaznar
Pido disculpas, quise decir Folleto (último v1.0 rc)
DarkKunai99
Eche un vistazo a la respuesta dada por Ivan, resolverá su problema. El mío, como dijiste, está usando una versión de folleto muy antigua (no sé de dónde copio eso).
ramiroaznar