Leaflet.js

簡単な地図を作成する。JavaScript ライブラリである Leaflet を用いることで、縮尺や表示エリアを自在に変えて地図を閲覧できるものが得られる。

事前準備

Leaflet.js を利用した地図 Web ページの作成に先立ち、まず必要なファイルを入手して適切な場所に配置する。 本講では以下の条件で関連ファイルを置くと仮定する。

また、すでに自分の Web ページが公開される環境が整っていて、その URL がたとえば

http://roy.e.koeki-u.ac.jp/~c12yxxx/

のようなパス名基準にアクセスできる状態になっていると仮定する。 この条件で leaflet ライブラリを導入する手順を示す。

  1. Leafletライブラリの入手

    Leaflet のサイトにある Download リンクから最新版のzipファイルを取得する。

  2. ライブラリの配置

    場所を決めて圧縮ファイル leaflet.zip を展開する。ここでは ~/public_html/src/ ディレクトリに配置する例で示す。

    # (leaflet.zipのあるディレクトリにて以下のように起動)
    mkdir ~/public_html/map/src
    unzip -d ~/public_html/map/src leaflet.zip
    

地図の表示

Leafletによる地図表示は以下の流れで行なう。

  1. 地図表示の基盤となるWebページ(HTML文書)を作成する。
  2. 最初に表示したいエリアの緯度経度と表示時のズーム倍率を決める。
  3. Leafletによるmapを導入するコードを書く。

まずは簡単な地図を作ってみる。ここでは、

という設定で表示してみる。作成ディレクトリは ~/public_html/map/domon/ とする。

mkdir ~/public_html/map/domon

このディレクトリ内に以下の2つのファイルを作成する。

  1. 地図基盤となるHTML

    domon.html

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <title>マップ: My First Map!</title>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="../src/leaflet.css" />	<!-- (1) -->
    <script src="../src/leaflet.js"></script>
    <style type="text/css">
    <!--
    div#mymap {width: 90vw; height: 80vh; margin: 0 auto;}	/* (2) */
    -->
    </style>
    </head>
    
    <body>
    <h1>My First Map!</h1>
    <div id="mymap"></div>		<!-- (3) -->
    <!-- #mymap であるdivを配置したあとで (4) -->
    <script type="text/javascript" src="domon.js" charset="utf-8"></script>
    </body>
    </html>
    
  2. 地図の呼出しとなる JavaScript プログラム

    domon.js

    /* domon.js - 北緯38.891度, 東経139.824度, ズームレベル16 で地図表示 */
    
    var mymap = L.map("mymap").setView([38.891, 139.824], 16);
    L.tileLayer('//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
     attribution:
       '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(mymap);
    

作成した domon.html をブラウザで開くとシンプルな地図が得られる。 地図枠左上の + ボタンと - ボタン、 あるいはマウスホイールで地図の縮尺が変えられ、 地図内のどこかをドラッグするとスクロールできる。

HTMLファイルの記述で必要なのは以下の4点である。

  1. leafletの読み込み

    (1)の部分で leaflet ライブラリ付属の CSS ファイルと JavaScript ファイルを読み込んでいる。

  2. マップの土台となる div 要素のスタイル決定

    (2)の部分で、のちの(4)で足す id="mymap" の div要素のサイズをスタイルシートで設定している。

  3. 土台となる div の配置

    実際に id="mymap" の div 要素を配置する。id は唯一に決まるものであれば何でもよい。

  4. JavaScript プログラムのロード

    スクロール地図の設定を記述した JavaScript ファイルを読み込む。

作成した JavaScript プログラムで利用している関数について説明する。

ベースマップの変更

表示の基準となる地図(ベースマップ)は、OSM 以外にもいくつかあり、自由に利用できるものも存在する。 国内で自由に利用でき、最も精度の高いものは国土地理院の提供しているベースマップである。

実際に利用してみる。「地理院タイルのご利用について」の注意を遵守し、先ほどの domon.html のベースマップを

地理院標準値図タイル:
http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png

に変更してみる。domon.html ファイルは変更点のみ示す。

<script type="text/javascript" src="domon.js" charset="utf-8"></script>

という行を以下のように変更して dom-gsi.html とする。

<script type="text/javascript" src="dom-gsi.js" charset="utf-8"></script>

必須ではないが、title と h1 要素も変えておくと分かりやすい。また、 dom-gsi.js は以下の内容とする。

dom-gsi.js

var mymap = L.map("mymap").setView([38.891, 139.824], 16);
L.tileLayer('//cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
 attribution:
   '<a href="http://maps.gsi.go.jp/development/ichiran.html">国土地理院</a>'
}).addTo(mymap);

作成した dom-gsi.html を開くと地理院タイルで表示された地図が得られる。

同じ位置の地図だが印象が違うのが分かる。

スケールコントロールの追加

最初に示した地図はズームボタンしか持たない。 他にも地図を制御するオブジェクトを追加できる。 例として縮尺を示すスケールコントロールを追加するコードを示す。

上記 dom-gsi.js に続けて以下の行を追加する。

L.control.scale().addTo(mymap);

L.control.scale() で生成したスケールコントロールを addTo() で指定したマップオブジェクトに結び付けている。 標準では表示地図の左下に追加される。これを変えるには L.control.scale() にオプション引数を与える。

L.control.scale({position: POS})

POS には位置を示すキーワードを文字列で与える。

'topleft'マップの左上
'topright'マップの右上
'bottomleft'マップの左下
'bottomright'マップの右下

練習問題

leaflet.js を用いて以下の地図を表示する Web ページを作成せよ。

  1. 皇居(東京都千代田区千代田1-1)を中心とし、半径 5km 程度が表示されるもの。
  2. 日本全体が表示されるもの。