Mere

WFS GetFeature-kontrol tager ikke hensyn til 'viewparams'

WFS GetFeature-kontrol tager ikke hensyn til 'viewparams'


Jeg bruger GeoServer til at hente mine WMS-data. Alt fungerer godt til visning af data i OpenLayers.

GeoServer har evnen til at oprette SQL-visninger og bruge parametre til at returnere bestemt geometri. Disse parametre kaldes viewparams. Dette kan være et eksempel på en SQL-visning:

vælg * fra myTable hvor alder =% ageParam%

Når du bruger viewparams, kan du overføre værdien til parameteren 'ageParam'. Hvis en parameter ikke er indstillet, anvendes en foruddefineret standardværdi. Flere oplysninger om dette emne kan findes her.

I OpenLayers tager "getFeature" -kontrollen dog ikke parameteren 'viewparams' i betragtning. Dette betyder, at det altid returnerer funktioner med standardparameterværdierne.

Er dette en fejl, en manglende funktion eller noget, jeg lige har savnet.

Rediger 1

Her er en screencast, jeg lavede for at visualisere problemet.

http://screencast.com/t/RgrQvaoyoqz

Som du kan se, tegnes laget igen med nye punkter, men selectFeature-kontrollen returnerer stadig de gamle funktioner.

Rediger 2

    geometri  490488.82657346 6800062.1058854 491071.65891403 6800556.5579121

** rediger **

Dette er JavaScript-koden for laget og controlleren

test = nye OpenLayers.Layer.WMS ("test", "http: //test.boedy.p: 8080 / wms", {'lag': 'test: test_forespørgsel', viewparams: 'x:' + myX + '; y: '+ myY, maxfeatures: 2000, ratio: 1, transparent: true, isBaseLayer: false}); selectCtrl = ny OpenLayers.Control.GetFeature ({protokol: OpenLayers.Protocol.WFS.fromWMSLayer (test), klik: sand, skift: falsk, multipel: falsk, svæver: falsk, boks: sand, toggleKey: "shiftKey", / / ctrl-tast fjerner fra markeringen multipleKey: "shiftKey", eventListeners: {featureselected: onFeatureSelect, featureunselected: onFeatureUnselect}});

Når man ser på kilden til WFS.fromWMSLayer-funktionen, ser det ud til at du skal videregive dine viewparams som en ekstra mulighed:

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

Kontroller den URL, der kaldes, når du vælger en funktion - og forhåbentlig føjes visningsparameterne til URL'en.

Hvis du vil anvende et filter til et WFS-lag, kan du lege med filterkoden og den XML, den genererer på denne demo.

Når du har korrekt filterkode, skal du indstille WFS-lagets filterfilteregenskab.

wfsLayer.filter = mit_filter;

Da du ikke har et WFS-lag, kan du prøve følgende - parametrene kopieres muligvis - du bliver nødt til at teste.

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

Ved hjælp af WMSGetFeatureInfo-metoden, vejen at gå videre viewparams er ved hjælp af

  • vendorparams og
  • og tildele viewparams i eventlisten inden tilbagekaldsfunktionen, der henter "klikresultatet" fra WMS-laget

    click_info = nye OpenLayers.Control.WMSGetFeatureInfo ({title: 'Identificer funktioner ved at klikke', lag: queryableMapLayers, infoFormat: "application / vnd.ogc.gml", queryVisible: true, autoActivate: true, eventListeners: {beforegetfeatureinfo: begivenhed) {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]); ny GeoExt.Popup ({title: "Feature Info", bredde: 200, højde: 300, layout: "harmonika", autoscroll: true, map: viewPort.mapPanel.map, location: viewPort.mapPanel.map.getLonLatFromPixel (e.xy), items: items}). Show ();}}});

Tak til dette indlæg!