обновить местоположение маркера на листочке при прослушивании сокета io - PullRequest
0 голосов
/ 03 декабря 2018

Используя node.js и socket.io для получения местоположений пользователей в маркерах листовки, каждые 10 секунд сервер socket.io выдает координаты каждого подключенного пользователя, например:

{ username: 'abc',
  lat: 50.5144613,
  lng: 50.2842622,
}

в клиентесторона, которую я использую:

socket.on('new Location', function(data){
         var markers=[];
            var result=JSON.stringify(data);
            var obj = JSON.parse(result);

         if (!markers[obj.username] ) {
            markers[obj.username] = L.marker([obj.lat, obj.lng]).bindPopup(obj.username).addTo(map);
            } else {
            markers[obj.username].setLatLng(obj.lat, obj.lng).setPopupContent(objz.username);
            }

это рисует много маркеров для каждого подключенного пользователя, когда клиент слушает сервер, в то время как мне нужно обновить местоположение маркера каждого подключенного пользователя.Как обновить позиции маркеров и не рисовать больше маркеров?

1 Ответ

0 голосов
/ 03 декабря 2018

Область действия вашего массива markers[] неверна - вы создаете новый массив каждый раз, когда получаете обновление местоположения.

Удаляет var markers=[] из функции socket.on.

например (в зависимости от того, как выложен остальной код)

var markers=[];

socket.on('new Location', function(data){

            var result=JSON.stringify(data);
            var obj = JSON.parse(result);

         if (!markers[obj.username] ) {
            markers[obj.username] = L.marker([obj.lat, obj.lng]).bindPopup(obj.username).addTo(map);
            } else {
            markers[obj.username].setLatLng(obj.lat, obj.lng).setPopupContent(objz.username).update();
            }
});

Я также добавил .update(), чтобы ваш измененный маркер обновился на карте.

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