2010-12-06 19 views
6

Estoy volviendo a analizar el archivo KML que ya se ha cargado en el mapa, como el ejemplo aquí: http://openlayers.org/dev/examples/sundials.html y convirtiéndolo en una lista seleccionable que centrará el mapa en el punto al que se hace clic y mostrará la ventana emergente correspondiente.¿Cómo activo una función + ventana emergente cuando hago clic fuera de un mapa en Openlayers?

Esto fue muy fácil de hacer en Google Maps, pero no puedo encontrar ejemplos similares de Openlayers. ¿Hay alguna manera más fácil de hacer esto? Algo incorporado que me estoy perdiendo?

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

y luego por la función 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

Estabas donde estoy. ¿Alguna vez encontraste una respuesta? – jcolebrand

+0

Terminé recorriendo el KML de nuevo y agregando enlaces para cada elemento de la tabla y simplemente usando zoomToHere() al hacer clic en cada uno y apuntarlo a las coordenadas del centroide. Sin embargo, no fui capaz de descubrir cómo mostrar la ventana emergente. También jugué con el complemento Addin que Moreless hace lo mismo: http://trac.osgeo.org/openlayers/wiki/Addins/Bookmark, pero era mucho más código. – Chris

Respuesta

1

creo que se debe quitar el "seleccionado .clickFeature" llamada, y en su lugar crear un detector de eventos para el 'evento featureselected' en su capa de entidades:

OpenLayers.Layer.Vector

Si muestra la ventana emergente en ese caso, sólo tendrá que encontrarlo y seleccionarlo con su código existente, y eliminar la línea selected.clickFeature();

Nota al margen: ¿puede su servidor de funciones proporcionar datos en otros formatos? WFS por ejemplo? No debería ser necesario analizar los datos KML.

Cuestiones relacionadas