<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>各レイヤを描く</title>
<script src="https://unpkg.com/leaflet@1.3.0/dist/leaflet.js"></script>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.0/dist/leaflet.css"/>
<style>
#mapDiv{ position:absolute;top:35px;left:5px;right:5px;bottom:5px; }
</style>
<script>
function init() {
var mapobj = L.map('mapDiv', { zoomControl: false });
var mypoint = [35.196262,139.026013]; // 図中心:恩賜箱根公園
mapobj.setView(mypoint, 14); // 図中心とズームレベルを設定
var gsi= L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
{attribution: "<a href='https://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>" // 地理院タイルの出典の表示&リンク
}).addTo(mapobj); // 地理院タイルを貼付け
var gsiphoto = L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg',
{attribution: "<a href='http://portal.cyberjapan.jp/help/termsofuse.html' target='_blank'>地理院タイル</a>"}); //地理院地図の写真タイルの設定
var osm = L.tileLayer('http://tile.openstreetmap.jp/{z}/{x}/{y}.png',
{ attribution: "c<a href='http://osm.org/copyright' target='_blank'>OpenStreetMap</a> contributors" }); // オープンストリートマップのタイルの設定
var ClsGroup = L.layerGroup(); // 同心円群を layerGroupオブジェクトに纒める
var Clscenter = [35.192362,139.026346]; // 同心円中心 箱根関所跡
for (var i =0; i <5; i++) { // 4同心円描画
var r = i * 1000;
ClsGroup.addLayer(L.circle(Clscenter,{ radius:r,color:"#e55",fill:false,weight:2 }));
}
// var circleMarker = L.circleMarker([35.189311,139.024623], { radius:30,color:"#5555ff",weight:2, fill:true, fillColor:"#0000ff", opacity:0.5 }).addTo(mapobj); // 円マーカを地図に付加
var roadPts = [ [35.189311,139.024623],[35.189052,139.025025],[35.191502,139.027394],[35.192102,139.026511],[35.192273,139.026372],[35.192358,139.026340],[35.193125,139.026308],[35.193779,139.026731],[35.193893,139.026474],[35.194046,139.026544],[35.194112,139.026367],[35.194198,139.026276],[35.194754,139.025702],[35.195276,139.025837],[35.195386,139.025815],[35.195523,139.025654],[35.195637,139.025412],[35.195913,139.025756],[35.196005,139.025627],[35.196073,139.025627],[35.196358,139.025815],[35.196262,139.026013]];
var polyline = L.polyline(roadPts,{color:"#2b2",weight:5}).addTo(mapobj); // 配列データ roadPts の polyline を mapobj に追加
var arealatlons = [[35.1952632,139.0275431],[35.1955350,139.0276289],[35.1961312,139.0277040],[35.1960961,139.0279025],[35.1961882,139.0279669],[35.1962890,139.0278381],[35.1963855,139.0278167],[35.1965652,139.0278381],[35.1966529,139.0278167],[35.1969860,139.0279400],[35.1971482,139.0279454],[35.1972666,139.0279239],[35.1973849,139.0279186],[35.1976830,139.0277791],[35.1978759,139.0276074],[35.1979986,139.0275216],[35.1982529,139.0275323],[35.1983756,139.0275216],[35.1985334,139.0274143],[35.1986825,139.0273607],[35.1988666,139.0271998],[35.1990156,139.0270066],[35.1990419,139.0267921],[35.1989981,139.0265238],[35.1989367,139.0263414],[35.1988491,139.0261912],[35.1987702,139.0261376],[35.1986211,139.0260732],[35.1984019,139.0258050],[35.1981652,139.0256333],[35.1979022,139.0252364],[35.1977269,139.0251613],[35.1974989,139.0249145],[35.1973586,139.0248823],[35.1971044,139.0249682],[35.1968940,139.0249038],[35.1967011,139.0245926],[35.1964030,139.0243566],[35.1962539,139.0240455],[35.1962101,139.0237773],[35.1961575,139.0235949],[35.1956928,139.0231979],[35.1954386,139.0232408],[35.1951668,139.0234447],[35.1950353,139.0235305],[35.1949213,139.0237236],[35.1949213,139.0238309],[35.1949476,139.0239167],[35.1949038,139.0240455],[35.1949125,139.0244210],[35.1949564,139.0246677],[35.1949038,139.0250218],[35.1947898,139.0251184],[35.1945618,139.0251935],[35.1943777,139.0252686],[35.1942286,139.0253437],[35.1941936,139.0254188],[35.1941410,139.0257835],[35.1940270,139.0259123],[35.1939568,139.0259338],[35.1938516,139.0259445],[35.1939656,139.0261912],[35.1939656,139.0264165],[35.1946320,139.0270281]];
var polygon = L.polygon(arealatlons,{ color:'#2b2',weight:3,fill:true,fillColor: 'green',opacity:0.5 }); // 配列データ arealatlons の polygon を追加
L.YimgTileLayer = L.TileLayer.extend({ // 雨雲画像をオーバーレイ作業
getTileUrl: function (coords) {
//雨雲リクエスト日付の作成
var now = new Date();
var year = now.getFullYear();
var month = now.getMonth() + 1;
var day = now.getDate();
var hours = now.getHours();
var minutes = now.getMinutes();
if (month < 10) month = '0' + month;
if (day < 10) day = '0' + day;
if (hours < 10) hours = '0' + hours;
minutes *= 0.1;
minutes = Math.floor(minutes);
minutes *= 10;
if (minutes < 10) minutes = '0' + minutes;
date = "" + year + month + day + hours + minutes;
return L.Util.template(this._url, L.extend({
d: date,
x: coords.x,
y: Math.pow(2, this._getZoomForUrl() - 1) - 1 - coords.y,
z: this._getZoomForUrl() + 1
}, this.options));
}
});
// 雨雲画像をオーバーレイとしてマップに追加
var rainmap = new L.YimgTileLayer('http://weather.map.c.yimg.jp/weather?x={x}&y={y}&z={z}&size=256&date={d}', {
attribution: 'Rain map',
maxZoom: 18,
opacity: 0.6
}).addTo(mapobj);
var baseMaps = { // 各ベースレイヤをオブジェクト baseMaps に設定
"地理院地図" : gsi,
"地理院写真" : gsiphoto,
"O.S.Map" : osm
};
var overlay = { // 各ベクタレイヤをオブジェクト overlay に設定
"polyline": polyline,
// "円マーカ": circleMarker, // 今回これは layersコントロールには含めず
"等距離円": ClsGroup,
"雨雲マップ": rainmap,
"polygon": polygon
}
L.control.layers(baseMaps,overlay).addTo(mapobj); // layersコントロールを mapobj に追加
}; // init() -----------------------------------
</script>
</head>
<body onload="init()">
<header style="text-align:center;">オーバーレイ(雨雲マップ等)を追加</header>
<div id="mapDiv"></div>
</body>
</html>
【
レイヤを切替える例を表示】
( 6,7行目) Leafletを使うための JavaScriptとcssを読込み
( 9行目) css で地図表示域 'mapDiv' のスタイルを設定
(13行目) 'mapDiv' に表示する mapobj を L.mapオブジェクトに設定。
zoomControl は不使用(false)とした
(15行目) 地図変数 mapobj に setViewで地図中心の緯経度(mypoint)とズームレベルを指定
参考
(16行目) 地図データとして
地理院タイルを
レイヤし、
(17行目) それが地理院のタイルであることを表記して、
(18行目) addToメソッドで地図mapobj に取り込みます
(19-20行) 地図データとして航空写真タイルレイヤを著作表示して定義します
参考
(21-22行) 地図データとしてオープンストリートマップの地図レイヤを著作表示して定義します
(23-28行) 同心円群用にlayerGroupを定義し、中心点Clscenterより半径の異なる円群を記述します
(29行目) 円形のマーカを定義して設置します
(30-31行) 配列roadPtsをpolylineとしてmapobjに貼付け、
(32-33行) 配列arealatlonsをpolygonとしてmapobjに貼付け、
(34-58行) さらに雨雲レイヤを作成し、
参考
(60-64行) 雨雲レイヤ(rainmap)をmapobjに貼付けて、
(65-69行) まずベースレイヤ群(baseMaps)を作成し、
(70-76行) オーバーレイヤ群をoverlayとして定義します
(77行目) baseMapsとoverlayのレイヤ選択controlとを設置
(81行目) ページを読み込んだらinit()を実行します
(83行目) divタグのidを地図領域 'mapDiv'に設定