地図のバージョンの問題
数日前から自分のサンプルプロジェクトtest_mapの地図が正常に動作しないことに気付いた...。ブログにアップする時は、確実に確認したはずなのに...。なぜだろう?
どうやら、Google Maps APIのバージョンが更新されたようで、最新バージョンでは自分の環境では正常に動作しないようだ。
上記ページによると、vパラメーターの指定方法によって利用するAPIバージョンが変わってくるようだ。
- 現行バージョン、Current (v=2): 2.132d
- 最新バージョン、Latest (v=2.x): 2.133d
- 安定バージョン、Stable (v=2.s): 2.73
今までは v=2.x としていた。最新バージョンをやめて、v=2とすると正常の動作した。しかし、ym4r_gmから利用していると、そんなことすっかり忘れてしまうし、バージョンを指定するオプションも存在しないようだ...。(以下の部分)
<%= GMap.header %>
- 上記コードは以下のように展開される
<script src="http://maps.google.com/maps?file=api&v=2.x&key=ABQIAAAAubV6ipVCO8c_dPnrcPjEihTJQa0g3IQ9GZqIMmInSLzwtGDKaBTJSx_Ot3L7hrJG-oPV8xD2tPbXsA&hl=" type="text/javascript"></script> <script src="/javascripts/ym4r-gm.js" type="text/javascript"></script> <style type="text/css"> v:* { behavior:url(#default#VML);} </style>
ym4r_gmの修正
- ym4r_gmを修正して<%= GMap.header(:version => '2') %>と指定できるようにしたい。以下のようにやってみた。
- 修正箇所はオレンジの部分(v=2.x → v=#{options[:version])
# ---------- vendor/plugins/ym4r_gm/lib/gm_plugin/map.rb ---------- module Ym4r module GmPlugin #Representing the Google Maps API class GMap2. class GMap ...(中略)... def self.header(options = {}) options[:with_vml] = true unless options.has_key?(:with_vml) options[:hl] ||= '' options[:local_search] = false unless options.has_key?(:local_search) api_key = ApiKey.get(options) a = "<script src=\"http://maps.google.com/maps?file=api&v=#{options[:version]}&key=#{api_key}&hl=#{options[:hl]}\" type=\"text/javascript\"></script>\n" ...(中略)... end ...(中略)...
これで今まで通り、正常に動作するようになった!