[Rails] So berechnen Sie Breiten- und Längengrade mit hoher Genauigkeit mithilfe der Geocoding-API und zeigen sie auf Google Map an

Ziel

** Zeigen Sie die vom Benutzer registrierte Adresse in der Mitte der Karte an und setzen Sie eine Markierung. ** **. ezgif.com-video-to-gif (1).gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke Einführung

Da die Genauigkeit nur bei "gem'geocoder" gering ist (es gibt Bereiche, in denen die Adresse nicht angegeben werden kann), Wir werden es so implementieren, dass der Breiten- und Längengrad von der Adresse mit hoher Genauigkeit unter Verwendung der "Geocoding API" angegeben werden kann.

Aktivieren Sie die Geokodierungs-API

1. Greifen Sie auf den unten stehenden Link zu

Google Cloud Platform

2. Klicken Sie auf "Zur API-Übersicht wechseln".

スクリーンショット 2020-06-03 10.01.36.png

3. Klicken Sie auf "Bibliothek"

スクリーンショット 2020-06-03 10.01.41.png

4. Geben Sie "geo" in das Suchformular ein und klicken Sie auf "Geocoding API".

スクリーンショット 2020-06-03 10.02.08.png

5. Klicken Sie auf "Aktivieren".

スクリーンショット 2020-06-03 10.02.13.png

6. Klicken Sie auf das Teil, das vom roten Rahmen umgeben ist

スクリーンショット 2020-06-03 10.02.31.png

7. Ein Pulldown-Menü wird angezeigt. Klicken Sie auf "Alle Google Maps-APIs".

スクリーンショット 2020-06-03 10.04.02.png

8. Klicken Sie auf "Anmeldeinformationen".

スクリーンショット 2020-06-03 10.12.39.png

9. Klicken Sie auf "API-Schlüsselname".

スクリーンショット 2020-06-03 10.12.46.png

10. Legen Sie die Authentifizierungsinformationen fest

** ① API-Einschränkungen ** Wählen Sie "Schlüsseleinschränkungen" und "Geokodierungs-API" aus dem Pulldown-Menü.

** ② Stellen Sie sicher, dass Maps JavaScript API und Geocoding API ausgewählt sind, und klicken Sie auf Save **

スクリーンショット 2020-06-03 10.13.14.png

11. Überprüfen Sie, ob zwei APIs vorhanden sind

Der API-Schlüssel wird durch Hinzufügen der API nicht geändert. Dies ist also das Ende.

スクリーンショット 2020-06-03 10.13.25.png

Implementierung

1. Stellen Sie Gem vor

Gemfile


gem 'gon'
gem 'geocoder'

gem 'gon' ➡︎ Stellen Sie die im Controller definierten Instanzvariablen im JavaScript der Ansicht zur Verfügung.

gem 'geocoder' ➡︎ Berechnen Sie Längen- und Breitengrad aus der Adresse.

Terminal


$ bundle

2. Erstellen und bearbeiten Sie die Konfigurationsdatei "Geocorder"

Terminal


$ touch config/initializers/geocoder.rb

geocoder.rb


#Nachtrag
Geocoder.configure(
  lookup: :google,
  api_key: ENV['GOOGLE_MAP_API']
)

Jetzt können Sie die "Geocoding API" verwenden und den Breiten- und Längengrad mit hoher Genauigkeit berechnen.

3. Spalte hinzufügen

Terminal


$ rails g migration AddColumnsToUsers address:string latitude:float longitude:float

add_columns_to_users.rb


class AddColumnsToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :address, :string
    add_column :users, :latitude, :float
    add_column :users, :longitude, :float
  end
end

Terminal


$ rails db:migrate

4. Bearbeiten Sie das Modell

user.rb


  #Nachtrag
  geocoded_by :address
  after_validation :geocode

geocoded_by :address ➡︎ Berechnen Sie Breiten- und Längengrade anhand der Adressspalte.

after_validation :geocode ➡︎ Ändern Sie den Breiten- und Längengrad, wenn Sie die Adresse ändern.

5. Bearbeiten Sie den Controller

** ① Bearbeiten Sie application_controller.rb **

Fügen Sie dem starken Parameter "Adresse" hinzu.

application_controller.rb


def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:email, :name, :address])
end

** ② Bearbeiten Sie users_controller.rb **

users_controller.rb


def show
  @user = User.find(params[:id])
  gon.user = @user #Nachtrag
end

6. Ansicht bearbeiten

** ① Bearbeiten Sie application.html.slim **

Laden Sie gon. Bitte beachten Sie, dass es vor CSS und JavaScript geladen wird.

