Suite

Sélectionnez plusieurs fonctionnalités dans OpenLayers 3


Je voudrais utiliser une interaction de clic pour sélectionner plusieurs entités (j'ai deux couches vectorielles) et afficher leurs noms dans une infobox. Qu'est-ce qui ne va pas?

var selectClick = new ol.interaction.Select({ condition : ol.events.condition.Click, toggleCondition : ol.events.condition.shiftKeyOnly, }); var select = selectClick; map.addInteraction(sélectionner); var selectedFeaturesClick = select.getFeatures(); select.on('add', function(e) { var info = []; selectedFeaturesClick.push(feature); info.push(feature.get('DIVISION')); if (info.length> 0) { infoBox2 .innerHTML = info.join(', '); } });

J'ai également essayé avec les lignes suivantes mais cela ne fonctionne toujours pas bien. Je souhaite utiliser une interaction par clic pour sélectionner plusieurs fonctionnalités et afficher leurs noms de division dans une infobox2. En utilisant le code suivant, si j'ajoute une nouvelle fonctionnalité (à l'aide de la touche Shift), l'infobox2 est mise à jour avec le nom de la fonctionnalité supplémentaire (DIVISION) mais elle est répétée à nouveau dans l'infobox2 lorsque j'essaye de supprimer cette fonctionnalité de la sélection (avec touche Alt). Je souhaite désélectionner une fonctionnalité et supprimer le nom de sa division de l'infobox2. Comment est-ce possible?

var infoBox2 = document.getElementById('info2'); var selectClick = new ol.interaction.Select({ addCondition: ol.events.condition.shiftKeyOnly , toggleCondition: ol.events.condition.never, removeCondition: ol.events.condition.altKeyOnly, }); sélectionnez = sélectionnezCliquez ; map.addInteraction(sélectionner); var features = select.getFeatures(); var info = []; var displayFeatureInfoClick = function(pixel) { var features = []; map.forEachFeatureAtPixel(pixel, function(feature, layer) { features.push(feature); }); if ( features.length > 0) { for (var i = 0, ii = features.length; i < ii; ++i) { info.push(features[i].get('DIVISION')); } infoBox2.innerHTML = info.join(', '); } else { infoBox2.innerHTML = ' '; } } ; map.on('click', function(evt) { displayFeatureInfoClick(evt.pixel); });

Vous pouvez vouloir ceci :

var selectClick = new ol.interaction.Select({ condition : ol.events.condition.click, toggleCondition : ol.events.condition.shiftKeyOnly, }); map.addInteraction(selectClick); var selectedFeaturesClick = selectClick.getFeatures(); var info = []; selectClick.on('select', function(evt) { var feature = evt.selected[0]; selectedFeaturesClick.push(feature); info.push(feature.get('DIVISION')); if (info.length> 0) { infoBox2.innerHTML = info.join(', '); } });

Il n'y a pasajouterévénement surol.interaction.Sélectionnezet vous ne créez pas de référence de fonction.


Je pense que Jonatas était proche, j'ai le même problème, ma solution qui fonctionne :

this.select = new Select({ condition: click, toggleCondition: click, features:… , layer:… });


Voir la vidéo: Openlayers - Interactions on map with Openlayers (Octobre 2021).