Suite

L'identifiant de la fonctionnalité du cluster d'événements OpenLayers n'apparaît pas dans la liste des identifiants de fonctionnalité du vecteur de couche


L'objectif de ma candidature est de :

  1. cliquer sur un cluster et produire une popup
  2. avec une liste de tous les repères regroupés là
  3. où chaque entrée est un lien hypertexte
  4. qui ferme la fenêtre contextuelle actuelle
  5. et ouvre une nouvelle fenêtre contextuelle avec les données du repère

Je peux tout exécuter SAUF TROUVER l'EVENT.FEATURE (repère) dans le calque. Je peux lire la liste des caractéristiques de la couche (vecteur), mais l'entité regroupée d'origine (repère) ne fait pas partie des caractéristiques qui composent la couche.

La fonctionnalité en cluster est-elle « masquée » lorsque son cluster est affiché ? si oui comment puis-je y accéder ?

J'utilise OpenLayers avec JavaScript, vaguement basé sur l'exemple des cadrans solaires, mais avec une stratégie de cluster.

1 est une stratégie de cluster standard.

var pointStyleTaxi = new OpenLayers.Style({ externalGraphic: "img/taxi.png">

après avoir cliqué sur le lien, 4 est obtenu en appelant

function popupClear() { //alert('nombre de popups '+map.popups.length); while( map.popups.length ) { map.removePopup(map.popups[0]); } }

Qui produitJecabitiba

Qui est un appel JavaScript àonFeatureSelectFeature('OpenLayers_Feature_Vector_58');

function onFeatureSelectFeature(featId) { var layerNow = map.getLayersByName('Paradas')[0]; var layerFeatCount = layerNow.features.length; //alert ("featId: "+featId+"
layer name:"+layerNow.name+"
layerFeatCount:"+layerFeatCount); pour(var i=0; je

Je suis bloqué sur 5 car je ne trouve pas l'entité en cluster dans la liste des caractéristiques de la couche.

Aucune suggestion?


trouvé la réponse : l'entité en cluster (repère) est "à l'intérieur" de l'entité en cluster, pas de la couche.

SOLUTION 1 première sortie (pas la plus efficace) : à l'intérieuronFeatureSelectFeature(featureId)je boucle à travers les fonctionnalités du cluster comme indiqué ci-dessous :

function onFeatureSelectFeature(featId) { var layerNow = map.getLayersByName('Paradas')[0]; var layerFeatCount = layerNow.features.length; pour(var i=0; je

SOLUTION 2 j'ai également résolu le problème en changeant le lien javascript et en envoyant le clusterId àonFeatureSelectFeature(featureId, clusterId).

contenu += "
"+feat.attributes.nom+"";

fonctionnalitéest un cluster (comme on le voit dans le code ci-dessus).

maonFeatureSelectFeaturela fonction reçoit maintenant 2 chaînes (featureId, clusterId) et je ne boucle pas à travers toutes les fonctionnalités (qui peuvent être gourmandes en ressources), mais utilisez lelayer.getFeatureById()méthode.

function onFeatureSelectFeature(featId, clusterId) { // cluster est une entité qui "cache" les caractéristiques du repère var layerNow = map.getLayersByName('Paradas')[0]; var featureCluster= layerNow.getFeatureById(clusterId); var clusterCount = featureCluster.attributes.count; for (var k = 0; k < clusterCount; k++) { var flagFeatureFound = (featureCluster.cluster[k].id == featId); //alerte ("featureCluster[k].id:"+featureCluster.cluster[k].id+" flagFeatureFound:"+flagFeatureFound); if (flagFeatureFound) { onFeatureSelectPlacemarkClick(featureCluster.cluster[k]); k = featureCluster.length; } } }

cette fonction (les deux versions) appelle une variation deonFeatureSelect(événement)lequel est

function onFeatureSelectPlacemarkClick(feature) { popupClear(); var content = "non initialisé" ; if ( (feature.attributes.name >") || (feature.attributes.description >") ) { content = feature.attributes.name + "
"+feature.attributes.description; var lonlatCenter = feature.geometry.getBounds().getCenterLonLat(); //alerte ("feature.coordinate: "+feature.geometry.getBounds().getCenterLonLat()); map.setCenter (lonlatCenter, 13); } popup = new OpenLayers.Popup.FramedCloud("poulet", feature.geometry.getBounds().getCenterLonLat(), new OpenLayers.Size(100,100), content, null, true, onFeatureUnselect); fonctionnalité .popup = popup; map.addPopup(popup); lastfeature = feature; }

à un moment donné dans le futur, je vais probablement surcharger leonFeatureSelect(événement)àonFeatureSelect(événement,fonction)et effectuez une vérification de cohérence de base pour voir quel objet est transmis.


Voir la vidéo: COMMENT AVOIR LES CORRIGES DE VOS MANUEL SCOLAIRE (Octobre 2021).