LoginSignup
43
55

More than 3 years have passed since last update.

Google Maps APIの使い方

Last updated at Posted at 2019-06-01

Google Maps APIについて業務で使うことになったので予習もかねて使い方をまとめておきます。

動作環境

Maps JavaScript API version 3.37

コンストラクタ

google.maps.Map(mapDiv:Node, opts?:MapOptions )

Node
地図を表示する位置を指定します。
DIV要素でマップを配置する場所を用意しておいて、document.getElementById()を利用してその要素への参照を渡してあげます。

MapOptions
地図を表示する際のオプションを指定します。
オプションには、centerzoomは必須項目となっています。

centerには座標を指定します。
zoomには0~22までのズームレベルを指定します。

具体的なズームレベルについては以下の記事が参考になります。
Google Maps APIのズームレベルまとめ

サンプル

sample.html
<body>
<style>
#map {
    height: 100%;
}
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
</style>
<div id="map"></div>
<script>
    var map;
    function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
            center: {lat: -34.397, lng: 150.644},
            zoom: 8
        });
    }
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=(APIキー)&callback=initMap"></script>
</body>

マーカーをつける

google.maps.Marker

マーカーをつけるにはMarkerクラスを利用します。

markerをつける
var marker = new google.maps.Marker({
  position: {lat: 35.665498, lng: 139.75964},
  map: map
});

スクリーンショット 2019-06-01 15.16.19.png

mapには、Mapクラスのインスタンスを渡します。

複数のマーカーをつける場合

作成したいマーカー分のMarkerインスタンスを生成します。

複数マーカーをつける
function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 14,
        center: {lat: 35.665498, lng: 139.75964}
    });

    var markers = locations.map(function(location) {
      return new google.maps.Marker({
        position: location,
        map: map,
      });
    });
}
var locations = [
        {lat: 35.665498, lng: 139.75964},
        {lat: 35.681382, lng: 139.76608399999998},
        {lat: 35.675069, lng: 139.763328}
]

スクリーンショット 2019-06-01 14.21.44.png

座標はこちらを参考にしました。
山手線停車駅の座標一覧

吹き出しをつける

マーカーに吹き出しをつけることも出来ます。

google.maps.InfoWindow

吹き出しを表示
var infowindow = new google.maps.InfoWindow({
    content: '新橋駅'
});
infowindow.open(map, marker);

スクリーンショット 2019-07-13 11.43.29.png

吹き出しの中にHTML

吹き出しの中にはHTMLを書くことも出来ます。
Nodeをcontentに渡せばそのHTMLが表示されます。

吹き出しの中にHTML
var box = '<div class="box">' + 
              '<p>新橋駅</p>' +
          '</div>'
var infowindow = new google.maps.InfoWindow({
    content: box
});
infowindow.open(map, marker);

スクリーンショット 2019-07-13 11.47.02.png

イベント処理

各種イベント処理についてです。
Google Maps APIでクラス化したインスタンスに対してaddListenerを利用することでイベント処理を行うことが可能です。

clickイベント

クリックした時に処理を実行します。
こんな感じです。

clickイベント
map.addListener('click', function(e) {
  alert(e.latLng);
});

スクリーンショット 2019-06-01 14.14.49.png

markerに対しても設定可能です。

markerにclickイベント
function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: {lat: 35.665498, lng: 139.75964}
  });

  var marker = new google.maps.Marker({
    position: {lat: 35.665498, lng: 139.75964},
    map: map,
  });

  marker.addListener('click', function() {
    alert(marker.getPosition());
  });
}

スクリーンショット 2019-06-01 14.20.10.png

dragイベント

地図を移動させる際にイベント発火します。
少しでも移動させるたびにイベント発火するので重たい処理をするのは注意です。

dragイベンド
map.addListener('drag', function(e) {
   document.getElementById("latlng").innerHTML = map.getCenter();
});

スクリーンショット 2019-06-01 14.47.17.png

center_changedイベント

先ほどのdragイベントと似ています。
中心位置が変更になった際に発火するイベントです。

center_changedイベント
map.addListener('center_changed', function(e) {
  document.getElementById("latlng").innerHTML = map.getCenter();
});

bounds_changedイベント

こちらは地図を動かしたり、ズーム値を変更した際に発火します。

bounds_changedイベント
map.addListener('bounds_changed', function(e) {
  document.getElementById("latlng").innerHTML = map.getCenter();
  document.getElementById("zoom").innerHTML = map.getZoom();
});

スクリーンショット 2019-06-01 14.53.36.png

idleイベント

このイベントは地図を動かしたり、ズーム値を変えたりして落ち着いた状態になった際に発火するイベントです。
drag、center_changed、bounds_changedイベントでは操作中すぐにイベント発火しましたが、idleイベントでは少し待ってから処理が稼働するので安定します。

idleイベント
map.addListener('idle', function(e) {
  alert("座標:" + map.getCenter() + " ズーム値:" + map.getZoom());
});

スクリーンショット 2019-06-01 14.58.31.png

その他クラス

Circle

指定した範囲の円を作成します。

Circleクラス
var circle = new google.maps.Circle({
  map: map ,
  center: {lat: 35.665498, lng: 139.75964},
  radius: 500,
});

rediusには円の半径を指定します。メートル単位です。

スクリーンショット 2019-06-01 15.06.11.png

Polygon

ポリゴンを作成します。

Polygonクラス
var polygon = new google.maps.Polygon({
    map: map,
    paths:[
      {lat: 35.672557, lng: 139.752634},
      {lat: 35.669437, lng: 139.765691},
      {lat: 35.660302, lng: 139.764317},
      {lat: 35.665253, lng: 139.751786}
    ],
});

スクリーンショット 2019-06-01 15.13.40.png

参考

Google Maps JavaScript API V3 Reference
Maps JavaScript API公式
Google Maps APIのズームレベルまとめ
山手線停車駅の座標一覧

43
55
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
55