Afficher l'API Google Maps avec Rails et affichage des broches

introduction

J'ai utilisé l'API Google Maps dans mon portefeuille dans le passé, mais j'ai oublié le flux, alors je m'en souviens.

environnement

rails 5.2.3 ruby 2.6.3

Que faire cette fois

-Obtenir la longitude et la latitude à partir des informations de position actuelle et afficher le marqueur -Changez les informations de liste acquises au format json et placez-les sur la carte comme marqueur. ・ Affichage de la carte

Créez un contrôleur à afficher, cette fois le nom de l'action est la recherche.

spaces_controller.rb


  def search
    @spaces = Space.all
  end

Après avoir créé un modèle et saisi une adresse, la latitude et la longitude sont automatiquement acquises.

space.rb


class Space < ApplicationRecord
  geocoded_by :address
  after_validation :geocode, if: :address_changed?
end

schema.rb


create_table "spaces", force: :cascade do |t|
    t.string "address"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.float "latitude"
    t.float "longitude"
end

Script pour afficher MAP

javascript


  function initMap() 
    //Où afficher la carte
    var target = document.getElementById('gmap');
    //Affichage de la carte
    var map = new google.maps.Map(document.getElementById('gmap'), {
      center: {lat: 35.681167, lng: 139.767052},//Réglage du point central
      zoom: 8//Paramètre d'agrandissement de la carte
    });

    //Créer un marqueur de position
    //Si vous ne pouvez pas obtenir votre position actuelle
    if(!navigator.geolocation){
      infoWindow.setPosition(map.getCenter());
      infoWindow.setContent('Il ne prend pas en charge la géolocalisation.');
      infoWindow.open(map);
    }

    navigator.geolocation.getCurrentPosition(function(position) {
      //Obtenez la longitude et la latitude de votre position actuelle
      var pos = { lat: position.coords.latitude, lng: position.coords.longitude };
      var mark = new google.maps.Marker({
        //Paramètres d'animation déroulante
        animation: google.maps.Animation.DROP,
        position: pos,
        map: map,
        //Créez une icône pour la broche de l'emplacement actuel. Cette fois, la conception par défaut est utilisée pour plusieurs marqueurs, alors changez-la.
        icon: {
          fillColor: "rgb(48, 255, 176)",
          fillOpacity: 1.0,
          path: google.maps.SymbolPath.BACKWARD_CLOSED_ARROW,
          scale: 4,
          strokeColor: "green",
          strokeWeight: 1.0
        }
      });
    }, function() {
      infoWindow.setPosition(map.getCenter());
      infoWindow.setContent('Error:La géolocalisation n'est pas valide.');
      infoWindow.open(map);
    });
    //Marqueurs multiples
    //Liste des données au format json
    var spaces = #{raw @spaces.to_json};
    var marker = [];
    var info;
    for(var i = 0; i < spaces.length; ++i) {
      //Créez des marqueurs en extrayant les informations de longitude et de latitude une par une de la liste
      spot = new google.maps.LatLng({lat: spaces[i].latitude, lng: spaces[i].longitude});
      marker[i] = new google.maps.Marker({
        position: spot,
        map: map,
      	animation: google.maps.Animation.DROP
      });
      markerEvent(i);
    }
    //Événement de survol de plusieurs marqueurs
    function markerEvent(i) {
      marker[i].addListener('mouseover', function() {
        var target = $('#' + (i + 1));
        $(".highlight").removeClass("highlight");
        target.addClass("highlight");
        var position = target.offset().top - 280;
        $('body,html').animate({scrollTop:position}, 400, 'swing');
      });
    }
    //-------------------------------------------------------------
  }


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

Cette fois, le moteur de modèle est réglé sur slim et il est écrit directement dedans, alors soyez prudent car le stockage des variables de données est différent de l'habituel. Il est très facile d'obtenir la longitude et la latitude du nom à l'aide du géocodeur de gem, mais cette fois j'utilise Google Geocoding car il est inexact et n'affiche même pas l'unité d'adresse.

Recommended Posts

Afficher l'API Google Maps avec Rails et affichage des broches
[Rails] google maps api Comment publier et afficher des informations cartographiques
Enregistrement facile des livres avec l'API et Rails de Google Livres
Présentation de l'API Google Map avec rails
[Google Maps API] La carte n'est pas affichée et devient vide [Rails]
[Ruby on Rails] Affichage et épinglage de GoolgeMAP à l'aide de l'API Google
[Rails] Description de l'API Google Maps lorsque la latitude et la longitude ne peuvent pas être enregistrées
[Rails] Affichage de Google Maps à l'aide de l'API Google Maps et recherche d'itinéraires entre plusieurs points
Créez une carte thermique de tweet avec l'API Google Maps
[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
Les débutants de l'API Google Maps et de l'API Twitter ont créé "Tweet Map"
Mettez en place le géocodage inversé en japonais avec l'API Python Google Maps
[Rails] Comment afficher Google Map
Jeton d'accès à l'API Google et jeton d'actualisation
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
Essayez d'afficher la carte google et la carte géographique avec python
[Affichage de la carte] Affichez une carte à 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!
Calculer et afficher le poids standard avec python
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Expliquer JavaScript de l'API de géocodage de Google Maps
Exécuter la traduction Google et la traduction DeepL avec l'interface graphique
Utilisez TPU et Keras avec Google Colaboratory
Crypter avec Ruby (Rails) et décrypter avec Python
Obtenez des vacances avec l'API Google Agenda
Modifier la diapositive (Powerpo pour Google) avec Python (cas RPA à faible coût avec API Google et Python)
[Rails 6 / API Google Map] Publiez une adresse et définissez plusieurs marqueurs sur la carte
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Comment afficher la carte à l'aide de l'API Google Map (Android)
J'ai essayé "License OCR" avec l'API Google Vision
Essayez d'exécuter Google Chrome avec Python et Selenium
Afficher de manière interactive des courbes algébriques en Python, Jupyter
Transcription vocale automatique avec l'API Google Cloud Speech
Enveloppez et affichez bien les phrases japonaises avec pyglet
J'ai essayé "Receipt OCR" avec l'API Google Vision
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Intégration de la banque de données Google App Engine et de l'API de recherche
Formatez et affichez le XML acquis par l'API OpenWeatherMap.
[Rails] Comment afficher plusieurs marqueurs sur Google Map et afficher une bulle lorsque vous cliquez dessus
Obtenez des étiquettes de données en les associant à l'API Google Cloud Vision lors de la prévisualisation d'images avec Rails
[Pour les débutants] Comment afficher des cartes et des champs de recherche à l'aide de l'API Javascript GoogleMap
Afficher les colonnes et les variables du numéro de série avec le modèle de bouteille
Afficher des images intégrées de mp3 et flac avec mutagène
Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau)
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Obtenez des commentaires et des abonnés avec l'API de données YouTube
Afficher et prendre des images de caméra Web avec Python Kivy [GUI]
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Transférer vers un Drive partagé avec l'API Google Drive V3
YOLP: extraire la latitude et la longitude avec l'API Yahoo! Geocoder.
Installez tweepy avec pip et utilisez-le pour l'API 1.1