Google Maps V3上的SVG标记

时间:2011-09-18 15:47:01

标签: google-maps google-maps-api-3 svg

使用Google Maps API v3,我的最终目的是创建一个给定长度和角度的箭头,但是现在,我正在尝试创建一个SVG标记。我使用的是Rich Market utilityjquery.svg plugin。以下代码创建div,但不创建SVG。建议? (我并不拘泥于这些库,但这些是我到目前为止所发现的。)

<head>
<script type="text/javascript">
    var map, marker;
    function drawCircle(svg) { 
        svg.circle(15, 15, 10, {fill: 'none', stroke: 'red', strokeWidth: 3});  
    }

    function div() {
        var m = document.createElement('DIV');
        m.innerHTML = '<div class="arrow"></div>';
        $('.arrow').svg({onLoad: drawCircle});
        return m;
    }

    function init() {
        map = new google.maps.Map(document.getElementById('map'), {
            zoom: 1,
            center: new google.maps.LatLng(0, 0),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        marker = new RichMarker({
            map: map,
            position: new google.maps.LatLng(30, 50),
            draggable: true,
            flat: true,
            anchor: RichMarkerPosition.MIDDLE,
            content: div()
        });
    }

    google.maps.event.addDomListener(window, 'load', init);
</script>
</head>
<body><div id="map"></div></body>

1 个答案:

答案 0 :(得分:3)

问题出在div()函数中。调用$('.arrow')与正在创建的div不匹配,因为它尚未附加到DOM节点树。您必须在创建标记后调用它。

$('.arrow').svg({onLoad: drawCircle});函数中删除div()并稍后再调用。

function div() {
   var m = document.createElement('DIV');
   m.innerHTML = '<div class="arrow"></div>';
   return m;
}

我想最好的方法是在init()函数结束时为地图的空闲事件添加监听器。

function init() {
   map = new google.maps.Map(document.getElementById('map'), {
      zoom: 1,
      center: new google.maps.LatLng(0, 0),
      mapTypeId: google.maps.MapTypeId.ROADMAP
   });

   marker = new RichMarker({
          map: map,
      position: new google.maps.LatLng(30, 50),
      draggable: true,
      flat: true,
      anchor: RichMarkerPosition.MIDDLE,
      content: div()
   });

   google.maps.event.addListenerOnce(map, 'idle', function() {
      $('.arrow').svg({onLoad: drawCircle});
   });
}