描画レイヤー(ライブラリ)

  1. 概要
  2. ライブラリの使用
  3. DrawingManager のオプション
  4. 描画ツール コントロールの更新
  5. 描画イベント

概要

DrawingManager クラスは、地図上にポリゴン、矩形、ポリライン、円、マーカーを描画するためのグラフィカル ユーザー インターフェースを提供します。

ライブラリの使用

描画ツールは、メインの Maps API JavaScript のコードとは別の独立したライブラリです。このライブラリにある機能を利用するには、最初に Maps API ブートストラップ URL の libraries パラメータを使用してライブラリを読み込む必要があります。

<script async     src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=drawing&callback=initMap"> </script>

ライブラリ パラメータを追加したら、次のように DrawingManager オブジェクトを作成できます。

var drawingManager = new google.maps.drawing.DrawingManager(); drawingManager.setMap(map);

DrawingManager のオプション

DrawingManager コンストラクタには、表示するコントロール一式、コントロールの位置、初期描画状態を定義するオプションを指定します。

  • DrawingManagerdrawingMode プロパティは、DrawingManager の初期描画状態を定義します。値は google.maps.drawing.OverlayType 定数で指定します。デフォルト設定は null で、この場合 DrawingManager の初期化時のカーソルは非描画モードです。
  • DrawingManagerdrawingControl プロパティは、地図上の描画ツール選択インターフェースの表示設定を定義します。値はブール値で指定します。
  • DrawingManagerdrawingControlOptions プロパティを使用して、コントロールの位置と、コントロール内に表示するオーバーレイのタイプを定義します。
    • position は、地図上の描画コントロールの位置を定義します。値は google.maps.ControlPosition 定数で指定します。
    • drawingModesgoogle.maps.drawing.OverlayType 定数の配列です。描画コントロールのシェイプ選択ツールに含めるオーバーレイ タイプを定義します。なお、ハンドアイコンは常時表示されるので、ユーザーは描画をしなくても地図を操作できます。コントロール内に表示されるツールの並び順は、配列で宣言されている順番と同じです。
  • 各タイプのオーバーレイにデフォルト プロパティのセットを割り当てると、オーバーレイが最初に作成された時点での外観を定義できます。これは、オーバーレイの {overlay}Options プロパティで定義します({overlay} はオーバーレイのタイプを表します)。たとえば、円を塗りつぶすプロパティやストロークのプロパティ、zIndex、クリック可否は circleOptions プロパティで定義できます。サイズや位置、地図の値が渡された場合は、すべて無視されます。 設定可能なプロパティの全詳細については、API リファレンス ドキュメントをご覧ください。

注: 作成したシェイプをユーザー編集可能にする場合は、その editable プロパティを true に設定します。

TypeScript

// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing">  function initMap(): void {   const map = new google.maps.Map(     document.getElementById("map") as HTMLElement,     {       center: { lat: -34.397, lng: 150.644 },       zoom: 8,     }   );    const drawingManager = new google.maps.drawing.DrawingManager({     drawingMode: google.maps.drawing.OverlayType.MARKER,     drawingControl: true,     drawingControlOptions: {       position: google.maps.ControlPosition.TOP_CENTER,       drawingModes: [         google.maps.drawing.OverlayType.MARKER,         google.maps.drawing.OverlayType.CIRCLE,         google.maps.drawing.OverlayType.POLYGON,         google.maps.drawing.OverlayType.POLYLINE,         google.maps.drawing.OverlayType.RECTANGLE,       ],     },     markerOptions: {       icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",     },     circleOptions: {       fillColor: "#ffff00",       fillOpacity: 1,       strokeWeight: 5,       clickable: false,       editable: true,       zIndex: 1,     },   });    drawingManager.setMap(map); }  declare global {   interface Window {     initMap: () => void;   } } window.initMap = initMap;

JavaScript

// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing"> function initMap() {   const map = new google.maps.Map(document.getElementById("map"), {     center: { lat: -34.397, lng: 150.644 },     zoom: 8,   });   const drawingManager = new google.maps.drawing.DrawingManager({     drawingMode: google.maps.drawing.OverlayType.MARKER,     drawingControl: true,     drawingControlOptions: {       position: google.maps.ControlPosition.TOP_CENTER,       drawingModes: [         google.maps.drawing.OverlayType.MARKER,         google.maps.drawing.OverlayType.CIRCLE,         google.maps.drawing.OverlayType.POLYGON,         google.maps.drawing.OverlayType.POLYLINE,         google.maps.drawing.OverlayType.RECTANGLE,       ],     },     markerOptions: {       icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png",     },     circleOptions: {       fillColor: "#ffff00",       fillOpacity: 1,       strokeWeight: 5,       clickable: false,       editable: true,       zIndex: 1,     },   });    drawingManager.setMap(map); }  window.initMap = initMap;
サンプルを表示

サンプルを試す

描画ツール コントロールの更新

DrawingManager オブジェクトを作成したら、setOptions() を呼び出して新しい値を渡すことで、このオブジェクトを更新できます。

drawingManager.setOptions({   drawingControlOptions: {     position: google.maps.ControlPosition.BOTTOM_LEFT,     drawingModes: ['marker']   } });

描画ツール コントロールを非表示にする、または表示する方法は次のとおりです。

// To hide: drawingManager.setOptions({   drawingControl: false });  // To show: drawingManager.setOptions({   drawingControl: true });

描画ツール コントロールを map オブジェクトから削除する方法は次のとおりです。

drawingManager.setMap(null);

描画ツール コントロールを「非表示」に設定した場合、画面には表示されなくなりますが、DrawingManager クラスの機能はそのまますべて利用できます。この場合、必要に応じて、独自のコントロールを実装できます。map オブジェクトから DrawingManager を削除すると、描画機能がすべて無効になります。描画機能を復元する場合は、drawingManager.setMap(map) か新規に作成した DrawingManager を使って、地図に貼り付け直す必要があります。

描画イベント

シェイプ オーバーレイが作成されると、次の 2 つのイベントが発生します。

  • {overlay}complete イベント({overlay} は、circlecompletepolygoncomplete などのオーバーレイ タイプを表します)。オーバーレイの参照が引数として渡されます。
  • overlaycomplete イベント。OverlayType を格納するオブジェクト リテラルと、オーバーレイの参照が引数として渡されます。
google.maps.event.addListener(drawingManager, 'circlecomplete', function(circle) {   var radius = circle.getRadius(); });  google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {   if (event.type == 'circle') {     var radius = event.overlay.getRadius();   } });

なお、地図への描画中は、clickmousemove などの google.maps.Map イベントが無効になります。