Как добавить несколько маркеров на Google Maps? - PullRequest
0 голосов
/ 25 февраля 2020

Я использовал карты Google с одним маркером для моего приложения rails:

<script>
  function initMap(lat, lng) {
    var myCoords = new google.maps.LatLng(lat, lng);
    var mapOptions = {
    center: myCoords,
    zoom: 14
    };
    var map = new google.maps.Map(document.getElementById('map'), mapOptions);

    var marker = new google.maps.Marker({
    position: myCoords,
    map: map
});
}
</script>
<script>
    $('#map').prepend(initMap(<%= @location.latitude %>, <%= @location.longitude %>));
</script>

Но как я могу перенести несколько маркеров на карту?

Я пытался, но это не работает:

<% @locations.each do |location| %>
   <script>
     $('#map').prepend(initMap(<%= location.latitude %>, <%= location.longitude %>));
   </script>
<% end %>

Затем я создаю массив:

array = []
  @locations.each do |location|
  array.push([location.latitude, location.longitude])
  end 

, который выглядит так:

[[50.0874654, 14.4212535], [49.4447888, 32.0587805], [49.42105565, 32.1004058189433]]

И попробуйте перейти к js:

   <script>
     $('#map').prepend(initMap(<%= array %>));
   </script>

Но это тоже не сработало.

1 Ответ

2 голосов
/ 25 февраля 2020

Вам необходимо добавить перегрузочную функцию initMap, которая принимает массив, как показано ниже:

<script>
  function initMap(lat, lng) {
    var myCoords = new google.maps.LatLng(lat, lng);
    var mapOptions = {
    center: myCoords,
    zoom: 14
    };
    var map = new google.maps.Map(document.getElementById('map'), mapOptions);

    var marker = new google.maps.Marker({
    position: myCoords,
    map: map
});
}

function initMap(locationArr) {
      for (var i = 0; i < locationArr.length; i++) {
        var myCoords = new google.maps.LatLng(locationArr[i][0], locationArr[i][1]);
        var mapOptions = {
          center: myCoords,
          zoom: 14
        };
        var map = new google.maps.Map(document.getElementById('map'), mapOptions);

        var marker = new google.maps.Marker({
          position: myCoords,
          map: map
        });
      }

    }
</script>
...