Как вы можете поместить листовые полилинии в несколько панелей? - PullRequest
0 голосов
/ 11 декабря 2019

Что я делаю не так? Намерение состоит в том, чтобы иметь несколько (скажем, 6) листовых панелей, каждая из которых содержит множество маркеров и полилиний, чтобы панели могли быть скрыты независимо. Вот упрощенная программа, показывающая всего две строки и маркеры в jsfiddle . Проблема в том, что все полилинии сгруппированы в одном SVG и спрятаны вместе. Каждая панель в этом примере должна содержать одну полилинию и один маркер.

Я не хочу удалять полилинии с карты, чтобы скрыть их, тогда воссоздание их не будет работать хорошо.

При необходимости полилинии можно нарисовать, используя D3 в верхней части листовки, но я надеялся, что все это можно сделать в листовке. Спасибо!

JS:

    'use strict';

    document.addEventListener("DOMContentLoaded", function(event) { 
    var map = L.map('map').setView([30.5, -0.09], 2); 
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);

    var pane1 = map.createPane('pane1');
    var pane2 = map.createPane('pane2');
    function hide(pane) {
        pane.style.display = 'none';
    }
    function show(pane) {
        pane.style.display = '';
    }

    let icon = new L.Icon.Default();

    function dr(pane, latlng){
        L.polyline([[45.421, -75.697], latlng], {
            weight: 2,
            pane: pane
        }).addTo(map);

        L.marker(latlng, {
            icon: icon,
            pane: pane
        }).addTo(map);
    }

    // define two locations with lines from Ottawa
    dr(pane1, [ 42.3732216, -72.5198537 ]);
    dr(pane2, [ 35.9606384, -83.9207392 ]);

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    async function loop(){
        for( var i = 0; i<100; i++){
            hide(pane1);
            show(pane2);
            await sleep(1000);

            hide(pane2);
            show(pane1);
            await sleep(1000);
        }
    }
    loop();}); 

HTML:

<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css" integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ==" crossorigin=""/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.6.0/leaflet-src.js" integrity="sha256-wc8X54qvAHZGQY6nFv24TKlc3wtO0bgAfqj8AutTIu0=" crossorigin="anonymous"></script>
    <style>
        html, body {
            height: 100%;
            margin: 0;
        }
        #map {
            width: 900px;
            height: 500px;
        }
    </style>
</head>
<body>
  <div id='map'></div>
</body>
</html>
<script src="c.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...