2016-09-12 8 views
2

Ich versuche, Attributinformationen von Features in einem WMS Shapefile Layer zu erhalten, der von MS4W bedient und in OpenLayers3 angezeigt wird.OpenLayers 3 Box Auswahl mit Polygon Shapefile Source

Gibt es eine Möglichkeit, mehrere Feature-Informationen in einem Befehl zu erhalten, wie Sie dies mit der folgenden Vektorquellmethode tun können?

vectorSource.forEachFeatureIntersectingExtent(extent, function(feature) { 
      selectedFeatures.push(feature); 
      info.push(feature.get('name')); 
+0

Ist Ihr 'vectorSource' Variable auf Openlayers des' Map' Objekt? –

Antwort

0

Für WMS Schichten von jedem wms/WFS-Server bedienen Sie ein wms Feature-Anfrage ausführen können, bekommen so etwas wie die folgenden verwenden:

  var url = myWMSLayer 
      .getSource() 
      .getGetFeatureInfoUrl(
       evt.coordinate, 
       map.getView().getResolution(), 
       map.getView().getProjection(), 
       { 
        'INFO_FORMAT': 'application/json', 
        'propertyName': 'ATTR1,ATTR2,ATTR3' 
       } 
      ); 

Dies sollten Sie jede Funktion gibt es innerhalb der event.coordinate weitergegeben. So können Sie alle Funktionen innerhalb des angegebenen Punktes zurück erhalten. Ich denke, dies ist Ihre einzige Option, wenn Sie nur WMS-Anfragen auf dem Server haben.

Aber wenn Ihr Server WFS-Anfragen unterstützt und Sie Zugriff darauf haben, können Sie eine wfs-Anfrage ausführen, um die gewünschten Funktionen zu erhalten. So etwas wie folgt vor:

//here is the rectangle to search for fetaures 
    var extent [-8876804.07807116, 5368955.976007851, -8866790.827365803, 5374688.75312924]; 
    $.ajax('http://demo.opengeo.org/geoserver/wfs', { 
     type: 'GET', 
     data: { 
      service: 'WFS', 
      version: '1.1.0', 
      request: 'GetFeature', 
      typename: 'mylayer', 
      srsname: 'EPSG:3857', 
      bbox: extent.join(',') + ',EPSG:3857' 
     } 
    }).done(function(resp){ 
    //you may parse the responce back here 
    var formatWFS = new ol.format.WFS(); 
    var feats = formatWFS.readFeatures(resp); 
    //now you can iterate through your features and get the attrs 
    for (var i=0;i<feats.length;i++){ 
    console.log(feats[i].get('ATTR1')); 
    }  
    }).fail(function() { 
     alert("fail loading features"); 
    });