概要
ウェブページで地図を使用する場合、ユーザーによるズーム操作やパン操作を制御するオプションが必要な場合があります。こうしたオプション(gestureHandling、minZoom、maxZoom、restriction など)は、MapOptions インターフェース内で定義します。
デフォルトの動作
次の例は、zoom オプションと center オプションのみを定義してインスタンス化された地図をユーザーが操作した場合の、デフォルトの動作を示しています。
この地図のコードは以下のとおりです。
TypeScript
new google.maps.Map(document.getElementById("map")!, { zoom, center, });
JavaScript
new google.maps.Map(document.getElementById("map"), { zoom, center, });
操作処理の制御
地図を含むページをユーザーがスクロールすると、そのスクロール操作によって地図が意図せずズームされることがあります。この動作は、地図オプションの gestureHandling を使用して制御できます。
gestureHandling: cooperative
以下の地図では、gestureHandling オプションを cooperative に設定しています。これにより、ユーザーがページをスクロールしても、地図がズームまたはパンされることはありません。ユーザーはズーム コントロールをクリックして、地図をズームできます。タッチスクリーン デバイスの場合は、2 本指を使う操作で地図のズームやパンを行うこともできます。
この地図のコードは以下のとおりです。
TypeScript
new google.maps.Map(document.getElementById("map")!, { zoom, center, gestureHandling: "cooperative", });
JavaScript
new google.maps.Map(document.getElementById("map"), { zoom, center, gestureHandling: "cooperative", });
gestureHandling: auto
ページ上部の gestureHandling オプションがない地図は、gestureHandling が cooperative に設定された前の地図と動作は同じです。これは、このページ上のすべての地図が <iframe> 内にあるためです。gestureHandling の値がデフォルトの auto である場合、<iframe> で地図が埋め込まれているかどうかに応じて、greedy または cooperative に切り替わります。
<iframe> で埋め込まれた地図 |
動作 |
|---|---|
| あり | cooperative |
| なし | greedy |
gestureHandling: greedy
gestureHandling を greedy に設定した地図は次のとおりです。この地図は、cooperative とは異なり、すべてのタッチ操作とスクロール イベントに反応します。
gestureHandling: none
gestureHandling オプションを none に設定して、地図操作を無効にすることもできます。
パンとズームを無効にする
地図のズームとパンを完全に無効にするには、gestureHandling と zoomControl の 2 つのオプションを含める必要があります。
TypeScript
new google.maps.Map(document.getElementById("map")!, { zoom, center, gestureHandling: "none", zoomControl: false, });
JavaScript
new google.maps.Map(document.getElementById("map"), { zoom, center, gestureHandling: "none", zoomControl: false, });
以下の地図は、上記のコードの gestureHandling と zoomControl を組み合わせています。
地図の境界とズームを制限する
操作やズームのコントロールを許可する一方で、地図を特定の境界に制限したり、ズームの最小値や最大値を設定したりすることもできます。その場合は、restriction、minZoom、maxZoom オプションを設定します。次のコードと地図では、これらのオプションを使用しています。
TypeScript
new google.maps.Map(document.getElementById("map")!, { zoom, center, minZoom: zoom - 3, maxZoom: zoom + 3, restriction: { latLngBounds: { north: -10, south: -40, east: 160, west: 100, }, }, });
JavaScript
new google.maps.Map(document.getElementById("map"), { zoom, center, minZoom: zoom - 3, maxZoom: zoom + 3, restriction: { latLngBounds: { north: -10, south: -40, east: 160, west: 100, }, }, });