У меня есть карта с возможностью выбора некоторых слоев для отображения. Слои содержатся в переменных «слоях» следующийOpenlayers3 показывает слои, выбирая конкретные функции
var layers = [
new ol.layer.Tile({
source: new ol.source.OSM(),
name: 'OpenStreetMap',
visible: true,
}),
new ol.layer.Vector({
source: new ol.source.Vector({
format: new ol.format.GeoJSON({
defaultDataProjection: 'EPSG:4326'
}),
url: 'repository/prova5.geojson',
attributions: [
new ol.Attribution({
html: 'Prova 5'
})
]
}),
name: 'Prova 5',
visible: false,
}),
new ol.layer.Vector({
source: new ol.source.Vector({
format: new ol.format.GeoJSON({
defaultDataProjection: 'EPSG:4326'
}),
url: 'repository/prova7.geojson',
attributions: [
new ol.Attribution({
html: 'Prova 7'
})
]
}),
name: 'Prova 7',
visible: false,
})
];
При нажатии на флажок в меню в стороне, я могу показать каждый отличительный слой, установив видимость от ложного к истине. Таким образом, здесь все работает нормально.
В этом проблема. Мне также нужно в меню в сторону одного выбора, который дает мне возможность показывать слои в соответствии с одной единственной функцией, присутствующей в файлах geojson. Предположим, что эта функция - «Виды» (она содержится в моих файлах geojson).
Я попытался написать выбор в простом HTML в качестве пробной версии, а через jQuery я получил выбранное значение, соответствующее виду, которое я хочу. Это событие должно вызвать функцию forEachFeature, чтобы получить функции в файле geojson (не работает ли это как выборка массива?); после получения этой функции я хочу сравнить ее с моим выбранным значением. Затем он должен получить все источники источников, которые содержат выбранные виды, и помещать их во временный слой, который становится видимым.
код выглядит следующим образом, но это не работает:
$(document).ready(function(){
var selectedSpecies = '';
$("select.species").change(function(){
var selectedSpecies = $(".species option:selected").val();
console.log(selectedSpecies);
});
if (selectedSpecies) {
layers.getSource().forEachFeature(function(feature){
var geojsonAnimal = feature.get("Species");
console.log('Species ' + geojsonAnimal); //serve per il debug
if(geojsonAnimal == selectedSpecies){
console.log('Trovato animale');
tmpLayer.getSource().addFeature(feature);
} else {
console.log('Non trovato!');
}
});
}
// Create a blank tmp layer
var tmpLayer = new ol.layer.Vector({
source: new ol.source.Vector()
});
map.addLayer(tmpLayer);
if(tmpLayer.getSource().length > 0){
tmpLayer.setVisible(true);
}
});
На самом деле я могу видеть в консоли выбранной переменной, но, например, я не могу видеть ничего, даже с помощью команды
console.log('Species ' + geojsonAnimal);
Этот факт заставляет меня думать, что даже то, как я применяю команду forEachfeature(), неверно.
Может кто-нибудь мне помочь? Полные исходный загружаемое here
К сожалению, это кажется, не работает. На самом деле, я должен увидеть что-то из функции, которую я набрал в консоли, так как я написал свой код в приведенном ниже примере, и там я мог видеть функции слоя в консоли. На самом деле мне нужна консоль, чтобы проверить, работает ли эта процедура шаг за шагом. Конечный результат должен показывать слои, содержащие виды, которые я ищу. https://plnkr.co/edit/DeaVFGBK11jKCT3yHAVd?p=info –