1

我正在动态绘制多边形并单击多边形以打开 InfoWindow。我正在成功绘制多边形,但单击 Infowindow 时似乎没有。不给出错误只是似乎没有!

这是我所有的代码;

       function ADD_EVENT_FOR_POLYLINE_AND_POLYGON () {
            GLOBALS.PolyGonPath = new google.maps.MVCArray;
            GLOBALS.PolyGon = new google.maps.Polygon({
                strokeWeight: 3,
                fillColor: '#5555FF'
            });
            GLOBALS.PolyGon.setMap(GLOBALS.Map);
            google.maps.event.addListener(GLOBALS.Map, 'click', DRAW_POLYGON);
        }


     function DRAW_POLYGON(event) {
        GLOBALS.PolyGonPath.insertAt(GLOBALS.PolyGonPath.length, event.latLng);
        var marker = new google.maps.Marker({
            position: event.latLng,
            map: GLOBALS.Map,
            draggable: true
        });
        GLOBALS.PolyMarkers.push(marker);
        marker.setTitle("#" + GLOBALS.PolyGonPath.length);
        google.maps.event.addListener(marker, 'click', function () {
            marker.setMap(null);
            for (var i = 0, I = GLOBALS.PolyMarkers.length; i < I && GLOBALS.PolyMarkers[i] != marker; ++i);
            GLOBALS.PolyMarkers.splice(i, 1);
            GLOBALS.PolyGonPath.removeAt(i);
        });

        google.maps.event.addListener(marker, 'dragend', function () {
            for (var i = 0, I = GLOBALS.PolyMarkers.length; i < I && GLOBALS.PolyMarkers[i] != marker; ++i);
            GLOBALS.PolyGonPath.setAt(i, marker.getPosition());
        });

        **Here is I am adding a method to polygon for infowindow**
        GLOBALS.PolyGon.setPaths(new google.maps.MVCArray([GLOBALS.PolyGonPath]));
        google.maps.event.addListener(GLOBALS.PolyGon, 'click', SHOW_INFO);
    },


     function SHOW_INFO (event) {
        var infowin = new google.maps.InfoWindow();
        var vertices = GLOBALS.PolyGon.getPath();
        var contentString = "<b>Test</b><br />";

        for (var i = 0; i < vertices.length; i++) {
            var xy = vertices.getAt(i);
            contentString += "<br />" + "Coordinats: " + i + "<br />" + xy.lat() + "," + xy.lng();
        }
        infowin = new google.maps.InfoWindow();
        infowin.setContent(contentString);
        infowin.setPosition(event.latLng);
        infowin.open(GLOBALS.Map, this);
    }
4

1 回答 1

0

尝试将函数中的最后一行代码更改为SHOW_INFO

infowin.setPosition(event.latLng); //Leave this line
infowin.open(GLOBALS.Map, this);

至:

infowin.setPosition(event.latLng); //This line stays the same
infowin.open( GLOBALS.Map );

的第二个参数infowin.open是一个可选MVCObject参数,具有公共position属性,用作锚点。在这种情况下,您不需要提供锚点,因为您已经调用了infowin.setPosition传递google.maps.LatLng. 从方法的google.maps.InfoWindowapi-doc描述open

在给定地图上打开此信息窗口。可选地,信息窗口可以与锚相关联。在核心 API 中,唯一的锚点是 Marker 类。但是,锚点可以是任何公开位置属性的 MVCObject,也可以是用于计算 pixelOffset 的可选锚点(请参阅 InfoWindowOptions)。anchorPoint 是从锚点位置到信息窗口尖端的偏移量。

于 2012-06-13T12:17:41.037 回答