Заполнение маркеров Google Maps для Rails на основе геолокации - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь использовать гем Google Maps для Rails , чтобы заполнить карту маркерами, основанными на пользовательском gmaps4rails_callback, который использует текущее местоположение, но я не могу получить код для замены маркеры для срабатывания после определения географического местоположения пользователя.

My application.js определяет функцию обратного вызова пользовательских карт вместе с обратным вызовом для getCurrentPosition:

function nearby_locations(position) {
    $.getJSON('locations/nearby.json',
          { lat: "33.7012", long: "-117.8683" },
          function(data) {
                    Gmaps4Rails.replace_markers(data);
          });   
}

function gmaps4rails_callback() {
    navigator.geolocation.getCurrentPosition(nearby_locations);
}

Пока что я использую жестко закодированные данные широты и долготы, но в конечном итоге собираюсь отключить реальные данные в переданном мне объекте position. Выполнение вызова getJSON вручную работает нормально, и мой locations/nearby.json возвращает данные о местоположении в правильном формате, который обновляет маркеры, как и ожидалось.

Мой шаблон просмотра просто использует

<%= gmaps("map_options" => {"auto_adjust" => true, "detect_location" => true}) %>

Теперь я понимаю, что я, вероятно, дважды выполняю гео-поиск, используя оба Detection_location и затем вызывая getCurrentPosition, но в более ранней попытке код в gmaps4rails_callback выполнялся до разрешения геолокации из браузера ( Safari) даже был завершен, поэтому я подумал, что это задержит выполнение, пока не будет определено местоположение.

Ранее я отображал карту без пользовательского gmaps4rails_callback, и она работала нормально, поэтому я знаю, что мои файлы jQuery и JavaScript включены просто отлично.

Возможно ли, что Google Maps для Rails каким-то образом уже настроил свой собственный обратный вызов getCurrentPosition, а мой игнорируется? После добавления некоторой регистрации отладки это не похоже на то, что nearby_locations вызывается вообще.

1 Ответ

1 голос
/ 24 мая 2011

Обычно, когда вы устанавливаете "detect_location" => true, запускается следующая функция:

findUserLocation: function() {
    if(navigator.geolocation) {
    //try to retrieve user's position
    navigator.geolocation.getCurrentPosition(function(position) {
      //saves the position in the userLocation variable
      Gmaps4Rails.userLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
           //change map's center to focus on user's geoloc if asked
            if(Gmaps4Rails.map_options.center_on_user === true) {
                Gmaps4Rails.map.setCenter(Gmaps4Rails.userLocation);
            }
    },
    function() {
          //if failure, triggers the function if defined
          if(this.fnSet("gmaps4rails_geolocation_failure")) { gmaps4rails_geolocation_failure(true); }
        });
  }
  else {
      //if failure, triggers the function if defined
      if(this.fnSet("gmaps4rails_geolocation_failure")) { gmaps4rails_geolocation_failure(false); }
  }
}

Так что да, геолокация уже сделана ... или в процессе. Эта функция срабатывает до gmaps4rails_callback, но это сложная часть с геолокацией браузера: она занимает неопределенное время.

Я думал о предложении обратного вызова при сбое, но не думал, что необходимо включать обратный вызов в случае успеха (я до сих пор не убежден).

К сожалению, я не понимаю проблемы с вашим gmpas4rails_callback: у меня есть и detection_location, и обратный вызов, и он работает как положено.

...