Использование Pusher для добавления маркеров на карту? - PullRequest
1 голос
/ 05 сентября 2011

Я работаю над созданием карты для показа на основе IP-адресов людей на моем сайте. Я думал о крутой карте, показывающей все места по всему земному шару, которые попадали на карту. Но у меня возникла небольшая проблема. У меня отслеживаются ip, а затем они обрабатываются в Geo-запросе, и, наконец, я использую pusherapp для публикации данных на карте. Однако теперь я могу создать неупорядоченный список, добавив данные на мой сайт, но я не могу понять, как добавить его на мою карту Google, и при этом не перерисовать эту карту с данными. Может ли кто-нибудь помочь мне здесь? Так что в основном на стороне сервера:

var bounds = new google.maps.LatLngBounds();
var latlng = new google.maps.LatLng( #{@a.lat}, #{@a.lng});

    var marker = new google.maps.Marker({
      animation: google.maps.Animation.DROP,
      icon: 'images/marker.png',
      map: map,
      position: latlng,
      title: 'Here'
    });

    bounds.extend(latlng);
    map.fitBounds(bounds);

, а затем на стороне клиента:

channel.bind('latitude', function(data){
 $('#list').append(data);
});  

Но даже если я получу его, чтобы добавить в раздел скриптов, эта карта Google будет знать, как обновить? Мне бы очень хотелось, чтобы все это было в Rails, а для сервиса я сейчас использую pusher Спасибо!

1 Ответ

2 голосов
/ 06 сентября 2011

спасибо за использование нашего сервиса.

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

Часть функции присутствия заключается в том, что когда пользователь подписывается на канал, на ваш сервер выполняется вызов AJAX.В рамках этого вызова вы можете выполнить поиск IP-адреса, а затем вернуть подробности (я бы предложил только значения lat и long) этого поиска в виде user_info для запроса присутствия.См. Аутентификация пользователей для получения дополнительной информации об этом.Эти документы также предоставляют пример Rails для аутентификации пользователя и предоставления user_info для этого пользователя.

Когда любой пользователь подписывается на канал присутствия в клиенте, он получает начальный список подключенных пользователей .Вы можете просмотреть этот список пользователей, получить информацию для каждого пользователя и добавить маркер на карту Google.Когда присоединятся новые пользователи, вы получите member_added событий на канале, и вы можете добавить новый маркер.Когда пользователи уходят, вы получите member_removed событие и вы можете удалить маркер.

Примером кода клиента может быть:

var channel = pusher.subscribe('presence-site-map-channel');

// Initial list of users on the site
channel.bind('pusher:subscription_succeeded', function(members) {
  members.each(function(member) {
    addMember(member);
  });
});
channel.bind('pusher:member_added, addMember);
channel.bind('pusher:member_removed, function() { /* TODO: implement */});

function addMember(member) {
  var bounds = new google.maps.LatLngBounds();
  var latlng = new google.maps.LatLng( member.info.lat, member.info.long);

  var marker = new google.maps.Marker({
    animation: google.maps.Animation.DROP,
    icon: 'images/marker.png',
    map: map,
    position: latlng,
    title: member.info.id // each user must have a unique ID and you could use it here
  });

  bounds.extend(latlng);
  map.fitBounds(bounds);
};
...