2013-03-08 8 views
6

Для школьного проекта у нас возникает эта идея создания геопространственной тег-игры. Вы регистрируетесь в нашем приложении, ваше местоположение отображается на карте, и всякий раз, когда вы приближаетесь к другому игроку, вы отмечаете этого человека. (Как и детский тег, но с метеор)Как обновить маркер на карте листовки, с метеоритом

Проблема, которую мы имеем, мы, похоже, не в состоянии автоматически обновить наш маркер на карте листовки. Есть маркер, показывающий, что он просто не обновляется.

Мы попытались использовать Player.update за один раз, но это не сработало.

Любые предложения?

Код

 if (Meteor.isClient) { 

    var userLatitude; 
    var userLongitude; 

    var map; 

    Template.map.rendered = function() { 

     // Setup map 
     map = new L.map('map', { 
      dragging: false, 
      zoomControl: false, 
      scrollWheelZoom: false, 
      doubleClickZoom: false, 
      boxZoom: false, 
      touchZoom: false 
     }); 

     map.setView([52.35873, 4.908228], 17); 
     //map.setView([51.9074877, 4.4550772], 17); 

     L.tileLayer('http://{s}.tile.cloudmade.com/9950b9eba41d491090533c541f170f3e/[email protected]/256/{z}/{x}/{y}.png', { 
      maxZoom: 17 
     }).addTo(map); 

     // If user has location then place marker on map 
     if (userLatitude && userLongitude) { 
      var marker = L.marker([userLatitude, userLongitude]).addTo(map); 
     } 

     var playersList = players.find().fetch(); 
     playersList.forEach(function(players) { 
      // Change position of all markers 
      var marker = L.marker([players.latitude, players.longitude], options={"id" : 666}).addTo(map); 
     }); 
    }; 

    // If the collection of players changes (location or amount of players) 
    Meteor.autorun(function() { 

     var playersList = players.find().fetch(); 
     playersList.forEach(function(players) { 
      // Change position of all markers 
      var marker = L.marker([players.latitude, players.longitude]).addTo(map); 
     }); 
    }); 
} 



if (Meteor.isServer) { 
    Meteor.startup(function() { 
     // code to run on server at startup 

    }); 
} 











    /* 
Template.hello.events({ 
     'click input' : function() { 
     // template data, if any, is available in 'this' 
     if (typeof console !== 'undefined') 
      console.log("You pressed the button"); 
     } 
    }); 
*/ 

/* 
if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) {     
       userLatitude = 52.35873; 
       userLongitude = 4.908228; 

       players.insert({ 
        name: "Martijn", 
        latitude: userLatitude, 
        longitude: userLongitude 
       }); 
      }); 
     } 
*/ 
+0

Пожалуйста, пост код, связанный с этим вопросом –

ответ

8

Вам нужно очистить существующие маркеры, в противном случае они остаются на карте. Самый простой/самый эффективный способ сделать это - присоединить маркеры к LayerGroup, когда вы их создаете. Затем, когда вы хотите обновить, очистите все маркеры, а затем добавьте их снова. Декларация

Добавить группу слой в верхней части, поэтому у вас есть

var map, markers; 

После инициализации карты,

markers = new L.LayerGroup().addTo(map); 

Изменить эту строку:

var marker = L.marker([userLatitude, userLongitude]).addTo(map); 

к:

var marker = L.marker([userLatitude, userLongitude]).addTo(markers); 

в вашем автозапуск, перед Foreach,

markers.clearLayers(); 

затем в вашем Еогеасп,

var marker = L.marker([players.latitude, players.longitude]).addTo(markers); 

 Смежные вопросы

  • Нет связанных вопросов^_^