Настройка инфобокса

Мне удалось внедрить «Информационное окно» на одну из моих карт, которая загружает местоположения, сохраненные в базе данных mySQL, но я хотел бы внести в это несколько изменений, но я не уверен, как это сделать.

Код, который я использую, приведен ниже, но я хотел бы иметь возможность заменить поведение информационного окна «по умолчанию», т. е. появляющееся рядом с каждым маркером при загрузке карты, на информационное окно, появляющееся только после того, как маркер была нажата, панорамирование, чтобы центрировать карту на этом маркере. Затем, когда щелкнут следующий маркер, информационное окно перемещается от первого к вновь нажатому маркеру, снова с функциями панорамирования и центрирования.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Map My Finds - All Locations</title>
        <link rel="stylesheet" href="css/alllocationsstyle.css" type="text/css" media="all" />
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&language=en"></script>
        <script type="text/javascript" src="js/infobox.js"></script>
        <script type="text/javascript"> 
            var customIcons = {
            0: {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            1: {
            icon: 'http://labs.google.com/ridefinder/images/mm_20_green.png',
            shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            }
            };

            function load() { 
            var map = new google.maps.Map(document.getElementById("map"), { 
            center: new google.maps.LatLng(54.312195845815246,-4.45948481875007), 
            zoom:6, 
            mapTypeId: 'roadmap' 
            }); 

            // Change this depending on the name of your PHP file 
            downloadUrl("loadalllocations.php", function(data) { 
            var xml = data.responseXML; 
            var markers = xml.documentElement.getElementsByTagName("marker");
            var bounds = new google.maps.LatLngBounds();
            for (var i = 0; i < markers.length; i++) { 
            var locationname = markers[i].getAttribute("locationname"); 
            var address = markers[i].getAttribute("address");
            var totalfinds = markers[i].getAttribute("totalfinds");
            var point = new google.maps.LatLng( 
            parseFloat(markers[i].getAttribute("osgb36lat")), 
            parseFloat(markers[i].getAttribute("osgb36lon")));
            var icon = {}; 
            if (totalfinds == 0) {   
            icon = customIcons[0]; 
            } else if (totalfinds >= 1) {   
            icon = customIcons[1];      
            } 
            var marker = new google.maps.Marker({          
            map: map, 
            position: point,
            title: address,
            icon: icon.icon,
            shadow: icon.shadow
            }); 
            bounds.extend(point);
            map.fitBounds(bounds);

            var boxText = document.createElement("div");
            boxText.style.cssText = "border: 1px solid black; margin-top: 8px; background: orange; padding: 5px;";
            boxText.innerHTML = locationname + "<p>" + 'No. of finds: ' + "<b>" + totalfinds + "</b>" + "</p>";;
            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.50
            ,width: "180px"
            }
            ,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);
            ib.open(map, marker);

            } 
            }); 
            } 

            function downloadUrl(url, callback) { 
            var request = window.ActiveXObject ? 
            new ActiveXObject('Microsoft.XMLHTTP') : 
            new XMLHttpRequest; 

            request.onreadystatechange = function() { 
            if (request.readyState == 4) { 
            request.onreadystatechange = doNothing; 
            callback(request, request.status); 
            } 
            }; 

            request.open('GET', url, true); 
            request.send(null); 
            } 

            function doNothing() {} 

            </script> 
            </head>    
            <body onLoad="load()">
                <div id="map"></div>
            </body> 
            </html>

Я также хотел бы узнать немного больше об информационном окне с точки зрения изменения цвета, полей и т. д., но я нашел только руководство по адресу http://google-maps-utility-library, который не так подробен, как хотелось бы. Есть ли еще место, где я могу получить более подробную информацию?


Теперь это было решено, и код работает.


person IRHM    schedule 01.09.2011    source источник


Ответы (1)


Попробуйте этот пример кода для информационных окон.

Здесь есть количество других примеров для других функций

Особенности, которые вы, вероятно, ищете,

var contentString = '<div id="content">'+
    '<div id="siteNotice">'+
    '</div>'+
    '<h1 id="firstHeading" class="firstHeading">Uluru</h1>'+
    '<div id="bodyContent">'+
    '<p><b>Uluru</b>, also referred to as <b>Ayers Rock</b>, is a large ' +
    'sandstone rock formation in the southern part of the '+
    'Northern Territory, central Australia. It lies 335&#160;km (208&#160;mi) '+
    'south west of the nearest large town, Alice Springs; 450&#160;km '+
    '(280&#160;mi) by road. Kata Tjuta and Uluru are the two major '+
    'features of the Uluru - Kata Tjuta National Park. Uluru is '+
    'sacred to the Pitjantjatjara and Yankunytjatjara, the '+
    'Aboriginal people of the area. It has many springs, waterholes, '+
    'rock caves and ancient paintings. Uluru is listed as a World '+
    'Heritage Site.</p>'+
    '<p>Attribution: Uluru, <a href="http://en.wikipedia.org/w/index.php?title=Uluru&oldid=297882194">'+
    'http://en.wikipedia.org/w/index.php?title=Uluru</a> '+
    '(last visited June 22, 2009).</p>'+
    '</div>'+
    '</div>';

//create info window with a specific content string
var infowindow = new google.maps.InfoWindow({
    content: contentString
});

//marker listener
google.maps.event.addListener(marker, 'click', function() {
  infowindow.open(map,marker);
});
person ZMorek    schedule 01.09.2011
comment
Привет! Большое спасибо за ответ на мой пост. Я просмотрел другие примеры, которые вы выделили, и подумал, что InfoBox был лучшим вариантом. Однако я пробовал код re. событие щелчка, которое вы предложили, поэтому последние строки моего кода: google.maps.event.addListener(marker, 'click', function() { var ib = new InfoBox(myOptions); ib.open(map, marker) ; }) Событие щелчка работает, но независимо от того, какой маркер я нажимаю на InfoBox, появляется только рядом с последним маркером на карте. У вас есть какие-нибудь идеи, как я могу обойти это? Большое спасибо еще раз. Крис - person IRHM; 01.09.2011
comment
У меня была та же проблема, предлагаемое решение было чтобы вывести информационное окно на более глобальный уровень и обновить его функцию. Это связано с закрытием javascript. Удачи! - person ZMorek; 01.09.2011
comment
Привет, большое спасибо за внимание к моему посту и за ваше предложение. К сожалению, я не могу заставить это работать. Мне просто интересно, может ли это быть из-за того, что вы используете «InfoWindow», а я использую InfoBox. с уважением Крис. - person IRHM; 01.09.2011