GUIDE4YOU - Как добавить слой и сделать его видимым в меню слоев

Мне нужно добавить дополнительный слой динамически. Слой также должен быть виден в меню слоев. Как мне подойти к этому?

Более конкретно у меня есть пример:

Проблема № 1: слой не отображается на карте. Что я не прав? Там нет ошибок JavaScript.

Проблема № 2: как я могу добавить слой в меню слоев?

createG4U('#g4u-map', 'conf/client.commented.json', 'conf/layers.commented.json').then(function (map) {
    map.asSoonAs('ready', true, function () {

        var openSeaMap_layer = new ol.layer.Tile({
            title: 'OpenSeaMap',
            name: 'OpenSeaMap',
            code: 'OpenSeaMap',
            datalayer: 'N',
            source: new ol.source.OSM({
                crossOrigin: null,
                url: 'http://t1.openseamap.org/seamark/{z}/{x}/{y}.png'
            })
        });

        alert('Visibility: ' + openSeaMap_layer.getVisible());

        map.get('api').addLayer(openSeaMap_layer);
        });
});

Заранее спасибо!

С уважением,

Сэм

2 ответа

Решение

У вас есть два варианта для достижения этой цели, основанные на разных способах создания слоя.

Во-первых: если вы хотите использовать функции API, вы можете передать layerConfigObjects, которые такие же, как объекты в файле layerConfig.json. (Они описаны здесь: https://github.com/KlausBenndorf/guide4you/blob/31e118c8f4bc5490dec92d4a03bc53fff08258fd/src/configurators/LayerFactory.js#L37).

Доступные функции API addBaseLayer (лежащие в основе карты, которые деактивируют друг друга, появляются в слое выбора), addFeatureLayer (слои поверх базовых слоев, могут быть объединены, появляются в списке слоев) и addFixedFeatureLayer (как FeatureLayers, но всегда видимый, и они не появляются в layerselector). (кстати, addLayer не является функцией API и должен выдавать ошибку JavaScript) (Вы можете посмотреть все методы API в https://github.com/KlausBenndorf/guide4you/blob/master/src/API.js)

Эти функции соответствуют добавлению тех же объектов непосредственно в layerConfig.

Еще один способ сделать это - создать слой как слой с открытыми слоями (как вы сделали в примере) и добавить его непосредственно в группу слоев, в которой он должен отображаться. Доступ к группам слоев можно получить через map.get('baseLayers'), map.get('featureLayers'), map.get('fixedFeatureLayers'), У них есть addLayer метод, и вы можете использовать их.

В любом случае, чтобы слои отображались в layerselector, вы должны вызвать map.get('UIConfigurator').configureUI() обновить пользовательский интерфейс.

Спасибо Саймон!

У меня это работает со следующим кодом:

createG4U('#g4u-map', 'conf/client.commented.json', 'conf/layers.commented.json').then(function (map) { map.asSoonAs('ready', true, function () { var openSeaMap_layer = { "id": "f0", "title": { "en": "OpenSeaMap", "de": "OpenSeaMap" }, "type": "OSM", "source": { "url": " http://t1.openseamap.org/seamark/{z}/{x}/{y}.png", "crossOrigin": null, "attribution": { "en": "© http://www.openseamap.org/\" target=\"_blank\">OpenSeaMap contributors", "de": "© http://www.openseamap.org/\" target=\"_blank\">OpenSeaMap Mitwirkende" } }, "visible": true }; map.get('api').addFeatureLayer(openSeaMap_layer); //Make the layer visible in the layermenu map.get('UIConfigurator').configureUI(); }); });

Другие вопросы по тегам