地図のバージョンの問題

数日前から自分のサンプルプロジェクト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&amp;v=2.x&amp;key=ABQIAAAAubV6ipVCO8c_dPnrcPjEihTJQa0g3IQ9GZqIMmInSLzwtGDKaBTJSx_Ot3L7hrJG-oPV8xD2tPbXsA&amp;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
...(中略)...


これで今まで通り、正常に動作するようになった!