Как добавить кнопку к моему javascript, которая включает / выключает мой слой wms - PullRequest
0 голосов
/ 27 января 2020

Я новичок, поэтому мне сложно реализовать примеры кодов, которые я нахожу в Интернете. Я добавил два слоя WMS в свой javascript. Для каждого я хочу сделать кнопку для включения / выключения их на моей карте.

Я просто не знаю, какова правильная javascript кодировка для этого, так как я не могу найти ни одного, который включает WMS? Для тех, кого я нахожу, мне трудно реализовать их на моем собственном javascript .. Ниже мой javascript код

    function initMap() {

    let darkmapesri = new ol.layer.Tile({    
        source: new ol.source.XYZ({
            url: 'https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/' +
                'World_Dark_Gray_Base/MapServer/tile/{z}/{y}/{x}',
            minZoom: 3,

        }),
        title: 'Darkmap Esri',
        type: 'base',
        visible: true
    });

    map = new ol.Map({
        target: 'map',
        layers: [darkmapesri],
        view: WereldView,
        maxzoom: 2

          });




    /**
     * Elements that make up the popup.
     */
    let container = document.getElementById('popup');
    let content = document.getElementById('popup-content');
    let closer = document.getElementById('popup-closer');


    /**
     * Create an overlay to anchor the popup to the map.
     */
    let overlay = new ol.Overlay({
        element: container,
        autoPan: true,
        autoPanAnimation: {
            duration: 250
        }
    });

    map.addOverlay(overlay);

    /**
     * Add a click handler to hide the popup.
     * @return {boolean} Don't follow the href.
     */
    closer.onclick = function() {
        overlay.setPosition(undefined);
        closer.blur();
        return false;
    };

    let ImmigratieDBSource = new ol.source.ImageWMS({

        url: 'http://localhost:8080/geoserver/eng/wms',
        params: {
            'LAYERS': 'eng:aantal_immigratie_en_conflicten_per_land_per_jaar'
        }
    });
    let ImmigratieDBLayer = new ol.layer.Image({
        source: ImmigratieDBSource,
        title: 'Immigratie',
        type: 'overlay',
        visible: true

        });
     map.addLayer(ImmigratieDBLayer);

    let ConflictenDBSource = new ol.source.ImageWMS({

        url: 'http://localhost:8080/geoserver/eng/wms',
        params: {
            'LAYERS': 'eng:conflicten_per_jaar'
        }
    });
    let ConflictenDBLayer = new ol.layer.Image({
        source: ConflictenDBSource,
        title: 'Conflicten',
        type: 'overlay',
        visible: true

        });
    map.addLayer(ConflictenDBLayer);

    map.on('click', function(evt) {
        overlay.setPosition(undefined);
        if (ImmigratieDBLayer.getVisible()) {
        let viewResolution = /* @type {number} */ (WereldView.getResolution());
        let getFeatureInfoUrl = ImmigratieDBSource.getGetFeatureInfoUrl(
            evt.coordinate, viewResolution, 'EPSG:3857', { 'INFO_FORMAT': 'application/json' });
            // coordinatensysteem van de click zelf niet mijn data
        if (getFeatureInfoUrl) {

            let postData = {
                url: getFeatureInfoUrl
            };
            $.ajax({
                url: 'php/geoproxycurl.php',
                dataType: 'json',
                data: postData,
                method: 'post'

            }).done(function(data) {
                console.log(data.features[0].properties.id)
                $("#landnaam").html(data.features[0].properties.landnaam);
                $("#aantal_immigratie").html(data.features[0].properties.aantal_immigratie);
                $("#aantal_conflicten").html(data.features[0].properties.aantal_conflicten);
                overlay.setPosition(evt.coordinate);

            });
        }}

    });


//    map.on('singleclick', function(evt) {
//        let viewResolution = /** @type {number} */ (WereldView.getResolution());
//        let getFeatureInfoUrl = ImmigratieDBSource.getGetFeatureInfoUrl(
//            evt.coordinate, viewResolution, 'EPSG:3857', { 'INFO_FORMAT': 'application/json' });
//        if (getFeatureInfoUrl) {
//            // document.getElementById('info').innerHTML =
//            //      '<iframe seamless src="' + url + '"></iframe>';
//            console.log(getFeatureInfoUrl);
//            $.ajax({
//                url: getFeatureInfoUrl,
//                dataType: 'json'
//            }).done(function(data) {
//                console.log(data.features[0].properties);
//                $("#landnaam").html(data.features[0].properties.landnaam);
//                $("#aantal_immigratie").html(data.features[0].properties.aantal_immigratie);
//                $("#aantal_conflicten").html(data.features[0].properties.aantal_conflicten);
//            
//                //           content.innerHTML = data.features[0].properties.bouwjaar;
//                overlay.setPosition(evt.coordinate);
//            
//            });
//        }
//    });

//     map.on('click', function(evt) {
//         let selFeature = map.forEachFeatureAtPixel(evt.pixel, function(feature) {
//             return feature
//         });
//         if (selFeature) {
//             content.innerHTML = "Bodemtype: " + selFeature.values_.bodemtype;
//             overlay.setPosition(evt.coordinate);
//         } else {
//             overlay.setPosition(undefined);
//             overlay.blur;
//         }
//     });


//    let postData = {
//        url: 'http://gmd.has.nl:8080/geoserver/dyla/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=dyla:bodemkaart&outputFormat=application%2Fjson&srsName=EPSG:4326'
//    };

//    $.ajax({
//        url: 'php/geoproxycurl.php',
//        dataType: 'json',
//        data: postData,
//        method: 'post'
//    }).done(function(data) { 
//        vectorSource.addFeatures(new ol.format.GeoJSON().readFeatures(data, {
//            dataProjection: 'EPSG:4326',
//            featureProjection: 'EPSG:3857'
//            }));
//    });

    // var layerSwitcher = new ol.control.LayerSwitcher({
    //     tipLabel: 'Légende', // Optional label for button
    //     groupSelectStyle: 'children' // Can be 'children' [default], 'group' or 'none'
    // });
    // map.addControl(layerSwitcher);

//    buildLayerSwitcher();
//    
//    $("input[name='basemapRadio']").on('change', function() { // als er op een radiobutton geklikt is
//        let selectedLayer = $("input[name='basemapRadio']:checked").val(); // welke laag is geselecteerd?
//        $.each(mapLayers, function(i, layer) { // doorloop alle lagen van de kaart
//            if (i == selectedLayer) { // als de laag de geselecteerde laag is
//                layer.setVisible(true); // maak de laag zichtbaar
//            } else { // als de laag niet de geselecteerde laag is
//                if (layer.values_.type == 'base') { // en het is een basemap
//                    layer.setVisible(false); // maak hem dan niet zichtbaar
//                }
//            }
//        });
//    });

} //end of Initmap



