Un mémorandum est enregistré lorsque la carte est affichée sur la page des détails de l'article à partir de l'adresse enregistrée par l'utilisateur à l'aide de l'API JavaScript de Google Maps et de l'API de géocodage.
・ Rubis '2.5.7' ・ Rails '5.2.3'
・ Vous avez déjà obtenu la clé API pour Google Maps. -Le modèle de poste (ici, le modèle Datespot) a une colonne d'adresse.
【référence】 Obtenez la clé API pour Google Maps
Veuillez créer la page des détails de l'article selon vos propres spécifications.
views/show.html.erb
<div class="container">
  <div class="row">
  (réduction)
    <div class="col-md-8">
      <h2 class="datespot-name"><%= @datespot.name %></h2>
      <div class="datespot-info">
    (réduction)
        <h4 id="address">【Adresse de rue】<%= @datespot.address %></h4>
    (réduction)
      </div>
    </div>
  </div>
</div>
<%= render "map-show" %>
Créez une vue qui affiche la carte.
views/_map-show.html.erb
<div class="map-container">
  <div class="map_wrapper">
    <div id="map" class="map"></div>
  </div>
</div>
<script src="https://maps.googleapis.com/maps/api/js?key=<%= ENV['GOOGLE_MAP_API_KEY']%>&callback=initMap"></script>
Mettons la clé API obtenue dans la variable d'environnement.
stylesheets/custom.scss
#map{
  height: 310px;
  width: 550px;
}
Si vous ne spécifiez pas explicitement la taille de la carte, elle ne sera pas affichée, assurez-vous donc de la spécifier.
Définissez la fonction de rappel décrite dans 2.
javascripts/map-show.js
function initMap() {
  //Assignez l'objet de l'élément div de la zone pour afficher la carte à la variable
  var target = document.getElementById('map');
  //Titre du marqueur
  var title = $('.datespot-name').text();
  //Obtention de l'adresse décrite en HTML
  var address = document.getElementById('address').textContent;
  //Générer une instance de géocodage
  var geocoder = new google.maps.Geocoder();
  //geocoder.geocode()Passez l'adresse et écrivez une fonction de rappel à traiter
  geocoder.geocode({ address: address }, function(results, status){
  //Le statut est OK et les résultats[0]Générer une carte si elle existe
    if (status === 'OK' && results[0]){
      //Attribuer une instance de la carte à une variable
      var map = new google.maps.Map(target, {
      //results[0].geometry.location contient des objets de latitude / longitude
        center: results[0].geometry.location,
        zoom: 15
      });
      //Génération de marqueurs
      var marker = new google.maps.Marker({
        position: results[0].geometry.location,
        map: map,
        animation: google.maps.Animation.DROP
      });
      //Génération des coordonnées acquises
      var latlng = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
      //Créer du contenu à afficher dans la fenêtre d'informations
      var content = '<div id="map_content"><p>' + title + '<br/>' + address + '<br/><a href="https://maps.google.co.jp/maps?q=' + latlng + '&iwloc=J" target="_blank" rel="noopener noreferrer">Afficher sur Google Maps</a></p></div>';
      //Créer une instance de la fenêtre d'informations
      var infowindow = new google.maps.InfoWindow({
        content: content,
      });
      //Cliquez sur le marqueur pour afficher la fenêtre d'informations(Enregistrement de l'auditeur)
      google.maps.event.addListener(marker, 'click', function() {
        //Associer en spécifiant un marqueur dans le deuxième argument
        infowindow.open(map, marker);
      });
    }else{
    //Si l'état est autre que OK ou résultats[0]S'il n'existe pas, une alerte s'affiche et le traitement est interrompu.
      alert("L'emplacement n'a pas pu être obtenu à partir de l'adresse.: " + status);
      return;
    }
  });
}
var target = document.getElementById ('map'); est
Il fait référence à la `` 
var title = $ ('.datespot-name'). text (); est
Il fait référence à <h2 class = "datespot-name"> <% = @ datesspot.name%> </ h2> dans views / show.html.erb.
var adresse = document.getElementById ('adresse'). TextContent;
Il fait référence à <h4 id = "address"> [address] <% = @ datesspot.address%> </ h4> dans views / show.html.erb.
Vous pouvez maintenant afficher la carte sur la page des détails de l'article à partir de l'adresse enregistrée par l'utilisateur!

Comment utiliser et utiliser l'API Google Maps Utilisons Google Maps
Recommended Posts