【初心者向け】OpenLayers 入門

OpenLayers

GIS アプリケーションを開発するのに欠かせない OpenLayers について概要と、動くサンプルコードを紹介します。

スポンサーリンク

OpenLayersとは?

フロントエンドで地図操作を可能にするJavaScriptライブラリです。
OpenLayersでは

  • 地図の表示
  • 地図操作(移動、回転、縮尺)
  • レイヤの表示
  • フィーチャの描画

等を行うことが出来ます。

百聞は一見にしかずということで、サンプルコードを紹介します。


サンプル

地図を表示する

See the Pen Map by mt (@mtakeda) on CodePen.

<html>
    <head>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
        <script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
        <script src="createMap.js"></script>
        <script src="map.js"></script>        
    </head>
    <body>
        <div id="map"></div>
    </body>
</html>

idがmapのHTML要素に地図を追加します。

window.onload = function(){
    var map = createMap();    
}

/** 地図を作成します。 */
function createMap() {
    return new ol.Map({
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],
        target: 'map',
        controls: ol.control.defaults({
            attributionOptions: {
                collapsible: false
            }
        }),
        view: new ol.View({
            center: [0, 0],
            zoom: 2
        })
    });
}
スポンサー

地図にフィーチャを表示する

<html>
    <head>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
        <script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
        <script src="readFeature.js"></script>
    </head>
    <body>
        <div id="map"></div>
    </body>
</html>

ベクターレイヤを作成する際、取得元のURLやフォーマット等を指定します。
今回の例ではKMLを指定しています。

window.onload = function(){
    var map = createMap();
    var vectorLayer = createVectorLayer();
    map.addLayer(vectorLayer);
}

/** 地図を作成します。 */
function createMap() {
    return new ol.Map({
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],
        target: 'map',
        controls: ol.control.defaults({
            attributionOptions: {
                collapsible: false
            }
        }),
        view: new ol.View({
            center: [0, 0],
            zoom: 2
        })
    });
}

/** ベクターレイヤを作成します。 */
function createVectorLayer() {
    return new ol.layer.Vector({
        source: new ol.source.Vector({
            url: 'https://openlayers.org/en/v4.6.4/examples/data/kml/2012_Earthquakes_Mag5.kml',
            format: new ol.format.KML({
              extractStyles: false
            })
        })
    });
}

フィーチャを地図に描画する

<html>
    <head>
        <link rel="stylesheet" href="https://openlayers.org/en/v4.6.4/css/ol.css" type="text/css">
        <script src="https://openlayers.org/en/v4.6.4/build/ol.js"></script>
        <script src="drawFeature.js"></script>
    </head>
    <body>
        <div id="map" style="height: calc(100vh - 40px);"></div>
        <label>Geometry type  </label>
        <select id="type">
          <option value="Point">Point</option>
          <option value="LineString">LineString</option>
          <option value="Polygon">Polygon</option>
          <option value="Circle">Circle</option>
        </select>
    </body>
</html>

描画用のレイヤを用意し、地図に描画出来るように設定します。
プルダウンの切替に応じて描画するフィーチャの種類を切り替えます。

window.onload = function(){
    var map = createMap();
    var typeSelect = document.getElementById('type');

    addDrawingLayer(map);
    addDrawInteraction(map, typeSelect.value); 

    typeSelect.onchange = function(){
        removeDrawInteraction(map);
        addDrawInteraction(map, typeSelect.value);
    }
}


/** 地図を作成します。 */
function createMap() {
    return new ol.Map({
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],
        target: 'map',
        controls: ol.control.defaults({
            attributionOptions: {
                collapsible: false
            }
        }),
        view: new ol.View({
            center: [0, 0],
            zoom: 2
        })
    });
}

var drawingSource = new ol.source.Vector();
var drawingLayer = new ol.layer.Vector({
    source: drawingSource
});
var drawInteraction;

/** 描画用のレイヤを地図に追加します。 */
function addDrawingLayer(map){
    map.addLayer(drawingLayer);
}

/** フィーチャを描画出来るようにします。 */
function addDrawInteraction(map, type){
    // 指定された種類のフィーチャを描画出来るようにする
    drawInteraction = new ol.interaction.Draw({
        source: drawingSource,
        type: type
    });
    map.addInteraction(drawInteraction);
}

/** フィーチャの描画を解除します。 */
function removeDrawInteraction(map){
    map.removeInteraction(drawInteraction);
}

関連情報

OpenLayers に関連する記事を以下にまとめています。
中心座標やズームレベルを表示する方法や選択されたフィーチャのスタイルを変える方法などを紹介しています。

GIS に関連する記事を以下にまとめています。

テレワークしている方には以下の記事がおすすめです。
私のお気に入りは REALFORCE と R&F BELX のルイボスティーです。

エンジニア初心者向けに本当に使えるツールを紹介しています。
特に Notion はタスク管理に本当に便利です。

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