Найдите слой wms в Openlayers на основе атрибутов, увеличьте его, если найдете

Я использую Openlayers 2.14 и использую WMS для GeoServer, я смог извлечь информацию из слоя, когда он щелкнул через getfeatureinfo события и используя new OpenLayers.Control.WMSGetFeatureInfo. Примерно так: введите здесь описание изображения

function activateControls(layerName) {
     //get wms feature info start
     infoControls ={
         click: new OpenLayers.Control.WMSGetFeatureInfo({
             url: geoserver_url,
             title: 'Identify features by clicking',
             layers: [layerName],
             queryVisible: true,
             infoFormat:'application/vnd.ogc.gml',
             eventListeners: {
                 getfeatureinfo: function(event) {
                     //console.log(event);
                     //var obj = jQuery.parseJSON(event.text);
                     //console.log(event.text);
                     //remove pop-ups when selecting others
                     var pops = map.popups;
                     for (var a = 0; a < pops.length; a++) {
                         if (pops.length == 1) {
                             map.removePopup(map.popups[0]);
                         }
                     };
                     map.addPopup(new OpenLayers.Popup.FramedCloud(
                        "chicken",
                        map.getLonLatFromPixel(event.xy),
                        null,
                        GenPopText(event),
                        null,
                        true
                     ));
                 }
             }
         })
     };
    for (var i in infoControls) {
        infoControls[i].events.register("getfeatureinfo", this, showInfo);
        map.addControl(infoControls[i]);
    }
    infoControls.click.activate();
 }//end of get wms feature info

function showInfo(evt) {
    if (evt.features && evt.features.length) {
         highlightLayer.destroyFeatures();
         highlightLayer.addFeatures(evt.features);
         highlightLayer.redraw();
         //console.log(GenPopText(evt));
    } else {
        console.log(evt.text);
    }
}

function GenPopText(evt){
     var temstr= "<b><i>" + evt.features[0].gml.featureType + "</i></b><br/>";
     for(var key in evt.features[0].attributes){
        temstr += "<b><span class='text-capitalize'>" + key + "</span></b>:" + evt.features[0].attributes[key] + "<br/>";
     }
     return temstr
}

Я создал для этого функцию, потому что у меня есть несколько слоев WMS.

Теперь о том, что подразумевал вопрос. Я хотел искать слой на основе атрибутов, таких как его название здания, в качестве основы, и отображать всплывающее окно при обнаружении и увеличивать его.

Вот как я хочу это реализовать:

 $("#table_brgy").on("click", "tbody tr", function (e) {
     e.preventDefault();
     var building_name = $(this).find("td").first().text();
     ....
     activateControls(layerName,building_name)
 });

Вот так: введите здесь описание изображения

При щелчке по строке таблицы во всплывающем окне будет отображаться соответствующая информация о здании.

Я провел исследование, но не могу заставить его работать: ССЫЛКА 1


person Sachi Tekina    schedule 13.08.2015    source источник


Ответы (1)


Стандарт OGC WMS НЕ поддерживает запросы на основе атрибутов, он поддерживает их только на основе точек (возможные операции здесь). Вам нужен сервис WFS< /a> и это операция GetFeature.

Пример кода: http://dev.openlayers.org/examples/wfs-states.html

person cristianzamar    schedule 25.09.2015
comment
WFS загружается медленно по сравнению с WMS, и когда я использовал стратегию BBOX, он неправильно себя ведет при получении экстента данных, карта становится черной. Итак, мне нужно использовать фиксированную стратегию, которая получает данные в одном запросе, что делает ее медленной. - person Sachi Tekina; 26.11.2015
comment
Конечно, WFS всегда будет медленнее, потому что он обслуживает векторные данные, а не изображения, но нет смысла получать ВСЕ данные одним запросом, это безумие. Вы должны проверить, как вы устанавливаете параметр BBOX, возможно, что-то не так с проекцией или единицами измерения. - person cristianzamar; 27.11.2015
comment
Я понял вашу точку зрения, на самом деле мне нужно получить все данные и отобразить их, потому что у пользователя есть возможность показать все структуры. У меня есть идея использовать WMS, а затем при масштабировании или расположении структуры (что в основном является проблемой при использовании WMS) я буду использовать WFS в зависимости от параметра фильтра. - person Sachi Tekina; 30.11.2015