Rails5에서 geocoder를 사용하여 위도 경도 얻기 (Google API 설정)

Rails5에서지도 앱을 만들기 위해 gmap4rails, geocoder를 실험했습니다. 위도 경도를 얻을 수 없어 고생했지만, API의 설정을 재검토하는 것으로 성공했기 때문에 기록에 남깁니다.

Rails GoogleMap보기 gem gmaps4rails 및 geocoder를 참조하여지도 앱을 만듭니다.
htps : // 코 m / 유키 _ chro / ms / 아 2638c33 예 dc3c036d01

작성한 앱으로 지도를 표시할 수 있었지만 위도 경도를 얻을 수 없는 경우가 있었다. 「사이타마현」이라면 취득할 수 있지만 「사이타마현 사이타마시」로 하면 취득할 수 없다...



아무래도 geocoder 단체에서는, 세세한 위도 경도를 취득할 수 없는 것 같다. Google 지오코딩을 사용하면 모든 위치의 위도 경도를 구할 수 있습니다.

geocoder 구성 파일 만들기
$ bundle exec rails generate geocoder:config

config/initializers/geocoder.rb
Geocoder.configure(

  # street address geocoding service (default :nominatim)
  lookup: :google,

  # IP address geocoding service (default :ipinfo_io)
  # ip_lookup: :maxmind,

  # to use an API key:
  api_key: "AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",

  # geocoding service request timeout, in seconds (default 3):
  timeout: 5,

  # set default units to kilometers:
  units: :km,

)

콘솔에서 동작 확인
$ bundle exec rails console
![snap_1214.png](https://qiita-image-store.s3.amazonaws.com/0/320718/236a5d2c-c062-6fa6-a04b-d31ed4e963be.png)

irb(main):002:0> Geocoder.search("東京タワー")
Google API error: request denied (API keys with referer restrictions cannot be used with this API.).
=> []
irb(main):003:0> Geocoder.coordinates('埼玉県さいたま市')
Google API error: request denied (API keys with referer restrictions cannot be used with this API.).
=> nil


오류 메시지
Google API error: request denied (API keys with referer restrictions cannot be used with this API.).
힌트에 API 설정을 검토하여 위도 경도를 얻을 수있게되었습니다. 원인은 (gmaps4rails의 API 설정과 같게) 「HTTP 리퍼러」로 제한을 걸고 있었기 때문이었다. 애플리케이션 제한을 '없음'으로 변경합니다.


irb(main):005:0> Geocoder.search("東京タワー")
=> [#<Geocoder::Result::Google:0x00007faf8616c7f8 @data={"address_components"=>[{"long_name"=>"8", "short_name"=>"8", "types"=>["premise"]}, {"long_name"=>"2", "short

_name"=>"2", "types"=>["political", "sublocality", "sublocality_level_4"]}, {"long_name"=>"4 Chome", "short_name"=>"4 Chome", "types"=>["political", "sublocality", "s
ublocality_level_3"]}, {"long_name"=>"Shibakoen", "short_name"=>"Shibakoen", "types"=>["political", "sublocality", "sublocality_level_2"]}, {"long_name"=>"Minato", "s
hort_name"=>"Minato", "types"=>["locality", "political"]}, {"long_name"=>"Tokyo", "short_name"=>"Tokyo", "types"=>["administrative_area_level_1", "political"]}, {"lon
g_name"=>"Japan", "short_name"=>"JP", "types"=>["country", "political"]}, {"long_name"=>"105-0011", "short_name"=>"105-0011", "types"=>["postal_code"]}], "formatted_a
ddress"=>"4 Chome-2-8 Shibakoen, Minato, Tokyo 105-0011, Japan", "geometry"=>{"location"=>{"lat"=>35.6585805, "lng"=>139.7454329}, "location_type"=>"ROOFTOP", "viewpo
rt"=>{"northeast"=>{"lat"=>35.6599294802915, "lng"=>139.7467818802915}, "southwest"=>{"lat"=>35.6572315197085, "lng"=>139.7440839197085}}}, "place_id"=>"ChIJCewJkL2LG
GAR3Qmk0vCTGkg", "plus_code"=>{"compound_code"=>"MP5W+C5 Tokyo, Japan", "global_code"=>"8Q7XMP5W+C5"}, "types"=>["establishment", "point_of_interest", "premise"]}, @c
ache_hit=nil>]
irb(main):006:0> Geocoder.coordinates('埼玉県さいたま市')
=> [35.8617292, 139.6454822]

(주의)
gmaps4rails 의 API KEY 는 「HTTP 리퍼러」로 제한을 할 필요가 있는 점에 주의가 필요합니다.

좋은 웹페이지 즐겨찾기