sheldonreddy Ответов: 1

Автоматическое обновление маркеров Google Map.


Эй там, я следую этому учебнику:

https://developers.google.com/kml/articles/phpmysqlkml[^]

он прекрасно работает. Я читаю данные из базы данных, генерирую XML-файл и накладываю его на google maps.

Код точно такой же, как в учебнике. проблема теперь в том, что я автоматически обновляю html-страницу, которая вызывает php-страницу. php-скрипт генерирует XML-файл. Я использую мета-заголовок для автоматического обновления html-страницы. крайне неприятно видеть, как вся страница перезагружается каждые 5 секунд. Мне требуется обновление, поскольку я создаю удаленный регистратор, который имеет динамические возможности.

Я хотел бы просто обновить маркеры. и не страница. Код html-файла приведен ниже. пожалуйста, помогите срочно. спасибо

<!DOCTYPE html >
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Drifter</title>

    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
    //<![CDATA[

    setTimeout(function () {
       window.location.reload();
    }, 5000);


    var customIcons = {
      blue: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
        shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
      },
      red: {
        icon: 'http://labs.google.com/ridefinder/images/mm_20_red.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(-29.86519774,30.98538962),
        zoom: 18,
        mapTypeId: 'terrain'
      }); 

      
      var infoWindow = new google.maps.InfoWindow;

      // Change this depending on the name of your PHP file
      downloadUrl("genxml.php", function(data) {
        var xml = data.responseXML;
        var markers = xml.documentElement.getElementsByTagName("marker");

        for (var i = 0; i < markers.length; i++) {
          
          var point = new google.maps.LatLng(
              parseFloat(markers[i].getAttribute("lat")),
              parseFloat(markers[i].getAttribute("lon")));
          

          var icon = customIcons["blue"] || {};
          var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: icon.icon,
            shadow: icon.shadow
          });


          

          bindInfoWindow(marker, map, infoWindow);
        }
      });
    }

 

    function bindInfoWindow(marker, map, infoWindow) {
      google.maps.event.addListener(marker, 'click', function() {
        
        infoWindow.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. önreadystatechange = doNothing;
          callback(request, request.status);
        }
      };

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

    function doNothing() {}

    //

</script>

  </head>

  <body onload="load()">
    <div id="map" style="width: 1000px; height: 600px"></div>
  </body>

</html>	


спасибо

1 Ответов

Рейтинг:
1

Sandeep1003

Попробуйте это я использую

setInterval


<!DOCTYPE html >
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Drifter</title>

    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript">
        //<![CDATA[
        var markers = [];
        setInterval(function () {
            DeleteMarkers();
            BindMarker();
        }, 5000);

        function DeleteMarkers() {
            //Loop through all the markers and remove
            for (var i = 0; i < markers.length; i++) {
                markers[i].setMap(null);
            }


            markers = [];
        };
        
        var customIcons = {
            blue: {
                icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png',
                shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            },
            red: {
                icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png',
                shadow: 'http://labs.google.com/ridefinder/images/mm_20_shadow.png'
            }
        };

        var map = null;
        var infoWindow = null;
        function load() {
            map = new google.maps.Map(document.getElementById("map"), {
                center: new google.maps.LatLng(-29.86519774, 30.98538962),
                zoom: 18,
                mapTypeId: 'terrain'
            });


            infoWindow = new google.maps.InfoWindow;

            // Change this depending on the name of your PHP file
            BindMarker();
        }

        function BindMarker() {
            downloadUrl("genxml.php", function (data) {
                var xml = data.responseXML;
                var markers = xml.documentElement.getElementsByTagName("marker");

                for (var i = 0; i < markers.length; i++) {

                    var point = new google.maps.LatLng(
                        parseFloat(markers[i].getAttribute("lat")),
                        parseFloat(markers[i].getAttribute("lon")));


                    var icon = customIcons["blue"] || {};
                    var marker = new google.maps.Marker({
                        map: map,
                        position: point,
                        icon: icon.icon,
                        shadow: icon.shadow
                    });

                    markers.push(marker);


                    bindInfoWindow(marker, map, infoWindow);
                }
            });
        }

        function bindInfoWindow(marker, map, infoWindow) {
            google.maps.event.addListener(marker, 'click', function () {

                infoWindow.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.önreadystatechange = doNothing;
                    callback(request, request.status);
                }
            };

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

        function doNothing() { }

        //

</script>

  </head>

  <body onload="load()">
    <div id="map" style="width: 1000px; height: 600px"></div>
  </body>

</html>