Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌地图上添加标记_Javascript_Google Maps - Fatal编程技术网

Javascript 在谷歌地图上添加标记

Javascript 在谷歌地图上添加标记,javascript,google-maps,Javascript,Google Maps,我正试图在谷歌地图上实时更新一个标记。我需要一个标记作为起始位置,然后随着位置的变化(用户移动),将绘制一条多段线,标记将显示当前位置。因此,每个用户将有两个标记;一个显示起始位置,另一个不断更新并显示当前位置 我可以画线和开始标记来工作,但是使用此代码,每次位置更改时,都会放置一个新标记,而不是更新旧标记。我正在尝试使用setPosition();但它似乎不起作用。有什么想法吗 function initialize() { var myLatlng = new google.m

我正试图在谷歌地图上实时更新一个标记。我需要一个标记作为起始位置,然后随着位置的变化(用户移动),将绘制一条多段线,标记将显示当前位置。因此,每个用户将有两个标记;一个显示起始位置,另一个不断更新并显示当前位置

我可以画线和开始标记来工作,但是使用此代码,每次位置更改时,都会放置一个新标记,而不是更新旧标记。我正在尝试使用setPosition();但它似乎不起作用。有什么想法吗

   function initialize() {
    var myLatlng = new google.maps.LatLng(39, -86);
    var myOptions = {
        zoom: 6,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    }       
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    var loc = {};
    var mark = {};
    var markers = {};

    $(function () {
        $(document).ready(function(){
            setInterval(function(){
                $.ajax({                                      
                    url: 'api.php',                  //the script to call to get data          
                    //data: "",                       
                    dataType: 'json',                //data format      
                    success: function(data){          //on recieve of reply                          


                        var user_id = data[0];
                        var lati = data[1];              //get id
                        var longi = data[2];           //get name

                        var myLatlngt = new google.maps.LatLng(lati, longi);

                        if (typeof loc[user_id] === 'undefined') {
                            loc[user_id] = [];
                            }

                        //if (typeof markers[user_id] === 'undefined') {
                            //markers[user_id] = [];
                            //}

                        if (typeof mark[user_id] === 'undefined') {
                            mark[user_id] = myLatlngt;
                            }

                        loc[user_id].push(myLatlngt);
                        //markers[user_id].push(myLatlngt);
                        var marker1;
                        var x;
                        for (x in loc) {
                            var polyline = new google.maps.Polyline({
                                map: map,
                                path: loc[x],
                                strokeColor: "#FF0000",
                                strokeOpacity: 1.0,
                                strokeWeight: 2
                                });
                            polyline.setMap(map);

                            ///location variables
                            var start_loc = loc[user_id];
                            var start_marker = start_loc[0]; //start location of given user
                            var current_loc = start_loc[start_loc.length -1]; //last known location of given user

                            //set the start marker
                            var marker = new google.maps.Marker({
                                position: start_marker,
                                title: user_id
                            });
                            marker.setMap(map); 

                            //update the current location marker
                            if (marker1 != null) {
                                marker1.setPosition(current_loc);
                            }
                            else {
                                marker1 = new google.maps.Marker({
                                    position: current_loc,
                                    map: map
                                });
                            }                   
                        }
                            //console.log('location :::', x);
                            console.log('Marker: ', mark);
                    } 
                });
            }, 1000);
        });
    });
}

尝试在函数外部声明marker1变量(
var-marker1;
),使其成为全局变量(作用域)。紧跟在
var标记={}之后应该这样做。如果这不起作用,请告诉我,我会深入调查。

它起作用了!但现在我有另一个问题。如果我跟踪两个用户,当前位置标记将从一个用户跳到另一个用户,而不是每个用户都有一个标记。知道为什么吗?如果我想在飞行中创造它们呢?比如我的多段线可以为多个用户创建,而不是创建一堆全局变量。每个标记都是一个变量,但是你可以有一个满是标记的数组。您可以从数组中添加和删除标记,并使用键(可能)标识每个标记所属的用户。类似于…
$myMarkers[userId].setPosition(当前位置)