ソースファイルを表示
sample/sample_crs_grid.htm
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1" />
<title>Leafletでグリッドを表示</title>
<link rel="stylesheet" href="js/leaflet.css" />
<script src="js/leaflet.js"></script>
<style type="text/css">
#map_container {
background: #fff7e7;
position:absolute;
top:0; left:0; right:0; bottom:0;
cursor: default;
}
#btn_container {
position:absolute;
left:12px; bottom:12px;
z-index: 1000;
}
</style>
<script type="text/javascript" charset="UTF-8">
var map; // leaflet地図
var bound; // 表示領域(全体表示で表示される範囲)
var grid = null; // グリッド表示レイヤ
function init() { // 初期処理
map = L.map('map_container', {crs: L.CRS.Simple, minZoom: 5, maxZoom: 12, zoomControl: false});
L.control.zoom({position:'bottomright'}).addTo(map); // ズーム制御
bound = L.latLngBounds([-1.396, -3.266], [5.699, 8.133]); // 表示領域の設定
map.fitBounds(bound);
L.imageOverlay('img/plan01.png', bound).addTo(map); // 背景画像の表示
dispGrid(0.909); // グリッド表示(グリッド間隔)
}
function dispGrid(gridLen) { // グリッド表示
if (grid != null) {
grid.remove(); // グリッド表示中の場合は、グリッドを消去
grid = null;
return;
}
let gridCol1 = '#5fef5f'; // 枠の色
let gridCol2 = '#5f5fef'; // 基本色
let gridCol3 = '#ef5f5f'; // 5本毎の色
let yMin = bound.getSouth();
let xMin = bound.getWest();
let yMax = bound.getNorth();
let xMax = bound.getEast();
let yLen = yMax - yMin;
let xLen = xMax - xMin;
grid = L.layerGroup();
L.polyline([ // 枠の表示
[yMin, xMin], [yMin, xMax], [yMax, xMax], [yMax, xMin], [yMin, xMin]
], {color: gridCol1, weight: 1, opacity: 0.5}).addTo(grid);
let gyMin = Math.floor((yMin - yLen * 2) / gridLen) * gridLen;
let gxMin = Math.floor((xMin - xLen * 2) / gridLen) * gridLen;
let gyMax = Math.floor((yMax + yLen * 2) / gridLen) * gridLen;
let gxMax = Math.floor((xMax + xLen * 2) / gridLen) * gridLen;
for (let y = gyMin; y <= gyMax; y += gridLen) {
let gridCol = (y % 5 == 0) ? gridCol3 : gridCol2;
L.polyline([ // 横線の表示
[y, gxMin], [y, gxMax]
], {color: gridCol, weight: 1, opacity: 0.5}).addTo(grid);
}
for (let x = gxMin; x <= gxMax; x += gridLen) {
let gridCol = (x % 5 == 0) ? gridCol3 : gridCol2;
L.polyline([ // 縦線の表示
[gyMin, x], [gyMax, x]
], {color: gridCol, weight: 1, opacity: 0.5}).addTo(grid);
}
grid.addTo(map);
}
</script>
</head>
<body onload="init()">
<div id="map_container"></div>
<div id="btn_container">
<input type="button" onclick="map.fitBounds(bound)" value="全体表示" />
<input type="button" onclick="dispGrid(0.909)" value="Grid表示" />
</div>
</body>
</html>