Zeigen Sie die mit Rails gem'geocoder 'eingegebene Adresse in Google Map an

Wenn die Adresse "Chiyoda-ku, Tokio" lautet, werden der Breiten- und Längengrad erfasst und auf Google Map angezeigt. Wenn Sie jedoch die Adresse "2-4-1 Marunouchi, Chiyoda-ku, Tokio" angeben, erhalten Sie den Breiten- und Längengrad. Ich konnte es nicht tun und die Karte wurde nicht angezeigt, aber ich konnte es auflösen, also habe ich es gepostet.

Vorbereitung

schema.rb


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

Dateien, die angezeigt werden

・ Gemfile ・ Tour.rb ・ .Gitignore ・ .Env ・ Geocorder.rb ・ Show.html.erb

Gemfile Geocorder Bundle Install

gem 'geocoder'

tour.rb Fügen Sie Folgendes hinzu

tour.rb


geocoded_by :address
after_validation :geocode, if: :address_changed?

Speichern Sie Breiten- und Längengrade von der von geocoded_by eingegebenen Adresse. after_validation: Geocode speichert den geänderten Breiten- und Längengrad, auch wenn die Adresse später geändert wird.

.gitignore ・ .env

Fügen Sie .env zu .gitignore hinzu. Dies geht nicht auf Github.

.gitignore


/.env

Fügen Sie Folgendes zu .env hinzu. Verwenden Sie den erhaltenen API-Schlüssel für YOUR_API_KEY.

.env


GOOGLEMAP=YOUR_API_KEY

geocorder.rb Erstellen Sie config / initialize / geocorder.rb mit rails g geocoder: config und fügen Sie Folgendes hinzu. Die erfasste API wird im Teil api_key eingegeben.

geocorder.rb


Geocoder.configure(
  lookup: :google,
  always_raise: [
    Geocoder::OverQueryLimitError,
    Geocoder::RequestDenied,
    Geocoder::InvalidRequest,
    Geocoder::InvalidApiKey
  ],
  api_key:  ENV['GOOGLEMAP'] ,
  use_https: true
)

show.html.erb Fügen Sie schließlich die Google Map in show.html.erb ein

show.html.erb


<div id="map"></div>
<style>
     #map {
     height: 500px;
     width: 70%;
    }
</style>
<script>
  function initMap() {
	var uluru = {lat: <%= tour.latitude %>, lng: <%= tour.longitude %>};
	var map = new google.maps.Map(document.getElementById('map'), {
	zoom: 16,
	enter: uluru
	});
	var marker = new google.maps.Marker({
	  position: uluru,
	  map: map
	});
       }
	</script>
	<script src="https://maps.googleapis.com/maps/api/js?key=<%= ENV['GOOGLEMAP'] %>&callback=initMap"async defer></script>

Danach können Sie die Höhe und Breite entsprechend Ihrer Größeneinstellung anpassen.

Recommended Posts

Zeigen Sie die mit Rails gem'geocoder 'eingegebene Adresse in Google Map an
[Rails 6 / Google Map API] Veröffentlichen Sie eine Adresse und setzen Sie mehrere Markierungen auf der Karte
[Rails] So zeigen Sie Google Map an
Zeigen Sie mehrere Markierungen auf Google Map an
Lassen Sie uns die Karte mit der Grundkarte anzeigen
[Ruby on Rails] Anzeigen und Fixieren von GoolgeMAP mithilfe der Google-API
[Kartenanzeige] Zeigen Sie eine Karte anhand der vom Benutzer registrierten Adresse mit der JavaScript-API und der Geokodierungs-API von Google Maps an!
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
So zeigen Sie eine Karte mit der Google Map API (Android) an
[Rails] So berechnen Sie Breiten- und Längengrade mit hoher Genauigkeit mithilfe der Geocoding-API und zeigen sie auf Google Map an
Anzeigen von Wettervorhersagen auf M5Stack + Google Cloud Platform
[Schienen] So zeigen Sie mehrere Markierungen auf Google Map an und zeigen beim Klicken eine Sprechblase an
Zeigen Sie den absoluten Pfad im Finder an
Hinweise zur Verwendung von matplotlib auf dem Server
Einführung der Google Map API mit Schienen
[Rails] google maps api So posten und anzeigen Sie einschließlich Karteninformationen
Verwenden Sie den Metabolic Disassembler in Google Colaboratory
Bildsegment mit Oxford_iiit_pet in Google Colab
Überprüfen Sie die Koordinaten auf Google Map mit Geocoder
Versuchen Sie, die Umweltkonzentration organischer Fluorverbindungen mit offenen Daten auf einer Karte darzustellen
Ich habe versucht, den Grad der Koronavirusinfektion auf der Seekarten-Wärmekarte anzuzeigen