dayjournal memo

Total 992 articles!!

Try #042 – 色々なマップライブラリでMapTilerを表示してみた

Yasunori Kirimoto's avatar

画像

画像

画像

画像




画像




色々なマップライブラリでMapTilerを表示してみました!

Mapbox GL JS・Leaflet・OpenLayers等でMapTilerを利用してみたいかたの参考になればと思います!



1. MapTilerのタイルURL取得

はじめに、MapTilerのタイルURLを取得します。毎月無料枠もあるのでゼヒお試しください!

スタイル選択は、日本用に最適化されたMIERUNEMAPスタイルをおすすめします。今回は「JP MIERUNE Streets」を利用してみます。


MIERUNEMAPスタイル一覧 画像


タイルURL取得方法 画像



2. ビルド環境の準備

Mapbox GL JS・Leaflet・OpenLayersを手軽に始めるビルド環境を公開しています。今回はそのスターターを利用し、さくっと表示してみます。

マップライブラリはお好きなものを選んでみてください!


Mapbox GL JS
mapboxgljs-starter

Leaflet
leaflet-starter

OpenLayers
openlayers-starter



3. ラスタタイルの表示

MapTilerを各マップライブラリで読み込むには、色々な方法が存在しますが今回は代表的な例で読み込んでみたいと思います。

ラスタタイルの表示方法を紹介します。基本は各スターターの「script.js」を修正するのみで表示可能です!


MapTilerのラスタタイルは、このタイルURLを利用します。 画像


Mapbox GL JS 画像

script.js

// MIERUNE Streets読み込み
const map = new mapboxgl.Map({
    container: 'map',
    style: {
        'version': 8,
        'sources': {
            'm_streets': {
                'type': 'raster',
                'tiles': ['https://api.maptiler.com/maps/jp-mierune-streets/256/{z}/{x}/{y}.png?key=[APIキー]'],
                'tileSize': 256,
                'attribution': '<a href="https://maptiler.jp/" target="_blank">© MIERUNE</a> <a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>'
            }
        },
        'layers': [{
            'id': 'mierunemap',
            'type': 'raster',
            'source': 'm_streets',
            'minzoom': 0,
            'maxzoom': 18
        }]
    },
    center: [139.767, 35.681],
    zoom: 13
});

// コントロール関係表示
map.addControl(new mapboxgl.NavigationControl({
    visualizePitch: true
}));

Leaflet 画像

script.js

// デフォルトアイコンパス
L.Icon.Default.imagePath = './img/icon/';

// MIERUNE Streets読み込み
const m_streets = new L.tileLayer('https://api.maptiler.com/maps/jp-mierune-streets/256/{z}/{x}/{y}.png?key=[APIキー]', {
    attribution: '<a href="https://maptiler.jp/" target="_blank">© MIERUNE</a> <a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>'
});

// MAP読み込み
const map = L.map('map', {
    center: [35.681, 139.767],
    zoom: 14,
    zoomControl: true,
    layers: [m_streets]
});

OpenLayers 画像

script.js

import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';
import { fromLonLat } from 'ol/proj';

// MIERUNE Streets読み込み
const map = new Map ({
    target: 'map',
    layers: [
        new TileLayer({
            source: new XYZ({
                url: 'https://api.maptiler.com/maps/jp-mierune-streets/256/{z}/{x}/{y}.png?key=[APIキー]',
                attributions: '<a href="https://maptiler.jp/" target="_blank">© MIERUNE</a> <a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>',
                attributionsCollapsible: false,
                tileSize: [256, 256],
                minZoom: 0,
                maxZoom: 18
            })
        })
    ],
    view: new View ({
        center: fromLonLat([139.767, 35.681]),
        zoom: 14
    })
});


3. ベクトルタイルの表示

最後に、ベクトルタイルの表示方法を紹介します。Mapbox GL JSについては、script.jsの修正のみで表示可能ですが、LeafletとOpenLayersについては別途プラグインのインストールが必要です。


MapTilerのベクトルタイルは、このタイルURLを利用します。 画像


Mapbox GL JS 画像

script.js

// MIERUNE Streets読み込み
const map = new mapboxgl.Map({
    container: 'map',
    style: 'https://api.maptiler.com/maps/jp-mierune-streets/style.json?key=[APIキー]',
    center: [139.767, 35.681],
    zoom: 13
});

// コントロール関係表示
map.addControl(new mapboxgl.NavigationControl({
    visualizePitch: true
}));

Leaflet 画像

パッケージインストール

npm install mapbox-gl-leaflet
npm install mapbox-gl

script.js

// デフォルトアイコンパス
L.Icon.Default.imagePath = 'img/icon/';

// MIERUNE Streets読み込み
const m_streets = L.mapboxGL({
  attribution: '<a href="https://maptiler.jp/" target="_blank">© MIERUNE</a> <a href="https://www.maptiler.com/copyright/" target="_blank">© MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© OpenStreetMap contributors</a>',
  style: 'https://api.maptiler.com/maps/jp-mierune-streets/style.json?key=[APIキー]'
});

// MAP読み込み
const map = L.map('map', {
    center: [35.681, 139.767],
    zoom: 14,
    zoomControl: true,
    layers: [m_streets]
});

main.js

// CSS一式を読み込んでパッケージ
import "leaflet/dist/leaflet.css";
import "mapbox-gl/dist/mapbox-gl.css";
import "./css/style.css";

// JS一式を読み込んでパッケージ
import 'mapbox-gl-leaflet';
import './js/script.js';

webpack.config.js

const webpack = require("webpack");

module.exports = {
    mode: 'production',
    entry: './_resouce/main.js',
    output: {
        path: __dirname + '/dist',
        filename: 'app.js'
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                loaders: ['style-loader', 'css-loader']
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        name: './dist/img/icon/[name].[ext]'
                    }
                }
            }
        ]
    },
    plugins: [
        new webpack.ProvidePlugin({
            L: 'leaflet',
            mapboxgl: 'mapbox-gl'
        })
    ],
    devServer: {
        contentBase: __dirname + '/dist',
        publicPath: '/',
        watchContentBase: true,
        open: true
    }
};

OpenLayers 画像

パッケージインストール

npm install ol-mapbox-style

script.js

import Map from 'ol/Map';
import View from 'ol/View';
import { fromLonLat } from 'ol/proj';
import olms from 'ol-mapbox-style';

// MIERUNE Streets読み込み
const styleJson = 'https://api.maptiler.com/maps/jp-mierune-streets/style.json?key=[APIキー]';
const map = new Map ({
    target: 'map',
    view: new View ({
        center: fromLonLat([139.767, 35.681]),
        zoom: 14
    })
});
olms(map, styleJson);



MapTilerのラスタタイルとベクトルタイルを表示することができました!

ラスタタイルを利用する場合は、Mapbox GL JS・Leaflet・OpenLayersのすべてで表示可能です。ベクトルタイルを利用する場合は、基本的にはMapbox GL JSを利用することをおすすめします。


お好きなマップライブラリでゼヒ試してみてください!



Mapbox GL JS・Leaflet・OpenLayersについて、他にも記事を書いています。よろしければぜひ。
tags - Mapbox GL JS
tags - Leaflet
tags - OpenLayers



book

Q&A