Google Map API [jQuery] [js]

2014年に制作した記事を2016/09に加筆修正

googleマップを埋め込むだけなら特に知識がなくても難しいことはないです。
ただ、いろいろカスタマイズしたい場合はGoogle Maps APIを使うこともあるので、ある程度JavaScriptの知識が必要です。


sample(単純な埋め込みと可変対応)

単純にhtmlに地図を埋め込むだけなら、googleで地図検索して、コードを貼り付けるだけで実現できます。
検索キーワードは詳細な住所でも、「◯◯駅」のようなスポット名でも良いでしょう。


html

上記の手順の通り、埋め込み自体は難しくありません。コードをhtmlにコピペするだけです。ここではレスポンシブ対応にするコツをご紹介します。

<div class="wrap_map">
    <iframe src="〜" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>
</div>

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

iframeタグはGoogle マップの共有からコピペしたコードです。srcの中身は長いので省略しました。
width/height属性がありますが、これらの値はなんでも良いです。

ここで重要なのは、コピペしたコードを親タグで囲ってしまうということです。
親タグはdivタグ以外でも良いです。適切なものを使ってください。
親タグには任意のclass名(またはid名)をつけておいてください。


css

.wrap_map {
    position: relative;
    padding: 0 0 56%;
    height: 0;
    overflow: hidden;
}
.wrap_map iframe{
    position: absolute;
    top: 0;
    left: 0;
    width: 100% !important;
    height: 100% !important;
}

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

地図を呼び出すiframeは親タグに対して幅を100%します。
高さは親タグの方のpaddingでbottomの値を変えることで対応します。横幅に対して%で指定します。


js

jsで特に何かする必要はないのですが、レスポンシブ対応にした際、ブラウザ幅が変更されると肝心のスポットが中央に表示されなくなってしまいます。
それが気になる場合は、ウィンドウ幅がリサイズされたらiframeをリロードさせるという処理をするのはいかがでしょうか。

$(function(){
    var timer = false;
    var src = $('.wrap_map iframe').attr('src'); //地図を呼び出すiframeのsrc属性の値を控えておく

    $(window).on('resize', function(){
        if (timer !== false) { //リサイズ中に何度も処理が行われるのを防ぐ
            clearTimeout(timer);
        }

        timer = setTimeout(function() {
            $('.wrap_map iframe').attr('src',''); //リサイズを検知したら、一度地図を呼び出すiframeのsrc属性を空にして
            $('.wrap_map iframe').attr('src',src); //再度、src属性に値を入れる
        }, 200);
    });
});

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

1ページに複数マップがあるなら、配列で処理してみてましょう。

$(function(){
    var timer = false;
    var src=[];
    $('.wrap_map iframe').each(function() {
        src.push($(this).attr('src'));  //地図を呼び出すiframeのsrc属性の値を配列変数に控えておく
    });

    $(window).on('resize', function(){
        if (timer !== false) { //リサイズ中に何度も処理が行われるのを防ぐ
            clearTimeout(timer);
        }

        timer = setTimeout(function() {
            $('.wrap_map iframe').attr('src',''); //リサイズを検知したら、一度地図を呼び出すiframeのsrc属性を空にして
            $.each(src, function(i, val) {
                $('.wrap_map iframe').eq(i).attr('src',val);  //すべての地図を呼び出すiframeに対して再度、src属性に値を入れる
            });
        }, 200);
    });
});

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。


sample(マイマップを使う)

一つの地図に複数のマーカーを設置したり、マーカーの色を変えたり、経路を表示させたり・・・ということをマイマップを使って登録し、webページに貼り付けることも可能です。

ただ貼り付けただけだと、縮尺がうまくないことがあります。
そういう時は、src属性の値の最後に&amp;z=12(数字は0〜20の自然数)を付与してみてください。数値は適当に変えてちょうど良い表示を模索してください。


sample(Google Maps JavaScript API v3を使う)

APIキーの管理をしたくないので、サンプルは割愛します。

Google Map APIを使うにはAPIキーが必須です(ネット上のGoogle Map APIの解説記事が作成された時期によっては必須ではないとされていますが、2016/06のある時期から必須になったようです)。

APIキーを取得するにはgoogleアカウントが必要です。企業のサイトなどで使用する際は、企業としてアカウントを取得すると良いでしょう。
企業サイトなのにうっかり個人のアカウントで取得すると、後々面倒なことになりかねないのでご注意ください。
また、Google Map APIは条件によって課金されることがあります。使用前に、課金の問題をクリアしておきましょう。

APIキーの取得そのものは無料でできます。

以下に取得方法があります。他にもネット検索をすると解説してくれている記事がたくさあるので、頑張って取得してください。

このページの上の方にある情報ですが、再度掲載します。

提供元サイトチュートリアルやらリファレンスやらがあるのですが、2016/09現在、英語のみのようです。日本語の詳しい解説が欲しい場合は、ネットで親切な方々の記事を検索するしかありません。
親切な方々の記事も作成された時期によっては、現状とかなり違ったりするので、その辺りをよく確認しましょう。

とりあえず、ガイドは日本語なので、とっかかりは大丈夫のようです。

APIキーの管理をしたくないので、サンプルは割愛します。


html

