Автоматически обновлять пользовательский контент карты Google - PullRequest
0 голосов
/ 27 августа 2018

У меня есть пользовательская карта Google, реализованная на сайте (работающая локально, поэтому я не могу связать вас с ней), которую я сделал, которая выступает в качестве внешнего интерфейса для анализатора данных. Этот анализатор обрабатывает данные и возвращает местоположения, которые будут использоваться в качестве маркеров на моей пользовательской карте. По мере того, как анализатор расходится, мне нужно, чтобы карта обновлялась сама каждую секунду или около того, чтобы убедиться, что отображаются новые маркеры и убраны старые. Данные для маркеров хранятся в базе данных MySQL и извлекаются с использованием PHP. У меня есть функция (get_markers), которая возвращает массив для данных для каждого местоположения. Это в формате, который карты Google требуют для маркеров: [['Fire', 1, 1, 238], ['Hurricane', 18.0848456, -77.215729455, 236]].

Другая функция PHP (get_markers_byid) используется для возврата идентификаторов маркеров из базы данных, чтобы проверить, есть ли новые.

В настоящее время мой код возвращает текущие маркеры, но, похоже, не обновляется сам, как мне нужно ...

Любая помощь будет отличной!

P.S. Мне также нужно добавить слой карты тепла, который работает таким же образом. Любые идеи на этот счет также будут очень полезны!

<script>
            var map;
            var markers = [];
            var markersID = [];
            var heatmap;
            function initMap() 
            {
                map = new google.maps.Map(document.getElementById('map'), 
                {
                    zoom: 2.5,
                    center: {lat: 0, lng: 0},
                    mapTypeId: 'satellite'
                });

                addmarkers();
            }

            //add markers to the map
            function addmarkers()
            {                   
                var locations = [<?php echo $db->get_markers(); ?>];
                markersID = [<?php echo $db->get_markers_byid(); ?>];

                var marker, i, mylatlng, info;

                for(i = 0; i < locations.length; i++)
                {
                    info = locations[i][0]  + " - Event ID: " + locations[i][3];                    

                    mylatlng = {lat: locations[i][1], lng: locations[i][2]};
                    marker = new google.maps.Marker({
                        position: mylatlng,
                        map: map,
                        title: info
                    });
                    markers.push(marker);
                }
                setMapOnAll(map);
            }

            //check all the markers by their ID currently shown to the current state of database to see if an update is needed
            function checkmarkers()
            {
                var newmarkers = [<?php echo $db->get_markers_byid(); ?>];
                var newmarker = false;
                var seen = false;
                var lengthchange = false;

                if(markersID.length != newmarkers.length)
                {
                    lengthchange = true;
                }

                if(lengthchange == false)
                {
                    for(i = 0; i < markersID.length; i++)
                    {
                        seen = false;
                        for(j = 0; j < newmarkers.length; j++)
                        {
                            if(markersID[i] == newmarkers[j])
                            {
                                seen = true;
                            }
                        }

                        if(seen == false)
                        {
                            newmarker = true;
                            break;
                        }
                    }
                }

                if(newmarker == true || lengthchange == true)
                {
                    clearMarkers();
                    deleteMarkers();
                    addmarkers();
                }
            }

            function clearMarkers() 
            {
                setMapOnAll(null);
            }

            function deleteMarkers() 
            {
                clearMarkers();
                markers = [];
            }                       

            function setMapOnAll(map) 
            {
                for (var i = 0; i < markers.length; i++) 
                {
                    markers[i].setMap(map);
                }
            }

            /*function addheat()
            {                   
                heatmap.setMap(null);
                heatmap = new google.maps.visualization.HeatmapLayer({
                    data: getPoints(),
                    map: map
                });
            }

            function getPoints()
            {
                return [ <?php echo $db->get_map(); ?> ];
            }*/

            function populatemap()
            {
                checkmarkers();
            }
            setInterval(populatemap,1000);
        </script>
...