【googlemap】 railsで「すみだプレミアム商品券」の地図をgooglemapに表示してみた。


以前よりgooglemapにピン表示くらいは経験しておこうかなと思いつつも特に必要性がなくてやっていなかった。

だがしかし、「すみだプレミアム商品券」なるものを手にしたはいいものの、本家サイトの店舗一覧は住所が書いてあるでけで地図がなく使いづらかったのでgooglemapに表示させてみた。

作成した地図サイトはこちら↓
http://app.road.jp.net/sky/map/index

使用したgemはこちら。
“gmaps4rails”
“geocoder”

gmaps4railsを使用すると↓こんな感じでDBから取得した値をgooglemap用のデータに変換できます。
# vi app/controllers/map_controller.rb

class MapController < ApplicationController
  def index
    @users = User.all
    @hash = Gmaps4rails.build_markers(@users) do |user, marker|
      marker.lat user.latitude
      marker.lng user.longitude
      marker.infowindow user.description
      marker.json({title: user.title})
    end
  end
end

そしてとても助かったのがこちら。
geocoderは住所から緯度経度を取得してくれます。
そのため↓こんな感じで設定するとaddressを登録したさいに緯度/経度を取得して一緒に登録してくれます。

# vi app/models/user.rb

class User < ActiveRecord::Base
  geocoded_by :address
  after_validation :geocode
end

注意点が2つあります
1.緯度経度取得のAPIはアクセス制限がかかっているため一気に取得しにいくとエラーになってしまいます。
  そのため登録処理にてsleep等を使用して間隔をあけて登録する必要がありました。
2.住所に建物名まで含まれているとおかしな緯度経度を取得する事があります。

# vi db/seeds.rb

CSV.foreach('db/sumida_premium_a.csv') do |row|                                                                                                                                                                                                                                              
  User.create(:title => row[1], :description => row[1], :address => row[3], :category=>row[4], :shopping_street=>row[0], :aorb=>"A券のみ使える", :tel=>row[2])                                                                                                                               
  sleep(1)                                                                                                                                                                                                                                                                                   
end 

参考にしたサイトはこちら
http://qiita.com/jacoyutorius/items/a107ff6c93529b6b393e

やはり住所の一覧より地図で見れたほうが見やすいですね。
それにしても「すみだプレミアム商品券」の本家サイトが分けた種別が使い物にならない。
「飲食」って種別がありながら「中華」とか「お好み焼き」とかって種別がある。
カテゴリ分けたいなら「飲食」で十分だろう。
「印章・印刷」「印章店」「印章業」とか分けてるのも意味がわからん。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です