更改Google地图V3中的标记大小

我正在使用这个解释如何使用MarkerImage设置图标来着色google地图标记,并且着色效果很好。 但是我不能让scaledSize参数改变标记的大小。

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

什么是scaledSize参数的正确使用来改变标记大小? 例如,我怎样才能加倍标记的大小?

这个答案阐述了约翰·布莱克的有用答案 ,所以我将在我的答案中重复他的一些答案内容。

调整标记的最简单方法似乎是将参数2,3和4置为空,并在参数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) ); 

另外,对类似问题的这个答案断言在第二个参数中定义标记大小比在第​​五个参数中定义要好。 我不知道这是否属实。

离开参数2-4 null对于默认的google pin图像非常适用,但是您必须明确地为默认的google pin阴影图像设置一个锚点,否则它将如下所示:

当你在一个放大的阴影上留下锚点null时会发生什么

当您在地图上查看graphics时,引脚图像的底部中心碰巧与引脚的顶端并置。 这很重要,因为当您离开锚(第四个参数)为null时,标记的位置属性(标记在地图上的LatLng位置)将自动与引脚的视觉顶端并置。 换句话说,将锚点留空将确保提示点位于应该指向的位置。

但是,影子的尖端不在底部中心。 因此,您需要明确设置第四个参数来抵消针阴影的顶端,以便阴影顶端与针图像的顶端同位。

通过实验我发现阴影的尖端应该像这样设置:x是尺寸的1/3,y是尺寸的100%。

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

给这个:

明确地偏移放大的阴影锚点

大小参数以像素为单位。 所以,为了加倍你的例子的标记大小,MarkerImage构造函数的第五个参数是:

 new google.maps.Size(42,68) 

我发现最简单的方式是让map API找出其他参数,除非我需要图片底部/中心以外的其他参数作为锚点。 在你的情况下,你可以这样做:

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