(rails) GoogleMap API 도입으로 집계

소개



rails로 GoogleMap의 API를 도입함에 있어 참고문헌을 배견하면서도 집착한 곳을 비망록으로서 남깁니다. 모든 것을 망라하고 있는 것은 아니지만 똑같이 고민하고 있는 사람의 힘이 될 수 있다고 생각합니다.

구현하고 싶은 것



이벤트를 게시할 때 입력한 주소를 자동으로 GoogleMap에 반영

준비하는 것


  • Google Cloud Platform으로 이동하여 API 키 가져 오기
  • gem 인 geocoder 설치

  • ※ 참고로 한 기사
    【Rails6/Google Map API】초학자용! Ruby on Rails에서 쉽게 Google Map API 도입

    환경


  • Rails 6.0.3.4
  • geocoder 1.6.4

  • 집어 넣은 곳



    ① 코드를 작성했지만 지도가 표시되지 않음



    ※기술이나 도입 방법에 관한 자세한 기사는 하기 참고
    Rails 등록한 주소를 Google Map에 표시
    var test ={lat: <%= @event.latitude %>, lng: <%= @event.longitude %> };
    

    여기의 "lat:"가 위도, "lng:"가 경도가 되고 geocoder가 테이블에 있는 그것을 가져와 지도에 위치를 표시합니다.

    원인: 위도, 경도가 올바르게 취득되지 않았다.

    확인해야 할 사항:
    1. addoress 테이블에 "latitude(위도)", "longitude(경도)"컬럼이 있는지
    2. 열에 저장하기위한 모델에 대한 설명이 있습니까?
    3. API 키가 즉시 반영되지 않을 수 있기 때문에 그 경우는 서버 재시작이나 시간을 조금 둔다

    상기 링크의 참고 기사에 모두 있기 때문에 자세한 것은 그쪽을.

    ② 위도와 경도를 테이블에 저장할 수 없다



    위도와 경도를 저장하려면 테이블에 각 열을 설정해야 합니다.
    address 컬럼에 보존한 주소를 바탕으로 geocoder가 위도, 경도를 취득해 보존해 주는 구조입니다만 address가 보존되어도 latitude, longitude가 「Null」인 채였습니다.

    원인:
    addoress가 있는 테이블의 migration 파일을 rollback하고 덧붙이는 것이 아니라 「추가」로 latitude, longitude 컬럼을 더한다.

    이쪽을 크게 착각했습니다. addoress가 있는 event 테이블의 migration 파일을 rollback하고 열을 덧붙여 rails db:migrate에서는 안 됩니다.
    % rails generate migration AddColumnEvents
    

    반드시 추가 migration 파일을 만들어 그 곳에 열을 추가해야합니다.

    xxxxxxxxxxx5_add_column_events.rb
    class AddColumnEvents < ActiveRecord::Migration[6.0]
      def change
        add_column :events, :latitude, :float
        add_column :events, :longitude, :float
      end
    end
    

    이러한 설명으로 컬럼을 추가 가능합니다. 열의 유형은 float입니다.
    % rails db:migrate
    

    추가할 수 있으면 migrate를 잊지 말고.



    이러한 형태로 위도와 경도의 값을 저장할 수 있었습니다.

    ③ 상세한 위치 정보를 취득할 수 없다



    예) 가나가와현 요코하마시 나카구 야마시타초
    → 거친 주소는 취득할 수 반영하지만 지도의 의미가 없다

    예) 가나가와현 요코하마시 나카구 야마시타초 ○○번지
    →핀 포인트의 위치 정보를 확실히 취득하고 싶다

    원인:
    보다 정확한 위치 정보를 얻기 위해 geocoder config 설정을 변경하십시오.
    % bin/rails g geocoder:config
    

    명령은 config 파일을 생성합니다.
    (config/initializers/geocoder.rb)

    config/initializers/geocoder.rb
    Geocoder.configure(
      # Geocoding options
      timeout: 5,                 # geocoding service timeout (secs)
      lookup: :google,         # name of geocoding service (symbol)
      # ip_lookup: :ipinfo_io,      # name of IP address geocoding service (symbol)
      # language: :en,              # ISO-639 language code
      use_https: true,           # use HTTPS for lookup requests? (if supported)
      # http_proxy: nil,            # HTTP proxy server (user:pass@host:port)
      # https_proxy: nil,           # HTTPS proxy server (user:pass@host:port)
      api_key: YOUR_API_KEY,               # API key for geocoding service
      # cache: nil,                 # cache object (must respond to #[], #[]=, and #del)
      # cache_prefix: 'geocoder:',  # prefix (string) to use for all cache keys
    
      # Exceptions that should not be rescued by default
      # (if you want to implement custom error handling);
      # supports SocketError and Timeout::Error
      # always_raise: [],
    
      # Calculation options
      units: :km,                 # :km for kilometers or :mi for miles
      # distances: :linear          # :spherical or :linear
    )
    
    

    위치 정보를 검색하는 설정인 'lookup:'을 'google'로 설정하고 'api_key:'에 검색된 API 키를 입력합니다(여기에서는 YOUR_API_KEY로 바꾸고 있습니다).

    안전한 해결입니다.

    참고 기사 정리


  • 【Rails6/Google Map API】초학자용! Ruby on Rails에서 쉽게 Google Map API 도입
  • Rails 등록된 주소를 Google Map에 표시
  • geocoder에 위도와 경도가 등록되지 않는 문제
  • 좋은 웹페이지 즐겨찾기