2016-09-12 10 views
2

Я пытаюсь получить информацию об атрибутах из функций в слое Shapefile WMS, обслуживаемых MS4W и просматриваемых в OpenLayers3.OpenLayers 3 Box Selection With Polygon Shapefile Source

Есть ли способ получить несколько сведений об объекте в одной команде, как вы можете, с помощью метода источника источника ниже?

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

Ваша переменная 'vectorSource' указывает на объект« Карта »Openlayer? –

ответ

0

Для WMS слоев, обслуживаемых любым сервером WMS/WFS вы можете выполнить WMS получить запрос функции, используя что-то вроде следующего:

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

Это должно дать вам какие-либо функции существуют в event.coordinate прошло. Таким образом, вы можете вернуть все функции, существующие в данной точке. Я думаю, что это ваш единственный вариант, если у вас есть доступ только к запросам WMS на сервере.

Но если ваш сервер поддерживает запросы WFS и у вас есть доступ к ним, вы можете выполнить запрос wfs, чтобы получить нужные функции. Что-то вроде следующего:

//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"); 
    });