обновить маркеры без перезагрузки веб-страницы Google Maps v3 - PullRequest
1 голос
/ 06 марта 2012

Прежде всего, я прошу прощения за мой плохой английский, но я не могу найти ответ на свой вопрос на всех французских форумах.

Я занимаюсь разработкой приложения, которое должно отслеживать в реальном времени флоттранспортные средства.

Я в конце этого приложения, но у меня есть проблема.Я не могу обновить свои маркеры, не перезагружая мою веб-страницу.

Я пытался с settimeout(), но она все еще заряжает мою карту

вот мой код, спасибо за вашу помощь.

PS: после завершения это приложение будет доступно в открытом исходном коде

    <html lang="fr">
    <head>
    <link rel="stylesheet" media="screen" type="text/css" title="Exemple" href="theme.css"/>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <meta charset="UTF-8" />
        <title>Geonano V1</title>
        <style type="text/css">
            html{height: 100%}
            body{height: 100%; margin: 0px; padding: 0px}
            #EmplacementDeMaCarte{height: 100%}
        </style>
        <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
        <script type="text/javascript">
            function initialisation() {
                var tableauLieux = [ 
//here I have a loop in php to get my markers in my database

["Paris",     48.86110, 2.34459],
["Versailles",     48.78199, 2.11045]


                ];
                var optionsCarte = {
                    mapTypeId: google.maps.MapTypeId.ROADMAP
                };
                var maCarte = new google.maps.Map(document.getElementById("EmplacementDeMaCarte"), optionsCarte);
                var bounds = new google.maps.LatLngBounds();
                for (var i = 0; i < tableauLieux.length; i++) {
                    var Lieu = tableauLieux[i];
                    var pointLieu = new google.maps.LatLng(Lieu[1], Lieu[2]);
                    bounds.extend(pointLieu);
                    var marqueurLieu = new google.maps.Marker({
                        position: pointLieu,
                        map: maCarte,
                        title: Lieu[0],
                        icon : Lieu[3],
                        clickable: true

                    });
                    //création de l'info-bulle
                    var infoBulle = new google.maps.InfoWindow({
                    content: Lieu[0]//ici on peut mettre des balises HTML
                    });
                google.maps.event.addListener(marqueurLieu, 'click', function() {
            infowindow.setContent(Lieu[i][0]);
            infoBulle .open(maCarte,marqueurLieu);
            }); 
                }

                maCarte.fitBounds(bounds);
            }

            google.maps.event.addDomListener(window, 'load', initialisation);
            setInterval("initialisation()", 5000); 
        </script>
    </head>

    <body>
        <div id="EmplacementDeMaCarte"></div>



    </body>
    <META HTTP-EQUIV="Refresh" CONTENT="120; URL=http://localhost/geonano.php">
</html>

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Вам потребуется запросить ресурс (может быть PHP-скрипт), который возвращает данные для маркеров (tableauLieux), используя AJAX.

Получив ответ, удалите текущие маркеры и создайте новые маркеры.

0 голосов
/ 09 мая 2013

хороший способ сделать это, используя что-то вроде

refreshIntervalId = setInterval("requestPoints()", 4000);

function requestPoints() {
    $.ajax({
        url:'{% url 'gpstracking.ajax.request_tracks' %}',
        type: 'get',
        dataType: 'json',
        data: {
            vehicles: vehicles
        },
        success: function (positions) {
            updatePoints (positions);
        }
    });
}

function updatePoints (positions) {
    console.debug('updating markers');
    var lttd;
    var lgtd;
    for (var i=0; i < positions.length; i++) {
        lttd = positions[i].latitude;
        lgtd = positions[i].longitude;
        position = map.createPosition({
            lat: lttd,
            lng: lgtd,
        });
        markers[positions[i].registration].setPosition(position);
    };
    if (positions.length > 1) {
        //map.fitZoom();
    } else {
        map.setCenter (lttd, lgtd);
    }
}
0 голосов
/ 06 марта 2012

Если я правильно понимаю, вы перерисовываете карту каждые 5 секунд со всеми маркерами.

В основном вы хотите сохранить маркер в массиве, который вы можете просмотреть позже.время, чтобы изменить их лат и lng.Очистите их от карты, измените информацию, а затем верните их на карту.Для изменения информации понадобится ajax.

marker.setMap(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...