Leafletでプロット、線引き

MAP(地図)

 Leaflet(leafletjs.com/)使いやすい。

スポンサーリンク

プロット、線引き

<div id = "map"></div>

で表示(位置決め)。

 表示させる内容は、以下のJavaScript。

<script>
var map = L.map('map').setView([34.50 , 150.00] , 3);
L.tileLayer(
'https://tile.openstreetmap.jp/{z}/{x}/{y}.png',
{attribution: 'Map data © <a href="https://openstreetmap.jp">OpenStreetMap</a>'})
.addTo(map);
L.control.scale()
.addTo(map);

L.marker([13.47 , 144.75])
.addTo(map)
.bindPopup("ぐあむ")

L.circle([34.50 , 131.47] ,100000,{
color :'red'
})
.addTo(map)
.bindPopup("あぶ")

var marker2 = L.icon({
iconUrl:'fune.png',
iconSize:[25,25]
});
L.marker([39.72 , 140.10],
{icon:marker2})
.addTo(map)
.bindPopup("あきた")

L.polyline([[13.47 , 144.75],[34.50 , 131.47]],{ "color": "green", "weight": 10, "opacity": 0.5})
.addTo(map);
L.polyline([[21.31 , 202.15],[39.72 , 140.10]],{ "color": "green", "weight": 10, "opacity": 0.5})
.addTo(map);
L.polyline([[13.47 , 144.75],[43.73 , 124.63]],{ "color": "red", "weight": 4, "opacity": 0.5})
.addTo(map);
L.polyline([[21.31 , 202.15],[43.73 , 124.63]],{ "color": "red", "weight": 4, "opacity": 0.5})
.addTo(map);
</script>

オープンストリートマップ OpenStreetMapにプロット、線引き   

 スクリプトの上から順に

 表示位置セット。ズームレベル3。

 タイルレイヤー L.tileLayer()で地図の種類指定。引用元も記載。
 OpenStreetMapの他、国土地理院の地図など色々選べる。

 L.control.scale()でスケール追加。

 L.marker()でマーカーをプロット。クリックすると「ぐあむ」と表示。
 L.icon()を使って別のアイコン(ここではfune.png)に変えることもできる。

 L.circle()で赤色の円をプロット。中心の緯度・経度の次の値は半径(m)。100000(=100km)は大きすぎた。

 半径の小さい円は、スマートフォンのタップだと相当拡大しないとポップアップしないので、
 小縮尺の地図はL.circle()よりL.circleMarker()のほうが良さそう。
 高緯度も円の大きさが不揃いになっていくので、L.circleMarker()のほうが良さそう

 L.circleMarker()の半径 radiusはメートル mではなくピクセル pixel。
 mだと画面の拡大・縮小とともに大小変化するが、pixelならば不変。

 L.polyline()で線引き。opacityは透明度。
 赤色の延長線は、2直線の方程式から交点の座標を計算して……なんてスマートな方法ではなく、このへんかな、とあたりをつけて緯度、経度の値をいじっただけ。

 緯度1°の距離と経度1°の距離は同じではないし、球面なので2地点の距離も三平方の定理で、というわけにはいかない。

 オンライン地図は、埋め込みすぎると重いページになる。
 Leafletはサクサク動くが、JavaScriptの処理次第では重いページになる。
 重い場合、結果だけ表示できればよいので、Pythonをいじってみたり、模索中。

スポンサーリンク
ふシゼン