[Rails] Comment afficher plusieurs marqueurs sur Google Map et afficher une bulle lorsque vous cliquez dessus

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation mince

la mise en oeuvre

1. Modifiez le contrôleur

users_controller.rb


def index
  @users = User.all
  gon.users = User.all
end

2. Modifiez la vue

slim:users/index.html.slim


#map style='height: 500px; width: 500px;'

- google_api = "https://maps.googleapis.com/maps/api/js?key=#{ ENV['GOOGLE_MAP_API'] }&callback=initMap".html_safe
script{ async src=google_api }

javascript:

  let map;
  let marker = []; //Je veux afficher plusieurs marqueurs, donc je les arrange
  let infoWindow = []; //Je veux afficher plusieurs bulles, donc je les arrange
  let markerData = gon.users; //Affectez la variable d'instance définie par le contrôleur à la variable

  function initMap() {
    geocoder = new google.maps.Geocoder()

    map = new google.maps.Map(document.getElementById('map'), {
      center: { lat: 35.6585, lng: 139.7486 }, //L'affichage est centré sur la tour de Tokyo
      zoom: 12,
    });

    //Afficher plusieurs marqueurs et bulles par traitement itératif
    for (var i = 0; i < markerData.length; i++) {
      let id = markerData[i]['id']

      //Calculez la latitude et la longitude de chaque point
      markerLatLng = new google.maps.LatLng({
        lat: markerData[i]['latitude'],
        lng: markerData[i]['longitude']
      });

      //Créez des marqueurs pour chaque point
      marker[i] = new google.maps.Marker({
        position: markerLatLng,
        map: map
      });

      //Créez une bulle pour chaque point
      infoWindow[i] = new google.maps.InfoWindow({
        //Contenu du ballon
        content: markerData[i]['address']
      });

      //Ajouter un événement de clic au marqueur
      markerEvent(i);
    }
  }

  //Cliquez sur le marqueur pour afficher une bulle
  function markerEvent(i) {
    marker[i].addListener('click', function () {
      infoWindow[i].open(map, marker[i]);
    });
  }

Si vous souhaitez lier le contenu de la bulle, décrivez comme suit.

python


//Variez l'ID de chaque utilisateur
let id = markerData[i]['id']

infoWindow[i] = new google.maps.InfoWindow({
  // <a>Créer un lien avec une balise
  content: `<a href='/users/${ id }'>${ markerData[i]['address'] }</a>`
});

Mise en garde

Si vous ne désactivez pas turbolinks, la carte ne changera pas, alors assurez-vous de la désactiver.

Comment désactiver les turbolinks

Recommended Posts

[Rails] Comment afficher plusieurs marqueurs sur Google Map et afficher une bulle lorsque vous cliquez dessus
Afficher plusieurs marqueurs sur Google Map
[Rails] google maps api Comment publier et afficher des informations cartographiques
[Rails 6 / API Google Map] Publiez une adresse et définissez plusieurs marqueurs sur la carte
[Rails] Comment calculer la latitude et la longitude avec une grande précision à l'aide de l'API Geocoding et l'afficher sur Google Map
[Ruby on Rails] Google map plusieurs broches, bulles, liens
Comment afficher la carte à l'aide de l'API Google Map (Android)
Afficher l'adresse saisie à l'aide de Rails gem'geocoder 'sur Google Map
Quand j'ai essayé de créer un environnement Rails sur WSL2 (Ubuntu 20.04LTS), j'ai trébuché et suis tombé.
Comment afficher des formules en latex lors de l'utilisation de Sympy (> = 1.4) dans Google Colaboratory
Comment afficher la résolution PDF et des informations détaillées sur Linux (pdfinfo)
Essayez d'afficher la carte google et la carte géographique avec python
[Ruby on Rails] Affichage et épinglage de GoolgeMAP à l'aide de l'API Google
[Rails 6] Intégrez Google Map dans l'application et ajoutez un marqueur à l'adresse saisie. [Confirmation des détails]
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
Comment diviser et enregistrer un DataFrame
Comment utiliser l'Assistant Google sur Windows 10
Comment afficher des pictogrammes sur Manjaro Linux
Comment tester sur une page authentifiée par Django
Comment créer un plan de site Pelican
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
Comment rendre plusieurs noyaux sélectionnables sur Jupyter
Afficher l'API Google Maps avec Rails et affichage des broches
Comment se souvenir quand on oublie un mot
Comment vivre une vie décente avec Windows 2017
Comment afficher des vidéos en ligne dans Google Colab
Comment créer un bel environnement Python sur un nouveau Mac et installer Jupter Notebook
Comment mettre Pyenv sur Amazon Linux et Ubuntu pour créer un environnement Python 3.6.0
Visualisez et comprenez le maillage régional du Japon sur une carte
Comment déployer une application Django dans le cloud Alibaba
Comment installer Linux sur un PC UEFI 32 bits
Comment installer Git GUI et Gitk sur CentOS
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Visualisez les buts et les buts de la Ligue B sur une carte de chaleur
Comment afficher plusieurs images d'une galaxie en tuiles
Comment créer un environnement Django (python) sur Docker
Comment afficher DataFrame sous forme de tableau dans Markdown
[Python] Comment créer une matrice de corrélation et une carte thermique
Comment utiliser Django avec Google App Engine / Python
Comment exécuter Django sur IIS sur un serveur Windows
Comment créer un environnement Python sur Amazon Linux 2
Bon code et mauvais code à comparer avec la mini-carte
Comment configurer WSL2 sur Windows 10 et créer un environnement d'étude pour les commandes Linux
Comment obtenir les données météorologiques actuelles et les afficher sur l'interface graphique tout en la mettant à jour automatiquement
Comment se connecter à Cloud SQL PostgreSQL sur Google Cloud Platform à partir d'un environnement local avec Java
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Comment afficher une ligne spécifiée d'un fichier ou d'un résultat de commande sous Linux (sed, awk)