Google Maps APIの料金を下げるために行ったこと

Pocket

ある日クレジットカードの明細を見ると、Google Cloudから請求がきてる。しかも、7,000円も!でも、心当たりないなーと思いながらGoogle Paymentsのメールを開いて、リンクに飛ぶとGoogle Maps APIの使用料ということが判明しました。

運営しているWEBサイトで先月、GoogleMapの使用方法を変更しました。
1つのページに複数のマップをiframeで表示していたのですが、住所情報から1つのMapにピンを立てる方法にしました。Mapが2,3個だったらいいのですが、10個とかになるとページが重くて重くてとても見れたものじゃなかったので、いい改修したな~って思っていたんですが、請求を見てえっ!?てなりました。まだまだ、稼げるほどのアクセス数がないのにこの請求が毎月くるのは辛い・・・なんとかしないとということでいくつか対応を行いました。

ピンが1つだけのページはiframeで表示

Google Mapのページで検索して、共有→地図を埋め込むでiframeのURLを取得してWEBサイトにGoogle Mapを表示する方法はAPIを使っていないので費用がかかりません。
Google Mapに複数のピンを立てたいからAPIを使ったのであって、1つピンだけでいいページはiframeで埋め込みへと変更しました。

この対応をしてAPIのリクエスト数は2/3ぐらいに減るかなと思ったのですが、翌日コンソールを見てガックシ。全然減っとらん。。。

ならば、次の策を考えねばと思ったのですが、ふと気になってGoogle Maps APIのコンソールとGoogle Anlyticsのデータを見比べると、PV数 <Geocoding APIのリクエスト数ってなってることに気づきました。

あまり仕様も調べず、コピペでGoogle Maps APIを埋め込んだことが裏目に出ました。仕様書を読む気にはならなかったのであくまで想像ですが、住所からGoogle Mapにピンを立てる場合、住所情報から緯度経度を取得→マップにピンを立てるという処理になっているのかもしれません。そのため、ピンを立てる住所分の回数APIを実行している可能性があります。

緯度・経度情報からGoogle Mapを表示

住所情報はDBに入っているので、まずはlatとlngのカラムを追加します。

そして、住所情報を全件取り出して、ジオコーディングと地図化のサイトを開いて住所を張り付けて住所変換をクリックして少し待つと、緯度経度を含んだデータが取得結果の欄に表示されます。住所データが不完全だったりすると取得できない場合があります。約200件のデータで9件取得できませんでした。取得できなかったデータはGoogle Mapから緯度経度を取得しました。

変換したデータをスプレッドシートに張り付けて、update文を作って、全件更新すれば緯度経度が入ったDBになりました。あとはWEB側でAPIを修正すれば完了です。

Google Maps APIの無料枠を超えて焦って対応した、料金を下げる方法です。
1. iframeでの埋め込みが使えるなら使う
2. Geocoding APIを使用せず、経度緯度からMapを表示する

追記
緯度経度情報からピンを指すように改修を行ってから、APIのリクエスト回数を確認したら、Geocoding APIは0で、他のAPIのリクエスト回数は変化なしでした。
住所情報からピンを立てている人は緯度経度からピンを立てるに変更したほうがいいですね。