html5が推奨されているようですが、xhtmlやhtml4でも問題なさそうです。
まずは、ライブラリを読み込みます。迷ったらheadタグ内かbodyタグの終了タグ直前あたりが妥当なところでしょうか。

<script src="https://maps.googleapis.com/maps/api/js?key={APIキー}"></script>

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

{APIキー}の部分は取得したAPIキーを入れてください({ }は不要)。

    <div id="map_canvas"></div>

地図を貼り付けたい箇所に地図情報を読み込むためのタグを設置します(id名は任意)。


css

cssは特に設定をするは必要ありませんが、レスポンシブ対応にしたければ、上記の単純な埋め込みのときと同様にcssを適宜設定します。

#map_canvas {
    position: relative;
    padding: 0 0 56%;
    height: 0;
    overflow: hidden;
}

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

ふきだし(情報ウィンドウ)を表示させる場合は、ふきだし内のhtmlタグに対してcssを設定できるので、必要であれば適宜設定してください。


js

地図上にふきだし(情報ウィンドウ)を表示させてみます。

ここではjQueryを使っていますが、使わなくても実現できます。

$(function(){
    var timer = false;

    var latlng = new google.maps.LatLng(35.134078, 139.618292); //地図の中心の座標

    var mapOptions = {
        center: latlng,
        zoom: 15, //縮尺調整0〜18(2016/09現在)
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); //地図の生成

    var marker = new google.maps.Marker({ //マーカーの設置
        position: latlng,
        map: map //生成した地図を格納した変数
    });

    var infoWin = new google.maps.InfoWindow();//情報ウィンドウの作成
    google.maps.event.addListener(marker, 'click', infoWinOpen); //mouseoverなど

    function infoWinOpen(){
        infoWin.setContent('ここにテキスト※html可');
        infoWin.open(map, marker);
    }

    infoWinOpen(); //最初から表示させたい時

    $(window).on('resize', function(){
        if (timer !== false) { //リサイズ中に何度も処理が行われるのを防ぐ
            clearTimeout(timer);
        }

        timer = setTimeout(function() {
            map.setCenter(latlng);
        }, 200);
    });
});

※黒い部分をダブルクリックするとソースを選択できるので、コピーして使ってください。

  1. 2行目:ウィンドウリサイズ時の処理に使用する変数。Google Map APIに直接関係ないので、ウィンドウリサイズ時の処理をしないのであれば、なくても良い。
  2. 4行目:地図の中心点になる座標を変数latlngに格納
  3. 6〜10行目:これから生成する地図のオプションを変数mapOptionsに格納
  4. 12行目:地図(変数map)の生成。ここで変数mapOptionsを使用。getElementByIdで指定するidはhtmlに設置した地図情報を読み込むためのタグのid。
  5. 14〜17行目:地図上にマーカーを設置したい場合は、マーカーを生成する。
    ここでは地図の中心点にマーカーを設置するので、positionに変数latlngを設定しているが、違う箇所にマーカーを設置したい場合はgoogle.maps.LatLngクラスで座標を生成する。
  6. 19行目:地図上にふきだしを設置したい場合は、情報ウィンドウを生成する。
  7. 20行目:どんなイベントによってふきだしを表示させるのか設定。
    どのマーカーに対して(ここでは変数marker)、どんな内容を表示させるか(ここでは関数infoWinOpen)を指定。
  8. 22〜25行目:ふきだしに表示させるテキスト等の設定(関数infoWinOpen・・・関数名は任意)。htmlの記述が可能なので、classなどを設定して、cssで装飾したり、画像を貼り付けたりすることも可能。
  9. 27行目:ページを読み込んだときにふきだしを表示させたい場合は、関数infoWinOpenを一度実行しておく。
  10. 29〜37行目:スマートデバイスを縦横回転(≒ウィンドウリサイズ)した際に中心点がずれてしまうので、ウィンドウリサイズを検知したら中心点を再度設定。
  • 各変数名は任意です。
  • 座標はgoogle mapで調べられます。とりあえず、(PCで)目的地を検索して、地図を表示してください。中心点にしたい箇所を右クリックするとメニューが表示されるので「この場所について」をクリックすると、地図の下に住所や座標などが表示されます。その座標をクリックすると左上の検索ボックスに数値が入るので、それをコピペしてください。
  • マップタイプはデフォルトの道路地図の他に衛星写真を用いた地図などがあります。
  • マーカーやふきだしは複数設置できます。変数名を変えて、同様に記述していけば記述した分だけ表示されますが、野暮ったいので、配列などを使ってすっきりしたコードにすると良いと思います。
  • イベントはクリックの他にもマウスオーバーなどがあります。
  • ズームの値はマップタイプによって異なるようです。→最大ズーム画像サービス
  • 地図は重いので、ページ全体の表示に影響を与えます。scriptタグにasyncを入れてみたり、スクリプトを挿入する位置をbodyタグの終了タグの直前あたりに持ってきたりして、タイミングをずらすと良いかもしれません。
  • 使ったことがないのであれですが、jquery gmap3というGoogle Maps APIをもっと手軽に使えるようにするjqueryプラグイン(GPL v3)があるようです。興味があったら使ってみてください。
  • APIキーなしでサーバアップしても地図は表示されませんが、ローカルでは表示します(2016/09現在)。ちょっとした実験くらいなら、ローカル環境でいろいろ試してみるのも良いと思います。

戻る

Top