Leafletのマーカー(KMLファイル)表示

Leaflet

KML形式の地物情報をLeafletに取り込みます。

KMLファイルの準備

 簡単なKMLファイルを準備する。

 KMLファイルの詳細についてはこちら

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>東京都マップ</name>
    <description/>
    <Folder>
      <name>東京都マップ</name>
      <Placemark>
        <name>新宿駅</name>
        <description>35.689564,139.700410</description>
        <Point>
          <coordinates>
            139.700410,35.689564,0
          </coordinates>
        </Point>
      </Placemark>
      <Placemark>
        <name>新宿御苑</name>
        <description>35.685273,139.709422</description>
        <Point>
          <coordinates>
            139.709422,35.685273,0
          </coordinates>
        </Point>
      </Placemark>
      <Placemark>
        <name>明治神宮</name>
        <description>35.677564,139.699337</description>
        <Point>
          <coordinates>
            139.699337,35.677564,0
          </coordinates>
        </Point>
      </Placemark>
      <Placemark>
        <name>新国立劇場</name>
        <description>35.682588,139.685904</description>
        <Point>
          <coordinates>
            139.685904,35.682588,0
          </coordinates>
        </Point>
      </Placemark>
    </Folder>
  </Document>
</kml>

使用するプラグイン

今回はMITライセンスのLeaflet KML layer pluginを利用します。

Leaflet の公式サイト https://leafletjs.com から入手します。

「Plugins」をクリックします。

「Overlay data formats」をクリックします。

「leaflet-kml」をクリックします。

「Code▼」のプルダウンメニューから「Download ZIP」をクリックします。

  • ライセンスはMIT

使い方

 まず、HTMLファイルを作成し、L.KML.jsファイルを読み込みます。

<script src="./L.KML.js"></script>

 サンプルのdata.kmlデータを取得して、DOMParserのparseFromString()メソッドを利用することで、XML文字列からDocumentオブジェクトを作成します。L.KML関数の引数として、Documentオブジェクトを渡します。

fetch('./data.kml')
  .then(res => res.text())
  .then(kmltext => {
    const _parser = new DOMParser();
    const _kml = _parser.parseFromString(kmltext, 'text/xml');
    const _track = new L.KML(_kml);
    _map.addLayer(_track);
  });

全体コード

<html lang="ja">
<head>
 <title>Leafletのマーカー(KML)の表示</title>
 <meta charset="utf-8">
 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
 
 <script src="./L.KML.js"></script>

</head>
<body>

<div id="map" style="width:100%;height:100%"></div>
<script>
  //表示位置を設定
  var _map = L.map('map');
  //初期表示時に中心座標とズームレベルを設定
  _map.setView([35.6895, 139.69172], 10);
  //初期表示時の表示地図を設定
  L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
      attribution: "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>国土地理院</a>"
  }).addTo(_map);
  //マーカー(KML)の表示
  fetch('./data.kml')
	.then(res => res.text())
	.then(kmltext => {
		const _parser = new DOMParser();
		const _kml = _parser.parseFromString(kmltext, 'text/xml');
		const _track = new L.KML(_kml);
		_map.addLayer(_track);
	});
</script>

</body>
</html>

サンプルを別画面で実行

コメント

タイトルとURLをコピーしました