我修改了Google Maps API V3复杂图标示例https://developers.google.com/maps/documentation/javascript/examples/icon-complex,以从数组中提取数据,并在每个标记位置显示自定义信息窗口内容和标题。我还想根据单个项目显示特定的自定义图像图标 'locations'数组中的描述具有不同的“打开”,“关闭”,“公共”或“完整”图像图标。
如何在创建新标记时正确创建循环遍历数组的图像变量,并以与标题和信息窗口相同的方式从“locations”数组中提取特定数据 文本?
完整的HTML和Javascript。
<script
src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=weather">
</script>
<script type="text/javascript">
var locations =
[
['Coogee Beach', -33.923036, 151.259052, 5, 20, "Closed",],
['Cronulla Beach', -34.028249, 151.157507, 3, 50 ,"Full",],
['Manly Beach', -33.80010128657071, 151.28747820854187, 2, 10, "Public",],
['Maroubra Beach', -33.950198, 151.259302, 1, 30, "Open",]
];
//json array
function initialize() {
var myOptions = {
center: new google.maps.LatLng(33.890542, 151.274856),
zoom: 8,
panControl:false,
zoomControl:false,
mapTypeControl:true,
scaleControl:false,
streetViewControl:false,
overviewMapControl:false,
rotateControl:false,
mapTypeControlOptions: {
style:google.maps.MapTypeControlStyle.DROPDOWN_MENU,
position:google.maps.ControlPosition.BOTTOM_LEFT
},
mapTypeId: google.maps.MapTypeId.HYBRID
};
var map = new google.maps.Map(document.getElementById("default"),
myOptions);
setMarkers(map, locations)
}
function setMarkers(map,locations){
//将标记添加到地图
//标记大小表示为X,Y的大小 //图像的原点(0,0)所在的位置 //在图片的左上角。
//起源,锚点位置和标记的坐标 //向右和向内增加X方向 // Y方向向下。
var weatherLayer = new google.maps.weather.WeatherLayer({
temperatureUnits: google.maps.weather.TemperatureUnit.FAHRENHEIT
});
weatherLayer.setMap(map);
var cloudLayer = new google.maps.weather.CloudLayer();
cloudLayer.setMap(map);
var image = new google.maps.MarkerImage('images/beachflag.png',
// This marker is 32 pixels wide by 37 pixels tall.
new google.maps.Size(32, 37),
// The origin for this image is 0,0.
new google.maps.Point(0,0),
// The anchor for this image is the base of the flagpole at 0,37.
new google.maps.Point(0, 37));
var shadow = new google.maps.MarkerImage('images/shadow-beachflag.png',
// The shadow image is larger in the horizontal dimension
// while the position and offset are the same as for the main image.
new google.maps.Size(51,37),
new google.maps.Point(0,0),
new google.maps.Point(0, 37));
// Shapes define the clickable region of the icon.
// The type defines an HTML <area> element 'poly' which
// traces out a polygon as a series of X,Y points. The final
// coordinate closes the poly by connecting to the first
//var icon = typeObject[markers1[i][3]]['icon'];
// coordinate.
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'//
};
var marker, i
for (i = 0; i < locations.length; i++)
{
var project = locations[i][0]
var lat = locations[i][1]
var long = locations[i][2]
var add = locations[i][3]
var complete = locations[i][4]
var percentage = locations[i][4]
latlngset = new google.maps.LatLng(lat, long);
var marker = new google.maps.Marker({
map: map,
title: project , position: latlngset, icon: image, shadow: shadow,
});
map.setCenter(marker.getPosition())
var content =
'<div id="content">'+
'<h1 id="firstHeading" </h1>'+
project +
'</h1>' +
" # of Life Guards: " +
add +
'</h3>' +
" | Percentage: "
+ complete;
//infobox content
var infowindow = new google.maps.InfoWindow()
maxwidth:800,
google.maps.event.addListener(marker,'click',
(function(marker,content,infowindow){
return function() {
infowindow.setContent(content);
infowindow.open(map,marker);
};
})(marker,content,infowindow));
}
}
答案 0 :(得分:2)
如果您只有4个描述,则一个解决方案是具有与您的描述相同的图像图标:
Open.png,Closed.png,Public.png,Full.png(全部在文件夹“images /”中)
然后,您可以这样做:
var description = locations[i][5];
var iconname = 'images/' + description + '.png';
var marker = new google.maps.Marker({
map: map,
title: project,
position: latlngset,
icon: iconname,
shadow: shadow
});
或者,如果您想继续使用google.maps.MarkerImage:
var description = locations[i][5];
var iconname = 'images/' + description + '.png';
var image = new google.maps.MarkerImage(iconname,
// This marker is 32 pixels wide by 37 pixels tall.
new google.maps.Size(32, 37),
// The origin for this image is 0,0.
new google.maps.Point(0,0),
// The anchor for this image is the base of the flagpole at 0,37.
new google.maps.Point(0, 37));
etc...
如果您想为图标添加阴影,则可以采用类似的方法。