Почему мои контрольные флажки не установлены? - PullRequest
0 голосов
/ 15 апреля 2019

Я создал карту с элементом управления с флажками для некоторых полигонов, маркеров.Все данные читаются из геойсон-файла.Флажки не отмечены, когда я пытаюсь собрать несколько геометрических объектов в одну контрольную группу.В этом примере три верхних маркера и многоугольника должны показываться / исчезать ВМЕСТЕ, когда используется второй флажок.

Все работает нормально, если флажки были отмечены первый раз вручную.Это также работает нормально, если я использую ОДИН флажок для каждого объекта геометрии (что не является моим намерением).Объекты геометрии с ОДНОЙ ЖЕ функцией feature.property.control должны реагировать вместе.Вы не можете увидеть пример здесь: https://aachen -hat-energie.de / test_ww / test_control.htm (пожалуйста, используйте полноэкранный режим)

<html>
<head>
<link rel="stylesheet" href="../js/Leaflet/leaflet.css" >
<script src="../js/Leaflet/leaflet.js" ></script>
<script src="../js/Leaflet/leaflet-bing-layer.min.js"></script>
<script src="../js/Leaflet/jquery-3.3.1.min.js"></script>
<script src="../js/Leaflet/Leaflet.fullscreen.min.js"></script>
<link href="../js/Leaflet/leaflet.fullscreen.css" rel="stylesheet" >
<script>
'use strict';
var BING_KEY = "AplTrT4uzwlmfcERFFQu_NqDycERC_Er0qGYzZhIqrDfq-naYCsUr1kbbKRUqhq1";
var osmUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';

function show_karte(div_id, mittelpunkt, zoom, overlay){
var osmLayer = L.tileLayer(osmUrl, {maxZoom: 20, attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'});
var mittelpunkt = [mittelpunkt[1], mittelpunkt[0]]
var map = L.map(div_id,{fullscreenControl: true, layers: [osmLayer]}).setView(mittelpunkt, zoom);

var controlGroup = {};
var lastControl = {};
var controls = L.control.layers(null, controlGroup).addTo(map);

function onEachFeature(feature, layer) { 
    layer.addTo(map); 
    if (feature.properties.control != null)
            {if (feature.properties.control != lastControl)
                {controlGroup = {};
                 controlGroup = L.layerGroup(); // auch L.FeatureGroup()
                 controlGroup.addLayer(layer);
                 controls.addOverlay(controlGroup, feature.properties.control);
                 //controls.addOverlay(layer, feature.properties.control);
                }
                else
                {controlGroup.addLayer(layer); 
                };
                lastControl = feature.properties.control;
            };
    };

$.ajax(overlay).done(function(data) {
    var data = JSON.parse(data);
    L.geoJson(data, 
            {onEachFeature: onEachFeature
            });
    });

L.control.scale({imperial: false, position: "topleft"}).addTo(map);
};  
</script>
</head>

<body>
<div id="map" style="width:450px; height: 700px;">
<script  type="text/javascript"> show_karte("map",[6.026173,50.816022],13,"../wind/neueFlaechen.geojson"); </script>
</div>
</body>
</html>

1 Ответ

0 голосов
/ 23 апреля 2019

В функции onEachFeature отсутствует controlGroup.addTo (map).

...