function switchOverlay(layerNr) {
    // aan- of uitzetten van een laag als checkbox verandert
    if (mapLayers[layerNr].values_.visible) { // is de laag zichtbaar?
        mapLayers[layerNr].setVisible(false); // zet de laag uit

    } else { // anders
        mapLayers[layerNr].setVisible(true); // zet de laag aan
    }
}

function buildLayerSwitcher() {
    $('#overlayselectlist').html(""); // leegmaken van de overlay lagenswitcher op de pagina
//    $('#basemapselectlist').html("");
    mapLayers = map.getLayers().getArray(); // ophalen van alle lagen van e kaart
    $.each(mapLayers, function(i, layer) { // voor elke laag
        if (layer.values_.type == 'overlay'){ // als het een overlag-laag is
           // opbouwen van de HTML code voor een checkbox
            let liTekst = '<li><input type="checkbox" onchange="switchOverlay(';
            liTekst += i + ')" id="overlay' + i + '"';
            if (layer.values_.visible){ //als de laag zichtbaar is moet de checkbox aangevinkt zijn.
                liTekst += " checked"
            }
            liTekst += '><label for="overlay' + i + '">' + layer.values_.title + '</label>' + '</li>' // zorgen dat er ook op de tekst geklikt kan worden om de checkbox aan- of uit te vinken
            $('#overlayselectlist').append(liTekst); // voeg de checkbox toe aan de pagina 
        } 
//        else {
//            if (layer.values_.type == 'base') { // als het een basemap-laag is
//                // opbouwen van de HTML code voor een radio button
//                let liTekst = '<li><input type="radio" name="basemapRadio"';
//                liTekst += ' id="base' + i + '" value="' + i + '"';
//                if (layer.values_.visible) { //als de laag zichtbaar is moet de radio button aangevinkt zijn.
//                    liTekst += " checked"
//                }
//                liTekst += '><label for="base' + i + '">' + layer.values_.title + '</label>' + '</li>' // zorgen dat er ook op de tekst geklikt kan worden om de radio button aan- of uit te vinken
//                $('#basemapselectlist').append(liTekst); // voeg de radio button toe aan de pagina 
//            }
//        }
    });


} 
...