在Google地图中按类型显示自定义图像标记图标。

时间:2013-08-30 05:29:14

标签: javascript json google-maps google-maps-api-3 google-maps-markers

我修改了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));

  }
  }

1 个答案:

答案 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...

如果您想为图标添加阴影,则可以采用类似的方法。