Google Maps API v3:如何dynamic更改标记图标?

使用Google Maps API v3,如何以编程方式更改标记图标?

我想要做的是,当有人hover在一个链接 – 让地图上的相应标记图标改变颜色来表示有问题的标记。

基本上,和Roost所做的一样。

当您将鼠标hover在左侧的房源列表上时,右侧的相应标记会更改颜色

调用marker.setIcon('newImage.png') … 在这里寻找文档。

你问的是实际的做法吗? 你可以创build每个div ,添加一个mouseovermouseout监听器,这个监听器可以改变图标,并返回标记。

您也可以使用圆圈作为标记图标,例如:

 var oMarker = new google.maps.Marker({ position: latLng, sName: "Marker Name", map: map, icon: { path: google.maps.SymbolPath.CIRCLE, scale: 8.5, fillColor: "#F00", fillOpacity: 0.4, strokeWeight: 0.4 }, }); 

然后,如果您想要dynamic更改标记(例如在鼠标hover上),则可以执行下列操作,例如:

 oMarker.setIcon({ path: google.maps.SymbolPath.CIRCLE, scale: 10, fillColor: "#00F", fillOpacity: 0.8, strokeWeight: 1 }) 

此线程可能已经死机,但StyledMarker可用于API v3。 只需使用addDomListener()方法将想要的颜色更改绑定到正确的DOM事件即可 。 这个例子非常接近你想要做的事情。 如果您查看页面源,请更改:

 google.maps.event.addDomListener(document.getElementById("changeButton"),"click",function() { styleIcon.set("color","#00ff00"); styleIcon.set("text","Go"); }); 

像这样的东西:

 google.maps.event.addDomListener("mouseover",function() { styleIcon.set("color","#00ff00"); styleIcon.set("text","Go"); }); 

这应该足以让你前进。

DOM Events上的维基百科页面也将帮助您定位您想要在客户端捕获的事件。

祝你好运(如果你还需要的话)

GMaps公用程序库有一个名为MapIconMaker的插件,可以方便地生成不同的标记样式。 它使用Google Charts来绘制标记。

这里有一个很好的演示,展示了你可以用它做什么样的标记。

你可以试试这个代码

  <script src="http://maps.googleapis.com/maps/api/js"></script> <script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script> <script> function initialize() { var map; var bounds = new google.maps.LatLngBounds(); var mapOptions = { zoom: 10, mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById("mapDiv"), mapOptions); var markers = [ ['title-1', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.120850, '<p> Hello - 1 </p>'], ['title-2', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.420850, '<p> Hello - 2 </p>'], ['title-3', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -0.720850, '<p> Hello - 3 </p>'], ['title-4', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -1.020850, '<p> Hello - 4 </p>'], ['title-5', '<img style="width:100%;" src="canberra_hero_image.jpg"></img>', 51.508742, -1.320850, '<p> Hello - 5 </p>'] ]; var infoWindow = new google.maps.InfoWindow(), marker, i; var testMarker = []; var status = []; for( i = 0; i < markers.length; i++ ) { var title = markers[i][0]; var loan = markers[i][1]; var lat = markers[i][2]; var long = markers[i][3]; var add = markers[i][4]; var iconGreen = 'img/greenMarker.png'; //green marker var iconRed = 'img/redMarker.png'; //red marker var infoWindowContent = loan + "\n" + placeId + add; var position = new google.maps.LatLng(lat, long); bounds.extend(position); marker = new google.maps.Marker({ map: map, title: title, position: position, icon: iconGreen }); testMarker[i] = marker; status[i] = 1; google.maps.event.addListener(marker, 'click', ( function toggleBounce( i,status,testMarker) { return function() { infoWindow.setContent(markers[i][1]+markers[i][4]); if( status[i] === 1 ) { testMarker[i].setIcon(iconRed); status[i] = 0; } for( var k = 0; k < markers.length ; k++ ) { if(k != i) { testMarker[k].setIcon(iconGreen); status[i] = 1; } } infoWindow.open(map, testMarker[i]); } })( i,status,testMarker)); map.fitBounds(bounds); } var boundsListener = google.maps.event.addListener((map), 'bounds_changed', function(event) { this.setZoom(8); google.maps.event.removeListener(boundsListener); }); } google.maps.event.addDomListener(window, 'load', initialize); </script> <div id="mapDiv" style="width:820px; height:300px"></div>