Newer
Older
TADOKOROc1231429 / menseki.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
    <script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
    <title>Leaflet Map with Area Calculation</title>
    <style>
        body {
            margin: 0;
            font-family: Arial, sans-serif;
        }
        #map {
            height: 100vh; /* マップの高さを画面全体に設定 */
        }
        #info {
            position: absolute;
            top: 10px;
            left: 10px;
            background: rgba(255, 255, 255, 0.8); /* 半透明の背景 */
            border: 1px solid #ccc; /* 薄い灰色のボーダー */
            border-radius: 5px; /* 角を丸くする */
            padding: 10px;
            z-index: 1000;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); /* 軽い影を付ける */
        }
        #info h2 {
            margin: 0; /* ヘッダーのマージンをリセット */
            font-size: 16px; /* フォントサイズ */
        }
    </style>
</head>
<body>

<div id="info"><h2>今〇〇平方メートルです</h2></div>
<div id="map"></div>

<script>
    const map = L.map('map').setView([38.25, 139.83], 8); // 酒田の中心座標
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        maxZoom: 19,
        attribution: '© OpenStreetMap'
    }).addTo(map);

    const markers = [];
    
    map.on('click', function(e) {
        const marker = L.marker(e.latlng).addTo(map);
        markers.push(e.latlng);
        marker.on('click', function() {
            map.removeLayer(marker);
            markers.splice(markers.indexOf(e.latlng), 1);
            calculateArea();
        });
        calculateArea();
    });

    function calculateArea() {
        if (markers.length < 3) {
            document.getElementById('info').innerText = `今${0}平方メートルです`;
            return;
        }

        const latlngs = markers.map(latlng => [latlng.lat, latlng.lng]);
        const area = L.GeometryUtil.geodesicArea(latlngs); // 面積計算
        const areaInSquareMeters = Math.round(area);

        document.getElementById('info').innerText = `今${areaInSquareMeters}平方メートルです`;

        if (areaInSquareMeters >= 602980000) { // 酒田の面積602.98平方キロメートル
            alert("クリア!");
            // リセットする場合は以下を追加
            markers.length = 0; // マーカーリストをクリア
            map.eachLayer(function(layer) {
                if (layer instanceof L.Marker) {
                    map.removeLayer(layer);
                }
            });
            document.getElementById('info').innerText = `今${0}平方メートルです`;
        }
    }
</script>

</body>
</html>