如何更改Google地图标记的颜色?
我正在使用Google Maps API来构build一个包含标记的地图,但是我希望有一个标记可以与其他标记脱颖而出。 我认为最简单的做法是将标记的颜色改为蓝色而不是红色。 这是一个简单的事情吗?或者我必须以某种方式创build一个全新的图标? 如果我必须创build一个新的图标,那么最简单的方法是什么?
由于地图v2已被弃用,您可能对v3地图感兴趣: https : //developers.google.com/maps/documentation/javascript/markers#simple_icons
对于v2地图:
http://code.google.com/apis/maps/documentation/overlays.html#Icons_overview
你将有一套逻辑做所有的“常规”的引脚,另一套使用定义的新的标记做“特殊”的引脚。
使用Google Maps API的第3版,最简单的方法可能是抓取一个自定义图标集,就像Benjamin Keen在此创build的图标集一样:
http://www.benjaminkeen.com/?p=105
如果将所有这些图标放在与地图页面相同的位置,则只需在创build标记时使用相应的图标选项就可以对标记进行着色:
var beachMarker = new google.maps.Marker({ position: myLatLng, map: map, icon: 'brown_markerA.png' });
这是非常容易的,而且是我目前正在使用的项目的方法。
MapIconMaker:Google Maps v2的图书馆
一种方法是使用MapIconMaker 。 这里有一个例子。 Google地图默认图标的宽度为20像素,高度为34像素,因此您可以使用类似以下内容来模拟:
var newIcon = MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: "#0000FF", cornercolor:"#0000FF"}); var marker = new GMarker(map.getCenter(), {icon: newIcon});
你甚至可以用一些函数来包装它,让自己更容易:
function getIcon(color) { return MapIconMaker.createMarkerIcon({width: 20, height: 34, primaryColor: color, cornercolor:color}); }
这是我个人使用的所有标记我创build的。 我更喜欢有select地改变一时兴起的颜色。
更新:默认图标的hex颜色是“#FE7569”。 此外,您可以在标记上设置图像,而不是使用新图标创build新的标记。 所以如果你想要一个函数来强调你可以用这样的东西,使用上面的函数:
function highlightMarker(marker, highlight) { var color = "#FE7569"; if (highlight) { color = "#0000FF"; } marker.setImage(getIcon(color).image); }
StyledMarker:Google Maps v3的图书馆
由于V3已经被V3取代了,我以为我应该更新这个答案。 我在这里创build了一个自定义标记库,可以在V3实用程序库中find 。 它允许不同的颜色和形状,你也可以把文字放在标记上。 它通过使用具有创buildGoogle地图types标记的方法的Google Charts API工作。 如果您想直接使用Google Charts API,请随时查看源代码。
然而,关于这个库的事情是,它需要为你定义这些标记图像的可点击区域,所以,比如这个例子,带有文本的较长的气泡会有可以点击的区域。
就个人而言,我认为由Google Charts API生成的图标看起来不错,而且很容易dynamic定制。
在Google Maps API 3上查看我的答案- 默认(点)标记的自定义标记颜色
Google Maps v3不需要任何自定义库。
var pinColor = "FE7569"; var pinImage = 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)); var pinShadow = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_shadow", new google.maps.Size(40, 37), new google.maps.Point(0, 0), new google.maps.Point(12, 35)); var marker = new google.maps.Marker({ position: new google.maps.LatLng(0,0), map: map, icon: pinImage, shadow: pinShadow });
从马特伯恩斯这工作截至2014年10月,但已过时。
我find的最简单的方法是使用BitmapDescriptorFactory.defaultMarker() 文档甚至有一个设置颜色的例子。 从我自己的代码:
MarkerOptions marker = new MarkerOptions() .title(formatInfo(data)) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) .position(new LatLng(data.getLatitude(), data.getLongitude()))