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

标签 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从数组中提取数据并在每个标记位置显示自定义信息窗口内容和标题。我还想根据单个项目显示特定的自定义图像图标 “位置”数组中的描述具有不同的“开放”、“封闭”、“公共(public)”或“完整”图像图标。

如何正确创建一个图像变量,该变量在创建新标记时循环遍历数组,并以与标题和信息窗口相同的方式从“位置”数组中提取特定数据 文字?

完整的 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){

//向 map 添加标记

//标记大小表示为 X,Y 的大小 //图像原点(0,0)所在位置 //在图像的左上角。

//标记的原点、 anchor 位置和坐标 //在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));

  }
  }

最佳答案

如果您只有 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...

如果您想要图标有阴影,可以采用类似的方法。

关于javascript - 在 Google map 中按类型显示自定义图像标记图标。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18525616/

相关文章:

javascript - 如何找出谁触发了提交事件?

javascript - NodeJS 流解析并根据 Promise 结果逐行写入 json

javascript - 将分层 JSON 转换为flare.json 格式,以便在双层分区中使用

javascript - 如何将WaveSurfer js导出为音频文件?

javascript - Angular 地理编码结果不同步

jquery - 单击 map 中的标记打开一个对话框

javascript - 如何访问数组中的循环参数减少

c# - 在自定义 JsonConverter 的 ReadJson 方法中处理空对象

ios - myLocationButton 未显示在 Google map 上

java - 如何使用 JSON 填充子项微调器?