🚆

駅すぱあと路線図JavaScriptライブラリrosen.jsを使って路線図のハイライトを描く

2024/11/25に公開

本記事はヴァル研究所の支援として作成された記事です

駅すぱあとは乗り換え案内サービスとして有名ですが、駅すぱあとの路線図をWebページに埋め込むことができるのを知っているでしょうか。駅すぱあとの路線図をWebページに埋め込むことで、Webサイトへの訪問者が目的地までの経路を探しやすくなります。日本の大都市圏では電車での移動が多いので、路線図を中心とした地図は便利です。

そんな地図埋め込みを手軽に実現してくれるライブラリがrosen.jsです。これは駅すぱあと公式のライブラリであり、地図と駅・路線情報などを組み合わせてさまざまな可視化を行えます。

本記事では、rosen.jsを使って路線図のハイライトを描く方法を紹介します。

今回のコードについて

今回のコードはEkispertAPIMania/rosenjs-demoにアップロードしてあります。実装時の参考にしてください。

rosen.jsのインストール

rosen.jsは以下のHTMLタグでインストールします。

<link rel="stylesheet" href="https://rmap.ekispert.jp/production/rosen.css" />
<script src="https://rmap.ekispert.jp/production/rosen.js"></script>

注意点

rosen.jsはLeafletを利用しています。Leaflet.jsはオープンソースの地図描画ライブラリになります(ライセンスはBSD-2-Clause licenseです)。

下準備

そして、地図を描画するDOMを用意します。

<div id="map"></div>

#map に対するスタイル設定を行います。これはサイトによって異なるでしょう。

#map {
	width: 100%;
	height: 100%;
}

rosen.jsの使い方

初期化

まず、rosen.jsを初期化します。APIキーが必要です。
APIキーは「駅すぱあと API」の有償契約のほか、フリープランお申し込みフォームからキーを申請することで利用を開始することができます。(フリープランでは、路線図は「100セッションまで/日」使えます。)

なお、手軽にブラウザで駅すぱあと路線図を含む「駅すぱあと API」を試してみたい場合、「駅すぱあと Playground」というAPIキーや開発環境が不要なサービスも提供されています。

const rosen = new Rosen("map", {            
	apiKey: "YOUR_API_KEY",    // アクセスキー
});

路線図を検索

最初に路線図を検索します。路線図は searchLinesByName メソッドで検索します。検索は日本語でできます。

// 検索キーワード(HTMLフォームから取得)
const query = document.querySelector('[name="q"]').value;
const lines = await rosen.searchLinesByName(query);

結果がない(該当する路線がない)場合は、lines は空の配列になります。

if (lines.length === 0) {
	alert('該当する路線がありません');
	return;
}

路線図のハイライト

検索結果にある最初の路線図をハイライトします。

const { code } = lines[0];
rosen.highlightLine(code);

スタイルの変更

ハイライトする色は、デフォルトでは各路線図に設定されている色になります。2つ目の引数で、これを変更できます。

rosen.highlightLine(code, {
	color: '#c73896',
	opacity: 0.5,
	weight: 15
});
```![](https://storage.googleapis.com/zenn-user-upload/89d24513a83a-20241119.png)



### 路線全体の表示

路線全体を地図に表示する際には、路線の駅を一覧で取得し、その駅コードを `fitBoundsByStationCodes` に適用します。

```javascript
// 路線の駅を取得
const stations = await rosen.searchStations({
	lineCode: code,
});
// 路線全体を表示
rosen.fitBoundsByStationCodes(stations.map(s => s.code));

実装例

今回の例を実現するHTMLコードは以下の通りです。路線を検索する入力欄を用意しています。

<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="utf-8">
		<title>rosen.js デモ(路線図ハイライト)</title>
		<link rel="stylesheet" href="https://rmap.ekispert.jp/production/rosen.css" />
		<script src="https://rmap.ekispert.jp/production/rosen.js"></script>
		<style>
			#map {
				width: 100%;
				height: 600px;
			}
		</style>
		<script>
			// 駅すぱあと路線図のAPIキー
			window.API_KEY = 'YOUR_API_KEY';
		</script>
	</head>
	<body>
		<div>
			<input type="text" name="q" />
			<button>検索</button>
		</div>
		<div id="map"></div>
		<script src="app.js"></script>
	</body>
</html>

そして、JavaScriptファイル app.js には以下のコードを記述します。

// ページが完全に読み込まれた後に実行されるイベントリスナー
document.addEventListener('DOMContentLoaded', () => {
  // Rosenクラスのインスタンスを作成。地図の要素にAPIキーを使って表示
  const rosen = new Rosen("map", {
    apiKey: API_KEY,  // APIキーは別途設定して使用する
  });

  // ボタンがクリックされた時に実行されるイベントリスナー
  document.querySelector('button').addEventListener('click', async (e) => {
    // ページの再読み込みを防ぐ
    e.preventDefault();

    // ユーザーが入力した路線名を取得
    const query = document.querySelector('[name="q"]').value;

    // 入力された路線名で路線を検索(非同期処理)
    const lines = await rosen.searchLinesByName(query);

    // 該当する路線が見つからなかった場合、アラートを表示して処理を終了
    if (lines.length === 0) {
      alert('該当する路線がありません');
      return;
    }

    // 検索結果の最初の路線のコードを取得
    const { code } = lines[0];

    // 取得した路線を地図上でハイライト表示
    rosen.highlightLine(code);

    // ハイライトした路線の駅を取得(非同期処理)
    const stations = await rosen.searchStations({
      lineCode: code,  // 路線コードを使って駅情報を取得
    });

    // 駅のコードを使って地図の表示範囲を自動的に調整
    rosen.fitBoundsByStationCodes(stations.map(s => s.code));
  });
});

他の機能

rosen.jsには他にもたくさんの機能があります。

  • マーカーを立てる
  • ポップアップ表示する
  • 複数の駅を線で結ぶ
  • 最寄り駅を検索する

単純に表示するだけでなく、路線図を使って業務などにも役立てられるでしょう。

まとめ

今回は駅すぱあと路線図のJavaScriptライブラリであるrosen.jsを紹介しました。rosen.jsを使えば、簡単に地図と路線図を組み合わせた表示が実現できます。

ブラウザで簡単に使えますので、Webサービスや業務システムなどさまざまな使い方ができそうです。

全国路線図|駅すぱあと for web

Discussion