показывать атрибуты wfs как метки при выборе - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь показать атрибут слоя wfs gml из геосервера как метку в моем приложении openlayer3. Я успешно получаю метку в виде текста, но не могу получить доступ к определенному атрибуту «имя». Дан код, с которым я работаю.

var sourceWFS = new ol.source.Vector({
    loader: function (extent) {
        $.ajax('..../geoserver/harry/ows?', {
            type: 'GET',
            data: {
                service: 'WFS',
                version: '1.1.0',
                request: 'GetFeature',
                typename: 'ABC',
                srsname: 'EPSG:3857',
                geometryField:'geometry',
                bbox: extent.join(',') + ',EPSG:3857'
            }

        }).done(function (response) {
            sourceWFS.addFeatures(formatWFS.readFeatures(response));
        });
    },
    strategy: ol.loadingstrategy.tile(ol.tilegrid.createXYZ()),
    strategy: ol.loadingstrategy.bbox,
    projection: 'EPSG:3857',

});
var layerWFS = new ol.layer.Vector({
    source: sourceWFS
});

var interaction;

var interactionSelectPointerMove = new ol.interaction.Select({
    condition: ol.events.condition.pointerMove
});

var interactionSelect = new ol.interaction.Select({


    style: new ol.style.Style({ 

            stroke: new ol.style.Stroke({
                color: 'rgba(255,0,0,1.0)',
                width: 1
            }),
            fill: new ol.style.Fill({
                color: 'rgba(255,0,0,0.5)'
            }),
            text: new ol.style.Text({
                text:("abcd")
            })


        })
});

var interactionSnap = new ol.interaction.Snap({
    source: layerWFS.getSource()
});

Я получаю abcd как метку на выбор

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Вам понадобится функция стиля, чтобы установить текст в стиле из того свойства объекта, которое вы хотите отобразить

var selectStyle = new ol.style.Style({ 

            stroke: new ol.style.Stroke({
                color: 'rgba(255,0,0,1.0)',
                width: 1
            }),
            fill: new ol.style.Fill({
                color: 'rgba(255,0,0,0.5)'
            }),
            text: new ol.style.Text({
                text:("abcd")
            })

        });



var interactionSelect = new ol.interaction.Select({

    style: function(feature) {

            selectStyle.getText().setText(feature.get('name'));
            return selectStyle;

        }

});
0 голосов
/ 25 апреля 2019

На самом деле вы отображаете строку «abcd», а не значение свойства «abcd». Чтобы получить доступ к некоторому значению свойства объекта в ol.Style, вы должны использовать StyleFunction следующим образом:

    style: function(feature, resolution){
             return new ol.style.Style({ 
                    stroke: new ol.style.Stroke({
                        color: 'rgba(255,0,0,1.0)',
                        width: 1
                    }),
                    fill: new ol.style.Fill({
                       color: 'rgba(255,0,0,0.5)'
                    }),
                    text: new ol.style.Text({
                       text: feature.get("abcd");
                    })
              })
           }
0 голосов
/ 24 апреля 2019

Вы не получите никакого атрибута, который по умолчанию скрыт атрибутом GML.Наиболее распространенные «отсутствующие» атрибуты - это имя и идентификатор.Вы можете включить это (стандартное соответствие) поведение, проверив Override GML Attributes на странице служб WFS для версии GML, которую запрашивает ваш клиент.

relevant part of WFS service settings page

...