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();
});
});