SVGマスターへの道

付録A2: インタラクティブな地図 - クリックで情報を表示

SVGは、そのスケーラビリティとDOM操作の容易さから、インタラクティブな地図を作成するのに非常に適しています。このサンプルでは、簡単な日本の地方区分地図を作成し、マウスオーバーで地域をハイライトし、クリックするとその地域の情報を表示する機能を追加します。ウェブサイトでの地域情報案内や、データマッピングの基礎として応用できます。

完成デモ: インタラクティブ日本地方地図

下の地図の各地方にマウスカーソルを合わせると色が変わり、地方名がツールチップで表示されます。クリックすると右側の情報パネルに詳細が表示されます。

インタラクティブ日本地図 日本の主要な地方区分を示した地図。各地方はクリック可能。 {/* 九州と沖縄を分離して表現 */} Tooltip

情報を表示します

地図上の地方をクリックしてください。

使用した主なテクニック

コードのポイント解説

1. SVG構造 (HTMLに埋め込み)

各地方は <path> 要素で定義され、それぞれにユニークな id、表示名のための data-name、詳細情報のための data-info 属性が設定されています。

<svg id="japanMap" viewBox="0 0 400 300" ...>
  <!-- 例: 北海道 -->
  <path class="region" id="hokkaido"
        data-name="北海道地方"
        data-info="日本の最北端に位置し..."
        d="M200,5 L280,5 ..." />
  <!-- 他の地方も同様 ... -->
  <text id="mapTooltip" class="tooltip-text" x="0" y="0">Tooltip</text>
</svg>

2. CSSスタイリング

.region クラスで基本スタイルを、.region:hover やJavaScriptで追加する .highlighted, .selected クラスで状態に応じたスタイルを定義します。

.region {
  stroke: #333; stroke-width: 0.5; fill: #b2dfdb;
  transition: fill 0.2s ease-in-out, opacity 0.2s ease-in-out;
  cursor: pointer;
}
.region:hover, .region.highlighted { fill: #ffc107; opacity: 0.8; }
.region.selected { fill: #f06292; stroke: #c2185b; stroke-width: 1.5; }
.tooltip-text { font-size: 10px; opacity: 0; /* ... */ }
.tooltip-text.visible { opacity: 1; }

3. JavaScriptによるインタラクション

主な処理の流れは以下の通りです。(実際のコードは下の <script> タグ内にあります)

豆知識 (English/日本語)

Did you know? Creating accurate maps in SVG often involves dealing with map projections. Real-world geographical coordinates (latitude/longitude) need to be transformed into 2D Cartesian coordinates suitable for SVG paths. Libraries like D3.js have built-in projection capabilities to handle this complexe task. For simple illustrative maps, manual path creation or simplified shapes are common.

知っていましたか?正確なSVG地図を作成するには、しばしば地図投影法を扱う必要があります。現実世界の地理座標(緯度・経度)は、SVGパスに適した2次元のデカルト座標に変換する必要があります。D3.jsのようなライブラリは、この複雑なタスクを処理するための組み込みの投影機能を持っています。簡単な説明用の地図では、手動でのパス作成や単純化された形状が一般的です。

まとめ

SVGとJavaScriptを組み合わせることで、視覚的に分かりやすく、ユーザーが操作できるインタラクティブな地図コンテンツを作成できます。このサンプルでは基本的なハイライト、ツールチップ、情報表示機能を実装しましたが、ここからさらに発展させて、データの可視化(コロプレス図など)やズーム・パン機能などを追加することも可能です。

地図データそのものの準備(パスデータの作成や取得)がプロジェクトの規模によっては大変な作業になりますが、SVGの柔軟性がそれをインタラクティブにする強力な手段を提供します。次は、「付録A3: 動的なデータビジュアライゼーション」で、データとSVGを連携させる別の例を見ていきましょう。

このページの要約

日本語

このページでは、SVGとJavaScriptを使ってインタラクティブな地図を作成するサンプルを紹介しました。各地域をSVGの<path>要素で表現し、マウスオーバーでハイライト、クリックで関連情報を表示する機能を実装しました。CSSで見た目を制御し、JavaScriptでイベント処理(マウスイベント)とDOM操作(属性変更、テキスト更新)、ツールチップ表示を行っています。data-*属性を利用して要素に関連情報を保持させています。

English

This page demonstrated creating an interactive map using SVG and JavaScript. Each region was represented by an SVG <path> element, with features implemented to highlight on mouseover and display related information on click. CSS controlled the appearance, while JavaScript handled event processing (mouse events), DOM manipulation (attribute changes, text updates), and tooltip display. data-* attributes were used to store relevant information with the elements.

Español

Esta página demostró la creación de un mapa interactivo usando SVG y JavaScript. Cada región fue representada por un elemento <path> de SVG, con funciones implementadas para resaltar al pasar el mouse por encima y mostrar información relacionada al hacer clic. CSS controló la apariencia, mientras que JavaScript manejó el procesamiento de eventos (eventos del mouse), la manipulación del DOM (cambios de atributos, actualizaciones de texto) y la visualización de información sobre herramientas. Se utilizaron atributos data-* para almacenar información relevante con los elementos.

中文

本页演示了如何使用SVG和JavaScript创建交互式地图。每个区域由SVG的<path>元素表示,并实现了鼠标悬停时高亮显示和点击时显示相关信息的功能。CSS控制外观,而JavaScript处理事件(鼠标事件)、DOM操作(属性更改、文本更新)和工具提示显示。使用data-*属性将相关信息存储在元素中。