Los maps de google cambian el cursor al desplazamiento de selección de image

Cambié el cursor de google maps para que sea mi propia image. Esta image tiene un cierto punto distintivo. El website permite a las personas hacer clic en algún lugar del map para crear un marcador a la latitud / longitud exacta que elijan. El problema es que, dado que la image tiene un cierto punto (centro inferior de la image), todos piensan que allí donde se encuentra ese punto, es donde irá el marcador. En cambio, el marcador va a la esquina superior izquierda de la image y está desactivado en una cantidad considerable de píxeles.

Lo que necesito es una forma de compensar la image para que, cuando ocurre un clic, ocurra exactamente donde está el punto de la image, en lugar del punto elegido automáticamente que está en la parte superior izquierda.

Intenté poner la image en el centro del photoshop, pero eso no funciona. He revisado apis de google maps pero no apareció nada.

¿Alguna idea sobre cómo lograr esto?

La fórmula básica para lograrlo la encontrarás en https://developers.google.com/maps/documentation/javascript/maptypes#PixelCoordinates

  pixelCoordinate = worldCoordinate * 2 zoomLevel 

Obtenga la Coordinación del mundo del clic, calcule la Coordinación de píxeles, agregue la compensación, calcule la nueva Coordinación del mundo y tenga la position deseada.

Necesitará dos funciones para convertir LatLng a Pixel (y viceversa):

fromLatLngToPoint() y fromPointToLatLng()

muestra-function:

  google.maps.event.addListener(map, 'click', function(e){ //assume a cursor with a size of 22*40 var //define the anchor, the base(top-left) is 0,0 //bottom middle will be 11,40 anchor = new google.maps.Point(11,40), //the map-projection, needed to calculate the desinetworking LatLng proj = this.getProjection(), //clicked latLng pos = e.latLng; //the power of the map-zoom power = Math.pow(2,map.getZoom()), //get the world-coordinate //will be equal to the pixel-coordinate at zoom 0 point = proj.fromLatLngToPoint(pos), //calculate the new world-coordinate based on the anchor offsetPoint = new google.maps.Point( (point.x*power+anchor.x)/power, (point.y*power+anchor.y)/power ), //convert it back to a LatLng offsetPosition = proj.fromPointToLatLng(offsetPoint); //done new google.maps.Marker({ position:offsetPosition, map:map}); }); 

Demostración: http://jsfiddle.net/doktormolle/NYh7g/