<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
    <!-- 引入 leaflet-gpx 插件的 CSS 文件 -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet-gpx@1.7.0/gpx.css" />
    <!-- 引入 Leaflet 自带定位控件的 CSS 文件 -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet.locatecontrol@0.74.0/dist/L.Control.Locate.min.css" />
    <!-- 引入 Font Awesome 图标库 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
    <!-- 引入 leaflet-gpx 插件的 JavaScript 文件 -->
    <script src="https://unpkg.com/leaflet-gpx@1.7.0/gpx.js"></script>
    <!-- 引入 Leaflet 自带定位控件的 JavaScript 文件 -->
    <script src="https://unpkg.com/leaflet.locatecontrol@0.74.0/dist/L.Control.Locate.min.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
            font-family: sans-serif;
        }

        #map {
            /* 修改为固定高度 600px */
            height: 400px;
            width: 100%;
        }

        #ol-logo {
            position: absolute;
            bottom: 6px;
            left: 6px;
            z-index: 999;
        }

        #ol-logo img {
            width: 100px;
        }

       .ol-zoom {
            right:.5em;
            left: unset;
        }

       .chess {
            background:
                repeating-conic-gradient(
                    #fff 0deg 90deg,
                    #e6e6e6 0deg 180deg)
                0 0/40px 40px round;
        }

        .leaflet-control-attribution {
        display: none !important;
    }
    </style>
</head>

<body>
    <div id="map"></div>
    <script>
        // 将初始位置设置为北京,经纬度为 [39.916431,116.390767],缩放级别设为 13(也可以设置成你自己所需要的初始位置)
        var map = L.map('map').setView([39.916431,116.390767], 13);

        // 第一个图层
        var topoLayer = L.tileLayer('https://api.maptiler.com/maps/landscape/256/{z}/{x}/{y}@2x.png?key=你的API密钥', {
            attribution: "",
            id: 'topo - v2',
            accessToken: '你的API密钥',
            maxZoom: 18
        });

        // 第三个图层
        var satelliteLayera = L.tileLayer('https://api.maptiler.com/maps/backdrop/256/{z}/{x}/{y}@2x.png?key=你的API密钥', {
            attribution: "",
            id:'backdrop - v2',
            accessToken: '你的API密钥',
            maxZoom: 18
        });

        // 第二个图层
        var satelliteLayer = L.tileLayer('https://api.maptiler.com/maps/satellite/{z}/{x}/{y}@2x.jpg?key=你的API密钥', {
            attribution: "",
            id:'satellite - v2',
            accessToken: '你的API密钥',
            maxZoom: 18
        });

        // 加载 GPX 文件
        var gpx = new L.GPX('你的gpx文件路径.gpx', {
            async: true,
            marker_options: {
                startIconUrl: 'https://unpkg.com/leaflet-gpx@1.7.0/pin-icon-start.png',
                endIconUrl: 'https://unpkg.com/leaflet-gpx@1.7.0/pin-icon-end.png',
                shadowUrl: 'https://unpkg.com/leaflet-gpx@1.7.0/pin-shadow.png'
            }
        }).on('loaded', function (e) {
            map.fitBounds(e.target.getBounds());
        });
        //显示轨迹
        gpx.addTo(map);

        //显示鼠标点击经纬度
        var popup = L.popup();
        function onMapClick(e) {
            var lat = e.latlng.lat.toFixed(6);
            var lng = e.latlng.lng.toFixed(6);
            popup
               .setLatLng(e.latlng)
               .setContent(`纬度: ${lat}, 经度: ${lng}`)
               .openOn(map);
        }
        map.on('click', onMapClick);

        // 添加第一个图层到地图
        topoLayer.addTo(map);

        // 创建图层控制
        var baseLayers = {
            "等高线": topoLayer,
            "地势图": satelliteLayera,
            "卫星图": satelliteLayer
        };

        var overlayLayers = {
            "GPX轨迹": gpx
        };

        L.control.layers(baseLayers, overlayLayers).addTo(map);

        // 添加 Leaflet 自带的定位控件
        L.control.locate({
            position: 'topleft', // 定位控件的位置,可根据需要调整
            drawCircle: true, // 是否绘制表示精度的圆
            follow: false, // 是否在定位后跟随用户位置移动地图
            setView: false, // 是否在定位后自动设置地图视图
            keepCurrentZoomLevel: false, // 是否保持当前缩放级别
            markerStyle: {
                weight: 1,
                opacity: 0.8,
                fillOpacity: 0.8
            },
            circleStyle: {
                weight: 1,
                clickable: false
            },
            icon: 'fa-solid fa-location-arrow', // 使用 Font Awesome 图标
            iconLoading: 'fa-solid fa-spinner fa-spin',
            metric: true, // 使用公制单位
            strings: {
                title: "双击显示你的大概位置",
                popup: "你在这里,误差约 {distance} {unit}",
                outsideMapBoundsMsg: "你似乎在地图边界之外"
            },
            locateOptions: {
                maxZoom: 18
            }
        }).addTo(map);
    </script>
</body>

</html>
此作者没有提供个人介绍。
最后更新于 2025-04-19