Updated version. This works with OL 2.6 but not with 2.7-RC1 (in IE6-7 and FF2-3) if everything is written in one line without spaces. Why doesn't it work with 2.7-RC1? Note the variable!
FILTER: '<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" service="WFS" version="1.1.0" xmlns:gml="http://www.opengis.net/gml"><gml:featureMember><ogc:Filter><ogc:Contains><ogc:PropertyName>the_geom</ogc:PropertyName><gml:Point><gml:coordinates>*'+hiirixy+'*</gml:coordinates></gml:Point></ogc:Contains></ogc:Filter></gml:featureMember></wfs:FeatureCollection>' I am using MapFish. Does it infuence on this somehow? mika Lehtonen, Mika kirjoitti: > Shouldn't be braging about too early. Now I get this: > > <?xml version="1.0" encoding="UTF-8"?> > <ows:ExceptionReport version="1.0.0" > xsi:schemaLocation="http://www.opengis.net/ows > http://karsamaki.digikartta.net:80/asemakaavat/schemas/ows/1.0.0/owsExceptionReport.xsd" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:ows="http://www.opengis.net/ows"> > <ows:Exception exceptionCode="NoApplicableCode" > locator="org.vfny.geoserver.util.requests.readers.XmlRequestReader"> > <ows:ExceptionText>org.xml.sax.SAXParseException: > Content is not allowed in prolog. Content is not > allowed in prolog.</ows:ExceptionText> > </ows:Exception> > </ows:ExceptionReport> > > Maybe a geoserver issue, but any thoughts..? > > - mika - > > Lehtonen, Mika kirjoitti: > >> I got it working. Not the highlighting, but GetFeature. Those of you who >> don't know what I have been up to, I've been trying to do what is done >> in http://www.openlayers.org/dev/examples/getfeatureinfo.html , but with >> GetFeature. With this code I get feature's data by clicking it like in >> that example. You can decode the filter e.g. in >> http://meyerweb.com/eric/tools/dencoder/ . What was wrong with other >> browsers than FF3, was that I forgot apostrophes off around the filter >> declaration. In FF3, I noticed that it doesn't care about URL encoding, >> just stick your staff into it as it is. >> >> cheers, >> mika >> >> map.events.register('click', null, function (e) { >> OpenLayers.Util.getElement('nodelist').innerHTML = "Please wait..."; >> var hiiri = wfs.map.getLonLatFromPixel(e.xy); >> var hiirixy = (hiiri.lat+','+hiiri.lon); >> >> var url = wfs.getFullRequestString({ >> SERVICE: 'WFS', >> VERSION: '1.1.0', >> REQUEST: 'GetFeature', >> OUTPUTFORMAT: 'json', >> PROPERTYNAME: 'the_geom,LAYER', >> MAXFEATURES: 5, >> TYPENAME: 'dikanet:karsa_region', >> SRSNAME: 'EPSG:2393', >> FILTER: >> '%3Cwfs%3AFeatureCollection%20xmlns%3Awfs%3D%22http%3A//www.opengis.net/wfs%22%3E%3Cgml%3AfeatureMember%20xmlns%3Agml%3D%22http%3A//www.opengis.net/gml%22%3E%3CFilter%3E%3CContains%3E%3CPropertyName%3Ethe_geom%3C/PropertyName%3E%3Cgml%3APoint%3E%3Cgml%3Acoordinates%3E%7Bhiirixy%7D%3C/gml%3Acoordinates%3E%3C/gml%3APoint%3E%3C/Contains%3E%3C/Filter%3E%3C/gml%3AfeatureMember%3E%3C/wfs%3AFeatureCollection%3E' >> },"http://karsamaki.digikartta.net/asemakaavat/wfs" >> ); >> >> OpenLayers.loadURL(url,'',this,yourFunction); >> >> Event.stop(e); >> }); >> >> function yourFunction(response) { // this will only zoom into selected >> feature.. >> // alert(response.responseText); >> g = new OpenLayers.Format.JSON(); >> jsonni = g.read(response.responseText); >> var rajat = new >> OpenLayers.Bounds(jsonni.bbox[0],jsonni.bbox[1],jsonni.bbox[2],jsonni.bbox[3]); >> map.zoomToExtent(rajat); >> >> }; >> >> Lehtonen, Mika kirjoitti: >> >> >>> Hi Brad, >>> >>> cool site you have! >>> >>> You know, I went on with my own style, as stubborn is my middle name.. I >>> got my code working so far; to get JSON out of the selected polygon >>> (nice thing to move on .. ;-) ), but... >>> you don't happen to know how I'll get this working also in IE. Here is >>> the snippet. I guess it got something to do with the URL encoding ...? >>> Debugger blames the filter, which obviously is the guilty one. (IE excl. >>> :-) ). >>> >>> map.events.register('click', null, function (e) { >>> OpenLayers.Util.getElement('nodelist').innerHTML = "Odota hetki..."; >>> var hiiri = wfs.map.getLonLatFromPixel(e.xy); >>> var hiirixy = (hiiri.lat+','+hiiri.lon); >>> >>> var url = wfs.getFullRequestString({ >>> SERVICE: 'WFS', >>> VERSION: '1.1.0', >>> REQUEST: 'GetFeature', >>> OUTPUTFORMAT: 'json', >>> PROPERTYNAME: 'the_geom,LAYER', >>> MAXFEATURES: 5, >>> TYPENAME: 'dikanet:karsa_region', >>> SRSNAME: 'EPSG:2393', >>> FILTER: <wfs:FeatureCollection >>> xmlns:wfs="http://www.opengis.net/wfs"><gml:featureMember >>> xmlns:gml="http://www.opengis.net/gml"><Filter> >>> >>> <Contains><PropertyName>the_geom</PropertyName><gml:Point><gml:coordinates>{hiirixy}</gml:coordinates></gml:Point></Contains> >>> </Filter></gml:featureMember></wfs:FeatureCollection> >>> }, >>> "http://karsamaki.digikartta.net/asemakaavat/wfs" >>> ); >>> .............................................. >>> >>> OpenLayers.loadURL(url,'',this,testJSON); >>> Event.stop(e); >>> }); >>> >>> ............................................ >>> function testJSON (response) { >>> // alert(response.responseText); >>> g = new OpenLayers.Format.JSON(); >>> jsonni = g.read(response.responseText); >>> var rajat = new >>> OpenLayers.Bounds(jsonni.bbox[0],jsonni.bbox[1],jsonni.bbox[2],jsonni.bbox[3]); >>> map.zoomToExtent(rajat); >>> }; >>> .......................................................... >>> Doesn't do anything else so far than zooms into the selected polygon. >>> >>> - mika - >>> >>> >>> Brad Spencer kirjoitti: >>> >>> >>> >>>> Mika, >>>> >>>> I typically use getFeature when I need the geometry as well and one way to >>>> reduce the number of polygons returned is to set up a Shift-drag event that >>>> can be used to reduce the BBox of the GetFeature request to be limited to >>>> the user's discretion. However, this will be a rectangle and will probably >>>> still return more or less polygons than you need. The request I use >>>> typically looks something like this: >>>> >>>> &typename=MESHBLOCKS&datastore=ABS&service=wfs&request=GetFeature&filter=<Fi >>>> lter><BBOX><Box><coordinates>151.042611,-33.947448%20151.043,-33.9</coordina >>>> tes></Box></BBOX></Filter>&outputformat=BXFS >>>> >>>> This returns an GML file into DOM that I can parse to get all the >>>> coordinates of the polygons returned. >>>> >>>> However, if you are interacting via a single clicking process and do not >>>> need the geometry then all you need is a getFeatureInfo request. I have >>>> built an application that does this see >>>> http://demos.numaps.com.au/polypika.html. Just doubleclick any red polygon >>>> and what happens in the background is the click generates a getFeatureInfo >>>> request which looks something like: >>>> >>>> REQUEST=GetFeatureInfo&VERSION=1.1.3&SERVICE=WMS&SRS=EPSG:900913&BBOX=128495 >>>> 99.340828,-3816959.290073,12980306.659172,-3708418.709927&X=474&Y=369&QUERY_ >>>> LAYERS=INDIGENOUS_LOC:ABS&WIDTH=855&HEIGHT=710&RADIUS=0&FEATURE_COUNT=1&INFO >>>> _FORMAT=text/xml >>>> >>>> This returns a an XML file into the DOM which I can parse to get the >>>> Polygon >>>> Id. Then I do the SLD thing. >>>> >>>> Hope these suggestions help you. >>>> >>>> Cheers, Brad Spencer.... >>>> >>>> >>>> >>>> -----Original Message----- >>>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On >>>> Behalf Of Lehtonen, Mika >>>> Sent: Tuesday, September 09, 2008 10:43 PM >>>> To: Openlayers Users List >>>> Subject: Re: [OpenLayers-Users] Highlighting the selected geometry >>>> >>>> Yep, >>>> thanks. I am using Geoserver so SLD approach is ok. One stupid question. >>>> I started to play around with GetFeature, but how can you get just the >>>> feature you clicked. I tried something similar like in OL example [1], >>>> but with GetFeature and WFS. So the following is what I tried: >>>> >>>> map.events.register('click', null, function (e) { >>>> OpenLayers.Util.getElement('nodelist').innerHTML = "Odota hetki..."; >>>> var url = wfs.getFullRequestString({ >>>> SERVICE: 'WFS', >>>> VERSION: '1.0.0', >>>> REQUEST: 'GetFeature', >>>> OUTPUTFORMAT: 'text/xml; subtype=gml/2.1.2', >>>> PROPERTYNAME: 'LAYER', >>>> MAXFEATURES: 3, >>>> TYPENAME: 'dikanet:karsa_region', >>>> SRSNAME: 'EPSG:2393', >>>> BBOX: wfs.map.getExtent().toBBOX()}, >>>> "http://karsamaki.digikartta.net/asemakaavat/wfs" >>>> ); >>>> OpenLayers.loadURL(url,'',this,setHTML); >>>> Event.stop(e); >>>> }); >>>> >>>> function setHTML(response) { >>>> OpenLayers.Util.getElement('nodelist').innerHTML = >>>> response.responseText; >>>> }; >>>> >>>> But this gives me all the feautures in the current viewport. How can I >>>> filter out the rest and just take the one I clicked? >>>> >>>> - mika - >>>> >>>> [1] http://www.openlayers.org/dev/examples/getfeatureinfo.html >>>> >>>> Brad Spencer kirjoitti: >>>> >>>> >>>> >>>> >>>>> Mika, >>>>> >>>>> Does the map server support (style Layer descriptors) SLDs? If so this is >>>>> the best way to highlight polygons in my experience. Vectors may misalign >>>>> depending on browsers/projections. Also there are capacity limits on >>>>> >>>>> >>>>> >>>>> >>>> vectors >>>> >>>> >>>> >>>> >>>>> at the client which can be problematic. The easiest way to make sure this >>>>> does not happen is to have the layer render again via a new SLD. What I do >>>>> is run a GetFeatureinfo(WMS) or getfeaturte(WFS) bring back the list of >>>>> polygons (must have unique identifiers) then I build an SLD on the fly via >>>>> >>>>> >>>>> >>>>> >>>> a >>>> >>>> >>>> >>>> >>>>> PHP script save it and then apply that to the current layer. Of course if >>>>> you have the polygon names already accessible in the client (e.g. in a >>>>> select box) then you can just jump to the SLD building part. Works a >>>>> >>>>> >>>>> >>>>> >>>> treat. >>>> >>>> >>>> >>>> >>>>> Cheers, Brad.... >>>>> >>>>> -----Original Message----- >>>>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >>>>> >>>>> >>>>> >>>>> >>>> On >>>> >>>> >>>> >>>> >>>>> Behalf Of Lehtonen, Mika >>>>> Sent: Tuesday, September 09, 2008 5:02 PM >>>>> To: Openlayers Users List >>>>> Subject: [OpenLayers-Users] Highlighting the selected geometry >>>>> >>>>> Hi, >>>>> >>>>> is there any examples available which I could use with the following >>>>> task? Tried to google, but didn't find any good ones. >>>>> >>>>> I have two wms-layers in my map. The another one includes some polygons. >>>>> In order to get some info out when clicking the polygon, I built a >>>>> system which does that. But I would also like to get the selected >>>>> polygon to render with a different style, so that it'd be sort of >>>>> highlighted. I thought I could copy it into vector layer having >>>>> different style. But frankly said, I don't know how to do it. Just >>>>> learning OL. >>>>> >>>>> - mika - >>>>> _______________________________________________ >>>>> Users mailing list >>>>> [email protected] >>>>> http://openlayers.org/mailman/listinfo/users >>>>> >>>>> >>>>> >>>>> >>>>> >>>> _______________________________________________ >>>> Users mailing list >>>> [email protected] >>>> http://openlayers.org/mailman/listinfo/users >>>> >>>> >>>> >>>> >>> _______________________________________________ >>> Users mailing list >>> [email protected] >>> http://openlayers.org/mailman/listinfo/users >>> >>> >>> >> _______________________________________________ >> Users mailing list >> [email protected] >> http://openlayers.org/mailman/listinfo/users >> >> > _______________________________________________ > Users mailing list > [email protected] > http://openlayers.org/mailman/listinfo/users > _______________________________________________ Users mailing list [email protected] http://openlayers.org/mailman/listinfo/users
