【问题标题】:update markers without reloading the web page google maps v3更新标记而不重新加载网页谷歌地图 v3
【发布时间】:2012-03-23 21:09:28
【问题描述】:

首先我为我糟糕的英语道歉,但我无法在所有法语论坛上找到我的问题的答案。

我正在开发一个用于实时跟踪车队的应用程序。

我已完成此应用程序,但我遇到了问题。如果不重新加载我的网页,我无法更新我的标记。

我尝试使用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>

【问题讨论】:

  • 不要忘记,要使用 API 实时跟踪车辆,您需要企业许可证(客户端 ID),并且使用免费的 API 密钥违反Terms of Service
  • 用英文写代码,你永远不知道接下来谁会处理这个代码..

标签: google-maps-api-3


【解决方案1】:

您必须请求一个资源(可能是 PHP 脚本),它使用 AJAX 返回标记(tableauLieux)的数据。

收到响应后,删除当前标记并创建新标记。

【讨论】:

    【解决方案2】:

    如果我理解正确,您每 5 秒使用所有标记重绘地图。

    您想要做的基本上是将标记存储在一个数组中,您可以在以后循环访问以更改它们的 lat 和 lng。从地图上清除它们,更改信息,然后将它们放回地图上。更改信息将需要一些 ajax。

    marker.setMap(null);
    

    【讨论】:

    • 谢谢你的帮助我理解你的方法,但我无法在我的javascript中实现它你能帮我吗?再次感谢您
    • 创建一个函数,每 5 秒调用一次,执行 PHP 循环以从数据库中获取标记。我认为最好清除以前的标记。 map.clearOverlays();然后像以前一样重新绘制标记。这样您就不必保存它们,也不需要更新
    • 你应该有一个标记数组,你可以循环并清除它们。我不认为 map.clearOverlays();在 v3 中工作。
    【解决方案3】:

    一个很好的方法是使用类似的东西

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 2012-08-25
      • 2014-07-19
      • 1970-01-01
      • 2013-04-19
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多