2010-12-06 47 views
6

Je suis en train de ré-analyser le fichier KML déjà chargé sur la carte, comme dans l'exemple suivant: http://openlayers.org/dev/examples/sundials.html et de le transformer en une liste cliquable qui va centrer la carte sur le point cliqué et afficher la fenêtre contextuelle correspondante.Comment activer une fonction + popup lorsque vous cliquez en dehors d'une carte dans Openlayers?

Cela a été très facile à faire dans Google Maps, mais je ne trouve pas d'exemples similaires d'Openlayers. Y a-t-il un moyen plus facile de faire cela? Quelque chose de intégré que j'ai manqué?

HTML:

<ul id="locationTable"> 
</ul> 

JS:

htmlRows = ""; 
for(var feat in features) { 
    // Build details table 
    featId = features[feat].id; // determine the feature ID  
    title = jQuery(f).filter('[name=TITLE]').text(); 

    htmlRow = "<li><a href="javascript:selectFeature('"+featId+"');\">"+title+"</a></li>"; 
    htmlRows = htmlRows + htmlRow; 
} 
jQuery('#locationTable').append(htmlRows); 

Et puis pour la fonction SelectFeature:

function selectFeature(fid) { 
    for(var i = 0; i<kml.features.length;++i) { 
        if (kml.features[i].id == fid) 
         {   
          selected = new OpenLayers.Control.SelectFeature(kml.features[i]); 
          selected.clickFeature(); // make call to simulate Click event of feature 
          break;    
         } 
      } 

     } 
+0

Vous étiez où je suis. Avez-vous déjà trouvé une réponse? – jcolebrand

+0

J'ai fini de boucler à nouveau le KML et d'ajouter des liens pour chaque élément de la table et en utilisant simplement zoomToHere() onClick de chacun et en le pointant aux coordonnées du centroïde. Je n'ai pas réussi à comprendre comment afficher la fenêtre contextuelle. J'ai aussi joué avec le signin addin qui fait plus ou moins la même chose: http://trac.osgeo.org/openlayers/wiki/Addins/Bookmark, mais il y avait beaucoup plus de code. – Chris

Répondre

1

Je pense que vous devez supprimer le « sélectionné .clickFeature » appel, et au lieu de créer un écouteur d'événement pour l'événement « featureselected » dans votre couche de fonction:

OpenLayers.Layer.Vector

Si vous affichez le menu contextuel dans ce cas, vous ne devez trouver et sélectionner avec votre code existant, et supprimez la ligne selected.clickFeature();

Sidenote: Votre serveur de fonctions peut-il fournir des données dans d'autres formats? WFS par exemple? L'analyse des données KML ne devrait pas être nécessaire.