Leafletのプラグイン「BeautifyMarker」使用して、マーカーのアイコンを変更します。
今回は、「Font Awesome」「Glyphicons」「Google Material Icon」のアイコンを使用します。
実装すると以下のようになります。
目次
1.全体のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
<!DOCTYPE html> <html> <head> <title>Leaflet Plugin BeautifyMarker</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin=""> <script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script> <!-- plugin --> <link rel="stylesheet" href="css/leaflet-beautify-marker-icon.css"> <script src="js/leaflet-beautify-marker-icon.js"></script> <!-- Font Awesome --> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous"> <!-- Glyphicons --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Google Material Icons --> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!-- plugin --> <style type="text/css"> <!-- #mapid { height: 400px; width: 600px} --> </style> </head> <body> <div id="mapid"></div> <script> // Mapの基本設定 var map = L.map('mapid').setView([35.7102, 139.8132], 15); L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { maxZoom: 18, attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' }).addTo(map); // Font Awesome fa-utensils(iconShape : circle) options = { prefix: 'fa' ,icon: 'utensils' ,borderColor: '#8D208B' ,textColor: '#8D208B' }; L.marker([35.7101,139.8107], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Font Awesome</p><p>iconShape : circle</p>"); // Font Awesome fa-utensils(iconShape : marker) options = { prefix: 'fa' ,icon: 'utensils' ,iconShape: 'marker' ,borderColor: '#8D208B' ,textColor: '#fff' ,backgroundColor: '#8D208B' }; L.marker([35.7081,139.8107], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Font Awesome</p><p>iconShape : marker</p>"); // Glyphicons glyphicon-lock(iconShape : circle) options = { prefix: 'glyphicon' ,icon: 'lock' ,borderColor: '#05b1e4' ,textColor: '#05b1e4' ,innerIconStyle: 'margin-top: 2px; margin-left: 1px;' }; L.marker([35.7101,139.8127], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Glyphicons</p><p>iconShape : circle</p>"); // Glyphicons glyphicon-lock(iconShape : marker) options = { prefix: 'glyphicon' ,icon: 'lock' ,iconShape: 'marker' ,borderColor: '#05b1e4' ,textColor: '#fff' ,backgroundColor: '#05b1e4' ,innerIconStyle: 'margin-top: 2px; margin-left: -5px;' }; L.marker([35.7081,139.8127], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Glyphicons</p><p>iconShape : marker</p>"); // Google Material Icons(circle) var options = { html: '<i class="material-icons" style="font-size:15px; border:2px solid #33a681; border-radius:16px; background-color:#fff; padding:2px;">shopping_cart</i>' ,iconShape: 'circle' ,textColor: '#33a681' }; L.marker([35.7101,139.8147], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Google Material Icons</p><p>circle</p>"); // Google Material Icons(marker) var options = { html: '<i class="material-icons" style="font-size: 17px; margin-top: 5px; margin-left: -1px;">shopping_cart</i>' ,iconShape: 'marker' ,iconSize: [27, 27] ,borderColor: '#33a681' ,textColor: '#fff' ,backgroundColor: '#33a681' }; L.marker([35.7081,139.8147], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Google Material Icons</p><p>marker</p>"); </script> </body> </html> |
2.解説
地図を描画するまでの解説は、leaflet入門1に記載しています。
2−1.プラグインの読み込み
BeautifyMarker の本体は GitHubからダウンロードできます。
また、今回使用する「Font Awesome」「Glyphicons」「Google Material Icon」はCDNを使用してアイコンを読み込みますが、各サイトからダウンロードすることもできます。
1 2 3 4 5 6 7 8 9 10 |
<!-- plugin --> <link rel="stylesheet" href="css/leaflet-beautify-marker-icon.css"> <script src="js/leaflet-beautify-marker-icon.js"></script> <!-- Font Awesome --> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous"> <!-- Glyphicons --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> <!-- Google Material Icons --> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <!-- plugin --> |
2−2.BeautifyMarkerの設定(Font Awesome、Glyphicons)
L.markerのオプション「icon」に L.BeautifyIcon.icon オブジェクトを設定します。
使用するマーカーは、L.BeautifyIcon.icon のオプション で設定します。
以下は、Font Awesome を使用する場合のコードの抜粋です。
1 2 3 4 5 6 7 8 9 10 |
// Font Awesome fa-utensils(iconShape : marker) options = { prefix: 'fa' ,icon: 'utensils' ,iconShape: 'marker' ,borderColor: '#8D208B' ,textColor: '#fff' ,backgroundColor: '#8D208B' }; L.marker([35.7081,139.8107], { icon: L.BeautifyIcon.icon(options), draggable: true }).addTo(map).bindPopup("<p>Font Awesome</p><p>iconShape : marker</p>"); |
L.BeautifyIcon.iconのオプション
prefix: Font Awesomeの場合は「fa」を指定。Glyphiconsの場合は「glyphicon」を指定。
icon: アイコンを指定。(fa-utensilsの場合は、「utensils」を指定)
iconShape: アイコンの形(circle, marker, circle-dot, rectangle, rectangle-dot, doughnut)
borderColor: 線の色。
textColor: フォントカラー。
backgroundColor: 背景色。
2−3.BeautifyMarkerの設定(Google Material Icon)
「Font Awesome」「Glyphicons」は、L.BeautifyIcon.iconのオプションの「prefix」「icon」で使用するアイコンを指定しましたが、Google Material Icon は、「html」オプションで直接 html を使用します。
1 2 3 4 5 |
var options = { html: '<i class="material-icons" style="font-size:15px; border:2px solid #33a681; border-radius:16px; background-color:#fff; padding:2px;">shopping_cart</i>' ,iconShape: 'circle' ,textColor: '#33a681' }; |
アイコンに適用するスタイルも、 htmlで指定します。
Demoで表示される通り、iconShape が Circle の場合、ポップアップの位置がズレてしまいます。Markerの場合は、正しい位置に表示されます。
3.まとめ
BeautifyMarker でマーカーのアイコンを変更しました。
「Font Awesome」「Glyphicons」は BeautifyMarker のオプションで簡単にアイコンを表示することができました。
「Google Material Icon」は
・ポップアップがズレてしまう。
・スタイルを調整するのに、CSSを指定する必要がある。
と扱うのに若干手間がかかってしまうため、メインは「Font Awesome」「Glyphicons」を使用してアイコンが足りない場合は、「Google Material Icon」を使用するのが無難かもしれません。
その他のマーカー系のおすすめプラグインは、こちらに記載しています。
Leaflet入門|おすすめプラグイン(マーカーのカスタマイズ)
マーカー系を含む全てのおすすめプラグインは、こちらに記載しています。
Leaflet入門|おすすめプラグイン