6 votos

¿Utilizando OpenLayers 3 forEachFeatureAtPixel para especificar la capa?

Primero debo decir que mis habilidades en javascript son más o menos las mismas que mis habilidades en español. Apenas sé lo suficiente para meterme en problemas y luego voy a buscar ayuda. de todos modos tengo una aplicación que tiene unas cuantas capas geoJSON en ella. He creado una función map.forEachFeatureAtPixel para actualizar un div con cierta información.

El problema es que mira todas las capas y yo sólo quiero que mire una. de esta manera puedo crear otra función para obtener algunos atributos diferentes de otra capa. He revisado el documentación y veo la opción opt_layerFilter pero no sé cómo aplicarla (debido a mi falta de conocimientos de Javascript). Si alguien pudiera darme una pista aquí espero poder entonces leer la documentación y dejar de hacer estas preguntas.

función:

var displayFeatureInfo = function(pixel ) {
  var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
    return feature;
    });

  var info = document.getElementById('info');
  if (feature) {
    info.innerHTML =  '<div class="panel panel-info"><div class="panel-heading"><h3 class="panel-title">' + feature.get('Name') +
     '</h3></div><div class="panel-body">' + '<dt>API: </dt><dd class="text-info">' + feature.get('API') + '</dd>'
     + '<dt>Status: </dt><dd class="text-info">' + feature.get('Status') +  '</dd>' +
     '<dt>Legal : </dt><dd class="text-info">' + feature.get('Legal') +  '</dd>' +
     '<dt>Site Name: </dt><dd class="text-info">' + feature.get('Site_Name') +  '</dd>'+'</div>';
  } else {
    info.innerHTML = '&nbsp;';
  }

  if (feature !== highlight) {
    if (highlight) {
      featureOverlay.removeFeature(highlight);
    }
    if (feature) {
      featureOverlay.addFeature(feature);
    }
    highlight = feature;
  }

};

13voto

Jay Puntos 6

Puede utilizar el opt_layerFilter argumento para forEachFeatureAtPixel . Consulte la documentación en http://openlayers.org/en/master/apidoc/ol.Map.html#forEachFeatureAtPixel .

Por ejemplo, si vectorLayer es una referencia a la capa en la que se quieren detectar las características se utilizará lo siguiente:

var feature = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
  return feature;
}, null, function(layer) {
  return layer === vectorLayer;
});

Con esta "función de filtro" las capas que no son vectorLayer se filtrará.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X