Cambiar el tamaño del marcador en Google maps V3

Estoy usando esta explicación de cómo colorear un marcador de Google Maps configurando el icono usando una MarkerImage , y la coloración funciona bien. Pero no puedo hacer que el argumento scaleSize cambie el tamaño del marcador.

var pinColor = 'FFFF00'; var pinIcon = new google.maps.MarkerImage( "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor, new google.maps.Size(21, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34), new google.maps.Size(2, 4)); marker.setIcon(pinIcon); 

¿Cuál es el uso correcto del argumento scaleSize para cambiar el tamaño del marcador? Por ejemplo, ¿cómo puedo duplicar el tamaño del marcador?

Esta respuesta expone la útil respuesta de John Black , por lo que repetiré parte de su contenido de respuesta en mi respuesta.

La forma más fácil de cambiar el tamaño de un marcador parece ser dejar el argumento 2, 3 y 4 nulo y escalar el tamaño en el argumento 5.

 var pinIcon = new google.maps.MarkerImage( "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|FFFF00", null, /* size is determined at runtime */ null, /* origin is 0,0 */ null, /* anchor is bottom center of the scaled image */ new google.maps.Size(42, 68) ); 

Como un aparte, esta respuesta a una pregunta similar afirma que definir el tamaño del marcador en el segundo argumento es mejor que escalar en el quinto argumento. No sé si esto es verdad.

Dejar argumentos 2-4 null funciona muy bien para la imagen predeterminada de google pin, pero debe establecer un anclaje explícitamente para la imagen predeterminada de pin de google, o se verá así:

qué sucede cuando dejas el anclaje nulo en una sombra ampliada

La parte inferior central de la imagen del alfiler coincide con la punta del alfiler cuando ves el gráfico en el mapa. Esto es importante, ya que la propiedad de posición del marcador (posición LatLng del marcador en el mapa) se colocará automáticamente con la punta visual del pin cuando deje el ancla (4º argumento) null . En otras palabras, dejar el anclaje nulo asegura los puntos de propulsión donde se supone que apunta.

Sin embargo, la punta de la sombra no se encuentra en el centro inferior. Por lo tanto, debe establecer explícitamente el 4º argumento para compensar la punta de la sombra del pin, de modo que la punta de la sombra se coloque con la punta de la imagen del pin.

Al experimentar, encontré que la punta de la sombra debe establecerse así: x es 1/3 de tamaño e y es 100% de tamaño.

 var pinShadow = new google.maps.MarkerImage( "http://chart.apis.google.com/chart?chst=d_map_pin_shadow", null, null, /* Offset x axis 33% of overall size, Offset y axis 100% of overall size */ new google.maps.Point(40, 110), new google.maps.Size(120, 110)); 

para dar esto:

compensar explícitamente el ancla de sombra ampliada

Los argumentos de tamaño están en píxeles. Entonces, para duplicar el tamaño del marcador de su ejemplo, el quinto argumento para el constructor de MarkerImage sería:

 new google.maps.Size(42,68) 

Me resulta más fácil dejar que la API del mapa descubra los otros argumentos, a menos que necesite algo más que la parte inferior / central de la imagen como ancla. En tu caso, podrías hacer:

 var pinIcon = new google.maps.MarkerImage( "http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor, null, /* size is determined at runtime */ null, /* origin is 0,0 */ null, /* anchor is bottom center of the scaled image */ new google.maps.Size(42, 68) );