dayjournal memo

Total 973 articles!!

Try #013 – Leafletのプラグインを公開してみた

Yasunori Kirimoto's avatar

画像



画像



Leafletのプラグインを公開してみました!


Leaflet.Control.Opacityという、複数のタイルレイヤーを透過するLeafletのプラグインを構築して公開しました。


Leafletプラグイン一覧にも登録されました。


先日、お仕事でレイヤの透過バーをつけれないかとご相談がきまして、プラグインでさくっと実装できるのかと思って調べていました。しかし、それらしいプラグインがありそうでない・・・。v0.7系のみ対応で動かなかったり、イメージに合うものがありませんでした。需要あると思うんだけど。


結果的に透過バー機能をフルスクラッチで作ったのですが、動作条件がIE11かつwebサーバー無しのファイル起動という条件。なぜかIE11だけうまく動かない不具合多発。つらい・・・。時間が限られたデモ作成だったので、最終的に単レイヤかつとりあえず動くのを無理やりjQuery実装でタイムアップ。


後日、複数レイヤで透過調整できるプラグインがあったら便利で需要あるかなと改めて考えていました。心機一転新しいコードで、休日にもくもくとプラグインとして構築してみました。



example


Leaflet.Control.Opacity


./docs

index.html


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

<head>
    <meta charset="UTF-8">
    <title>Leaflet.Control.Opacity example</title>

    <script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js"></script>
    <link href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" rel="stylesheet"/>

    <script src="./plugin/Leaflet.Control.Opacity/dist/L.Control.Opacity.js"></script>
    <link href="./plugin/Leaflet.Control.Opacity/dist/L.Control.Opacity.css" rel="stylesheet" />

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

</head>
<body>

    <div id="map"></div>
    <script src="./js/script.js"></script>

</body>
</html>

./docs/css

stylesheet.css


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

#map {
    z-index: 0;
    height: 100%;
}

./docs/js

script.js


//MIERUNE Color
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."
});

//MIERUNE MONO
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."
});

//OSM
var o_std = new L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
});

//GSI Pale
var t_pale = new L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png', {
    attribution: "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>国土地理院</a>",
});

//GSI Ort
var t_ort = new L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg', {
    attribution: "<a href='http://www.gsi.go.jp/kikakuchousei/kikakuchousei40182.html' target='_blank'>国土地理院</a>",
});

//MAP
var map = L.map('map', {
    center: [35.6831925, 139.7511307],
    zoom: 13,
    zoomControl: true,
    layers: [m_mono]
});

//BaseLayer
var Map_BaseLayer = {
    "MIERUNE Color": m_color,
    "MIERUNE MONO": m_mono
};

//AddLayer
var Map_AddLayer = {
    "OSM": o_std,
    "GSI Pale": t_pale,
    "GSI Ort": t_ort
};

//LayerControl
L.control.layers(
    Map_BaseLayer, 
    Map_AddLayer, 
    {
    collapsed: false
    }
).addTo(map);

//OpacityControl
L.control.opacity(
    Map_AddLayer
).addTo(map);


book

Q&A