在javascript中设置google地图标记图标属性

在javascript中设置google地图标记图标属性,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在尝试使用javascript从xml数据中“设置”标记的样式: var title = 'Speed: '+$(this).find('Speed').text(); var lat = $(this).find('lat').text(); var lng = $(this).find('lng').text(); var markerCoords = new google.maps.LatLng(parseFloat(

我正在尝试使用javascript从xml数据中“设置”标记的样式:

        var title = 'Speed: '+$(this).find('Speed').text();
        var lat = $(this).find('lat').text();
        var lng = $(this).find('lng').text();


        var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
        bounds.extend(markerCoords);
        var marker = new google.maps.Marker({
            position: markerCoords,
            title: title,
            icon: {
                path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
                scale: 5,
                strokeWeight: 2,
                fillColor: '#009933',
                fillOpacity: 1,
                rotation: 0,
                anchor: new google.maps.Point(0,2)
      },
到目前为止,这个效果很好。我似乎不能对图标中的选项做同样的操作。以下是我尝试以完全不显示标记的相同方式放置旋转编号:

            var marker = new google.maps.Marker({
            position: markerCoords,
            title: title,
            icon: {
                path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
                scale: 5,
                strokeWeight: 2,
                fillColor: '#009933',
                fillOpacity: 1,
                rotation: $(this).find('rotation').text(),
                anchor: new google.maps.Point(0,2)
      },
当我试图将其添加为变量时,它也不会:

        var title = 'Speed: '+$(this).find('Speed').text();
        var lat = $(this).find('lat').text();
        var lng = $(this).find('lng').text();
        var rotation = $(this).find('rotation').text();

        var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
        bounds.extend(markerCoords);
        var marker = new google.maps.Marker({
            position: markerCoords,
            title: title,
            icon: {
                path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
                scale: 5,
                strokeWeight: 2,
                fillColor: '#009933',
                fillOpacity: 1,
                rotation: rotation,
                anchor: new google.maps.Point(0,2)
      },
我唯一能想到的是,整个图标需要作为一个长字符串输入,但我不知道如何完成

为清楚起见,数据本身来自xml文件:

<markers>
 <marker>
  <lat>50.11966</lat>
  <lng>-5.54409</lng>
  <Speed>0</Speed>
  <rotation>0</rotation>
  <icon>google.maps.SymbolPath.CIRCLE</icon>
  <fillColor>#0099FF</fillColor>
 </marker>
 <marker>
  <lat>50.12173</lat>
  <lng>-5.53225</lng>
  <Speed>200</Speed>
  <rotation>0</rotation>
  <icon>google.maps.SymbolPath.FORWARD_CLOSED_ARROW</icon>
  <fillColor>#009933</fillColor>
 </marker>
</markers>
编辑2:

这不是渲染。任何想法:

  var title = 'Speed: '+$(this).find('Speed').text();
        var lat = $(this).find('lat').text();
        var lng = $(this).find('lng').text();
        //var rotation = $(this).find('rotation').text();
        var type = (function(foo) {
            var arr = foo.find('icon').text().split('.');
            return arr[arr.length-1];
        })($(this))

        var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
        bounds.extend(markerCoords);
        var marker = new google.maps.Marker({
            position: markerCoords,
            title: title,
            icon: {
                path: new google.maps.SymbolPath[arr],
                scale: 5,
                strokeWeight: 2,
                fillColor: '#009933',
                fillOpacity: 1,
                rotation: parseInt($(this).find('rotation').text(), 10),
                anchor: new google.maps.Point(0,2)
      },
当我用这个的时候也没有:

            icon: {
                path: new google.maps.SymbolPath[type],
你能看到我是否错误地应用了你的代码吗?

图标符号对象的旋转属性应该是一个数字,所以
parseInt($(this).find('rotation').text(),10)

根据下面的评论,您还有另一个问题,需要使用
new
调用SymbolPath构造函数。至于如何从XML文件中获取值,您只需要以下代码:

var type = (function(foo) {
    var arr = foo.find('icon').text().split('.');
    return arr[arr.length-1];
})($(this));
然后在标记选项中

icon: {
    path: new google.maps.SymbolPath[type]()
如果您可以更改XML文件,那么我建议将路径行减少为仅为SymbolPath值,如
CIRCLE

编辑: 您需要确保为标记对象设置贴图。有两种方法可以做到这一点:

1) 在构造函数选项中执行此操作

var marker = new.google.maps.Marker({
    map: myGoogleMap,
    position: new google.maps.LatLng(x, y),
    title: 'my marker',
    icon: //blah, blah, blah
});
2) 在完成所有操作后,在循环中使用方法调用执行此操作:

for (var i=0, len=markers.length; i<len; ++i) {
    markers[i].setMap(myGoogleMap);
}

for(var i=0,len=markers.length;iahh,这很有效。你知道我如何为strokeColor和路径的“字符串”工作吗?更新了我的答案。strokeColor现在应该可以像你写的那样工作了。我觉得我快接近了,但它仍然无法渲染。你有机会看看“编辑2”吗上面?哦,我将XML更改为显示前进箭头或圆圈。虽然您的代码中没有显示它,但我假设您设置了标记的map属性?
marker.setMap(myGoogleMapObject);
I have:markers.push(marker);如果这样做的话,最后是什么?
for (var i=0, len=markers.length; i<len; ++i) {
    markers[i].setMap(myGoogleMap);
}