5 votos

WMS getFeature control ' tomar t ' viewparams ' en cuenta

Yo uso Geoserver para obtener mis datos WMS. Todo funciona muy bien para mostrar los datos en openlayers.

Geoserver tiene la capacidad para crear vistas de sql y el uso de los parámetros para la restitución de ciertos geometría. Estos parámetros se denominan viewparams. Este podría ser un ejemplo de una vista sql:

select *
from myTable
where age = %ageParam%

Cuando se utiliza viewparams es capaz de pasar el valor de la 'ageParam' parámetro. Si el parámetro no está definido, un predeterminado valor será usado. Más información acerca de este tema se puede encontrar aquí.

En openlayers sin embargo, "getFeature" control de no tomar la viewparams' parámetro en cuenta. Esto significa que siempre devuelve características con los valores de parámetro predeterminados.

Es esto un error, una característica que falta o algo que se me acaba de perder.

Edit1

Aquí está un video que he realizado para visualizar el problema.

http://screencast.com/t/RgrQvaoyoqz

Como se puede ver, la capa se vuelve a dibujar con nuevos puntos pero el selectFeature de control todavía devuelve el viejo características.

Edit2

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<wfs:Query typeName="test:point_query" xmlns:test="http://test.boedy.p:8080/wms">
<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:BBOX>
<ogc:PropertyName>geometry</ogc:PropertyName>
<gml:Envelope xmlns:gml="http://www.opengis.net/gml">
<gml:lowerCorner>490488.82657346 6800062.1058854</gml:lowerCorner>
<gml:upperCorner>491071.65891403 6800556.5579121</gml:upperCorner>
</gml:Envelope>
</ogc:BBOX>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>

edit3

Este es el javascipt código de la capa y el controlador

test = new OpenLayers.Layer.WMS("test",
    "http://test.boedy.p:8080/wms", 
    {
        'layers': 'test:test_query',
        viewparams: 'x:'+myX+';y:'+myY,
        maxfeatures: 2000,
        ratio: 1,
        transparent: true,
        isBaseLayer: false}
    );

selectCtrl = new OpenLayers.Control.GetFeature(
        {
            protocol: OpenLayers.Protocol.WFS.fromWMSLayer(test),
            clickout: true, toggle: false,
            multiple: false, hover: false,
            box: true,
            toggleKey: "shiftKey", // ctrl key removes from selection
            multipleKey: "shiftKey",
            eventListeners: {
                featureselected: onFeatureSelect,
                featureunselected: onFeatureUnselect
            }
        }
    );

2voto

Swinders Puntos 1042

Buscando la fuente de la CMA.fromWMSLayer función, parece que debe pasar en su viewparams como una opción adicional:

        protocol: OpenLayers.Protocol.WFS.fromWMSLayer(test, 
                                                       {viewparams: 'x:'+myX+';y:'+myY}),

Compruebe la dirección URL a la que se llama cuando se selecciona una característica - y esperemos que el viewparams será añadido a la URL.

Si usted quería aplicar un filtro a una capa WFS se puede jugar con el código del filtro y el XML que se genera en esta demo.

Una vez que tienes el código del filtro correcto, a continuación, establezca la capa WFS de filtro del filtro de la propiedad.

        wfsLayer.filter = my_filter;

Como usted no tiene una capa WFS usted podría tratar el siguiente - los parámetros pueden ser copiados a través de - tendrías que probar.

        protocol: OpenLayers.Protocol.WFS.fromWMSLayer(test, 
                                                       {filter: my_filter}),

2voto

h1d Puntos 241

Usando el método WMSGetFeatureInfo, la forma de pasar a lo largo de viewparams es mediante

  • vendorparams y
  • y la asignación de la viewparams en el eventlistener antes de la función de devolución de llamada recuperación de la "haga clic en resultados" de la capa WMS

    click_info = new OpenLayers.Control.WMSGetFeatureInfo({
        title: 'Identify features by clicking',
        layers: queryableMapLayers,
        infoFormat: "application/vnd.ogc.gml",
        queryVisible: true,
        autoActivate: true,
        eventListeners: {
            beforegetfeatureinfo: function(event) { 
            this.vendorParams = { viewparams: "word:"+startWord}; 
            }, 
            getfeatureinfo: function(e) {
                var items = [];
                Ext.each(e.features, function(feature) {
                    items.push({
                        xtype: "propertygrid",
                        title: feature.attributes.text,
                    });
                });
                console.log(items[0]);
                new GeoExt.Popup({
                    title: "Feature Info",
                    width: 200,
                    height: 300,
                    layout: "accordion",
                    autoscroll: true,
                    map: viewPort.mapPanel.map,
                    location: viewPort.mapPanel.map.getLonLatFromPixel(e.xy),
                    items: items
                }).show();
    
            }
        }
    });
    

¡Gracias a este post!

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