Google Map Api v3, как получить список пользовательских инфобоксов (пользовательских оверлеев)? - PullRequest
0 голосов
/ 18 октября 2010

я создал пользовательские оверлеи, используя следующая ссылка .

как я могу получить список созданных наложений (или массив, или что-то еще)?

Мне это нужно, потому что мне нужна возможность закрыть некоторые из них.

1 Ответ

1 голос
/ 18 октября 2010

Вам необходимо отслеживать, какие наложения вы создали в массиве, и если вам нужно закрыть некоторые из них, вы можете найти их в массиве и установить для них setMap (null) или другой метод, который избавится от них (close ( ) в приведенном ниже примере). Полезно создать собственный идентификатор для ваших маркеров или наложений в массиве, чтобы вы могли быстро найти их.

Вот пример закрытия пользовательского InfoBox из библиотеки утилит Google Maps

<html> 
<head> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script src="http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1/src/infobox.js"></script> 
<script type="text/javascript"> 

    //this is the array to store our custom objects in 
     ibArray = [];

    //standard stuff
    function initialize() {

        var secheltLoc = new google.maps.LatLng(49.47216, -123.76307);

        var myMapOptions = {
             zoom: 15
            ,center: secheltLoc
            ,mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var theMap = new google.maps.Map(document.getElementById("map_canvas"), myMapOptions);


        var marker = new google.maps.Marker({
          map: theMap
         ,position: new google.maps.LatLng(49.47216, -123.76307)
         ,visible: true
        });

        var boxText = document.createElement("div");
        boxText.style.cssText = "border: 1px solid black; margin-top: 8px; background: yellow; padding: 5px;";
        boxText.innerHTML = "City Hall, Sechelt<br>British Columbia<br>Canada";

        var myOptions = {
             content: boxText
            ,disableAutoPan: false
            ,maxWidth: 0
            ,pixelOffset: new google.maps.Size(-140, 0)         
            ,zIndex: null
            ,boxStyle: { 
              background: "url('tipbox.gif') no-repeat"
              ,opacity: 0.75
              ,width: "280px"

             }
            ,closeBoxMargin: "10px 2px 2px 2px"
            ,closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif"
            ,infoBoxClearance: new google.maps.Size(1, 1)
            ,isHidden: false
            ,pane: "floatPane"
            ,enableEventPropagation: false

        };

        var ib = new InfoBox(myOptions);

        //store your info box in the array with a custom id - there are number of ways you can index this - it really depends on what you are doing
        //you will need to all your objects that you want to close later. 
        ibArray.push({myId:"1234",box: ib});        

        //open the box
        ib.open(theMap, marker);
    }

    //close the box with an id passed to this function
    function closeBox(id){

        for (i=0;i<ibArray.length;i++) {
            if (ibArray[i].myId==id){
                myBox = ibArray[i].box;
                myBox.close();
            }
        }
    }
</script> 

</head> 
<body onload="initialize()"> 
    <div id="map_canvas" style="width:100%; height:50%"></div> 
    <p> 
    <input type="button" value="close box with custom id" onclick="javascript:closeBox('1234')">
</body> 

</html> 
...