dayjournal memo

Total 974 articles!!

Leaflet #038 – レイヤの画面連動

Yasunori Kirimoto's avatar

Leafletでレイヤの画面連動を実装するには、「Leaflet.Sync」と言うプラグインを利用すると便利です。 ※Leafletのバージョンは1.0.0以上を利用する必要があります。


index.html


<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>Leaflet Sample</title>

    <script src="./library/leaflet-1.2.0/leaflet.js"></script>
    <link href="./library/leaflet-1.2.0/leaflet.css" rel="stylesheet"/>

    <link href="./css/stylesheet.css" rel="stylesheet"/>

    <script src="./plugin/Leaflet.Sync/L.Map.Sync.js"></script>

</head>
<body>

    <div id="map_left"></div>
    <div id="map_right"></div>
    <script src="./js/script.js"></script>

</body>
</html>

stylesheet.css


html, body {
    height: 100%;
    padding: 0;
    margin: 0;
}

#map_left {
    float: left;
    width: 49.8%;
    height: 100%;
}

#map_right {
    float: right;
    width: 49.8%;
    height: 100%;


script.js


var m_color = new L.tileLayer('https://tile.mierune.co.jp/mierune/{z}/{x}/{y}.png', {
    attribution: "Maptiles by <a href='http://mierune.co.jp/' target='_blank'>MIERUNE</a>, under CC BY. Data by <a href='http://osm.org/copyright' target='_blank'>OpenStreetMap</a> contributors, under ODbL."
});

var m_mono = new L.tileLayer('https://tile.mierune.co.jp/mierune_mono/{z}/{x}/{y}.png', {
    attribution: "Maptiles by <a href='http://mierune.co.jp/' target='_blank'>MIERUNE</a>, under CC BY. Data by <a href='http://osm.org/copyright' target='_blank'>OpenStreetMap</a> contributors, under ODbL."
});

var lat = 35.6831925;
var lng = 139.7511307;

var map_left = L.map('map_left', {
    layers: [m_color],
    center: [lat, lng],
    zoom: 14,
    zoomControl: true
});

var map_right = L.map('map_right', {
    layers: [m_mono],
    center: [lat, lng],
    zoom: 14,
    zoomControl: true
});

map_left.sync(map_right, {syncCursor: true});
map_right.sync(map_left, {syncCursor: true});

index.htmlを実行すると下記のようにブラウザで表示されます。

example


Map分のdivタグを作成:


<div id="map_left"></div>
<div id="map_right"></div>

Mapのレイアウトを作成:


#map_left {
    float: left;
    width: 49.8%;
    height: 100%;
}

#map_right {
    float: right;
    width: 49.8%;
    height: 100%;


Mapをそれぞれ宣言:


var map_left = L.map('map_left', {
    layers: [m_color],
    center: [lat, lng],
    zoom: 14,
    zoomControl: true
});

var map_right = L.map('map_right', {
    layers: [m_mono],
    center: [lat, lng],
    zoom: 14,
    zoomControl: true
})

Mapを連動: カーソルON:


map_left.sync(map_right, {syncCursor: true});
map_right.sync(map_left, {syncCursor: true})


レイヤの画面連動を実装したい時に便利なプラグインです。2画面以上の連動も可能です。



book

Q&A