slim:application.html.slim


doctype html
html
  head
    title
      | Bookers2
    = csrf_meta_tags
    = csp_meta_tag
    = include_gon #Nachtrag
    = stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload'
    = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'

** ② Adresseingabeformular zum Registrierungsbildschirm für neue Mitglieder hinzufügen **

slim:resistrations/new.html.slim


= f.label :address, 'Adresse'
br
= f.text_field :address, class: 'form-control'
br

** ③ Karte bearbeiten **

slim:users/show.html.erb


#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;

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

    map = new google.maps.Map(document.getElementById('map'), {
      //Rufen Sie Längen- und Breitengrade von Variablen auf, die in der Steuerung definiert sind, und zeigen Sie sie in der Mitte der Karte an
      center: {
        lat: gon.user.latitude,
        lng: gon.user.longitude
      },
      zoom: 12,
    });

    marker = new google.maps.Marker({
      //Rufen Sie Längen- und Breitengrade von Variablen auf, die in der Steuerung definiert sind, und setzen Sie Markierungen
      position: {
        lat: gon.user.latitude,
        lng: gon.user.longitude
      },
      map: map
    });
  }

Hinweis

Wenn Sie "Turbolinks" nicht deaktivieren, wird die Karte nicht umgeschaltet. Deaktivieren Sie sie daher unbedingt.

So deaktivieren Sie Turbolinks

Recommended Posts

[Rails] So berechnen Sie Breiten- und Längengrade mit hoher Genauigkeit mithilfe der Geocoding-API und zeigen sie auf Google Map an
So zeigen Sie eine Karte mit der Google Map API (Android) an
[Rails] google maps api So posten und anzeigen Sie einschließlich Karteninformationen
[Rails] So zeigen Sie Google Map an
[Schienen] So zeigen Sie mehrere Markierungen auf Google Map an und zeigen beim Klicken eine Sprechblase an
[Ruby on Rails] Anzeigen und Fixieren von GoolgeMAP mithilfe der Google-API
Zeigen Sie die Google Maps-API mit Rails und Pin-Anzeige an
Analysieren mit Google Colaboratory mithilfe der Kaggle-API
Zeigen Sie die mit Rails gem'geocoder 'eingegebene Adresse in Google Map an
Einführung der Google Map API mit Schienen
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
[Kartenanzeige] Zeigen Sie eine Karte anhand der vom Benutzer registrierten Adresse mit der JavaScript-API und der Geokodierungs-API von Google Maps an!
[Rails] Google Maps API Beschreibung, wenn Breiten- und Längengrade nicht gespeichert werden können
[Rails 6 / Google Map API] Veröffentlichen Sie eine Adresse und setzen Sie mehrere Markierungen auf der Karte
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
[Für Anfänger] Anzeigen von Karten und Suchfeldern mithilfe der GoogleMap Javascript-API
[Rails] So erhalten Sie Standortinformationen mithilfe der Geolocation-API
Einfache Buchregistrierung mit Google Books API und Rails
YOLP: Extrahieren Sie Längen- und Breitengrade mit der Yahoo! Geocoder-API.
So erhalten Sie die aktuellen Wetterdaten und zeigen sie auf der GUI an, während Sie sie automatisch aktualisieren
[Ruby on Rails] Google Map mehrere Pins, Sprechblasen, Links
[Google Colab] So unterbrechen Sie das Lernen und setzen es dann fort
[Ev3dev] So zeigen Sie ein BMP-Bild mit Python auf dem LCD an
So geben Sie die im Django-Modell enthaltenen Daten im JSON-Format zurück und ordnen sie der Broschüre zu
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So zeigen Sie Formeln in Latex an, wenn Sie sympy (> = 1.4) in Google Colaboratory verwenden
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
IME On / Off wird in Zusammenarbeit mit Python und Arduino durch LED angezeigt
So führen Sie Jupyter und Spark auf einem Mac mit minimalen Einstellungen aus
So installieren Sie Pandas auf EC2 (Umgang mit MemoryError und PermissionError)
So zeigen Sie PDF-Auflösung und detaillierte Informationen unter Linux an (pdfinfo)
Nehmen Sie ein Bild mit Pepper auf und zeigen Sie es auf Ihrem Tablet an
Google-Logo herunterladen → Text mit OCR → In HTML anzeigen
[Google Maps API] Karte wird nicht angezeigt und wird leer [Rails]
Ich habe einen Musik-Bot mit discord.py und der Google Drive-API erstellt (getestet mit Docker → bereitgestellt für Heroku).
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet