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