[OpenLayers-Users] WMS GetFeatureInfo - difficult to click exactly on a point

Lehtonen, Mika mika at digikartta.net
Sat Jan 31 05:42:57 EST 2009


Hi David,

you can also request json from Geoserver when using GetFeature. I find 
it easier to parse than GML, but that is only my opinion. I can provide 
you an example if you like.

- mika -

Kimball, David (DCR) kirjoitti:
> Thanks for your help everyone...you're right Chris, I'm using GeoServer
> not Mapserver.  So on Ivan's suggestion (and with Aleda's help) I went
> with a WFS GetFeature request with a +/- 5 pixel BBOX (to make the
> points and lines easier to select) and a custom list of fields (not
> including the geometry), and parsed the GML2 response into what I
> needed.  Actually easier-to-code and more functional than before!  
>
> Here's the URL and some code snippets...there are actually separate
> loadURL requests for the line and point layer queries now; this is just
> the code for querying the line layer...
>
> http://maps.massgis.state.ma.us/dcr/trails/DCR_RoadTrail12.html
>
>
> // ======== THE EVENT CODE (PART OF THE INIT FUNCTION):
>
> 	map.events.register('click', map, function (e) {
> 		exy = e.xy;
>
> 		llMin = map.getLonLatFromPixel(new
> OpenLayers.Pixel(e.xy.x - 5,e.xy.y + 5));  
> 			// don't know why these have to be backwards on
> the Y coordinates...
> 		llMax = map.getLonLatFromPixel(new
> OpenLayers.Pixel(e.xy.x + 5,e.xy.y - 5));  
> 			// don't know why these have to be backwards on
> the Y coordinates...
>
> 		var url2 =  map.layers[0].getFullRequestString(
> 		{
> 			SERVICE: 'WFS',
> 			VERSION: '1.0.0',
> 			REQUEST: "GetFeature",
> 			TYPENAME: 'massgis:DCR.ROADS_TRAILS_LINE',
> 			OUTPUTFORMAT: 'GML2',
> 			PROPERTYNAME: lineFieldListString,
> 			MAXFEATURES: 20,
> 			SRSNAME: 'EPSG:26986',
> 			BBOX: llMin.lon + "," + llMin.lat + "," +
> llMax.lon + "," + llMax.lat
> 		},
> 	
> "http://giswebservices.massgis.state.ma.us/geoserver/wfs");
> 		OpenLayers.loadURL(url2, '', this, setHTMLLine,
> setHTMLLine);
>
> 		OpenLayers.Event.stop(e);
> 	});
>
>
>
>
> // ======== AND THE FUNCTION THAT IS CALLED WHEN THE GML IS RETURNED
> (most of this is specific to placing the values on the web page):
>
> function setHTMLLine(response) { 
>
> var myGMLFormat = new OpenLayers.Format.GML();
> var myGML = myGMLFormat.read(response.responseText);
>
> // ---- IF A LINE WAS CLICKED, FILL THE LINE BOX
> 	if ((myGML.length > 0) && (map.getScale() <= maxLineScale)) {
> 		for (var k in myGML[0].attributes) { // only uses the
> attributes of the first Line returned for now...
>
> // ----- This places the value into a new variable and truncates it if
> it's a long URL; this variable is used only for placing the text on the
> screen, not for href values.  This way you can have a link with its
> actual href string separate from its truncated presentation on-screen
> 			var thisIsTheValue = myGML[0].attributes[k];
>
> // ----- PLACE THE VALUES INTO THE CORRECT AREAS IN THE ATTRIBUTE
> DISPLAY AREA (if a place for them exists)
>
> // ----- This places the value onto the page
> 			if ((document.getElementById("LINE_" + k)) &&
> (document.getElementById("LINEROW_" + k))) {    // if a row for this
> attribute exists in the line table-box
> 				document.getElementById("LINE_" +
> k).innerHTML = thisIsTheValue;    // write the attribute value into the
> table-box
> 				document.getElementById("LINEROW_" +
> k).style.display = '';    // make this table-box row visible
> 			} // end if
> 		} // end for (k)
> 		document.getElementById("lineTableHeader").innerHTML =
> "Road &amp; Trail Line Attributes";
> 	} // end of GPS LINE section
> 	else {
> 		document.getElementById("lineTableHeader").innerHTML =
> "No Road/Trail clicked";
> 	}
> } // end of function setHTMLLine
>
>
>
>
> --David
>
> ||||||| David Kimball
> ||||||| GIS Specialist
> ||||||| MA Department of Conservation and Recreation
> ||||||| http://www.mass.gov/dcr/stewardship/gis/
> ||||||| david.kimball at state.ma.us
> ||||||| 617.626.1447 phone
> ||||||| 617.626.1349 fax
>
> -----Original Message-----
> From: Ivan Grcic [mailto:igrcic at gmail.com] 
> Sent: Friday, January 30, 2009 5:09 AM
> To: Christopher Schmidt
> Cc: Richard Greenwood; users at openlayers.org; Kimball, David (DCR)
> Subject: Re: [OpenLayers-Users] WMS GetFeatureInfo - difficult to click
> exactly on a point
>
> Hi,
> i think its 2px default in Geoserver and cant be configured still. You
> have to write ur own WFS request where u calculate BBOX..
>
>  Take a look at wfsgetfeature control, might help
> http://dev.openlayers.org/sandbox/topp/wfs/examples/wfs-getfeature.html
>
>
> cheers
> On Fri, Jan 30, 2009 at 5:36 AM, Christopher Schmidt
> <crschmidt at metacarta.com> wrote:
>   
>> On Thu, Jan 29, 2009 at 07:20:38PM -0700, Richard Greenwood wrote:
>>     
>>>> Kimball, David (DCR) wrote:
>>>>         
>>>>> Hi everyone,
>>>>>
>>>>> I'm using a WMS GetFeatureInfo to simultaneously query the
>>>>>           
> attributes of
>   
>>>>> a line layer and a point layer (from GeoServer).  Unfortunately
>>>>>           
> you have
>   
>>>>> to click *exactly* on the center of a point to get it to send you
>>>>>           
> the
>   
>>>>> point attributes.
>>>>>           
>>> Look at TOLERANCE in http://www.mapserver.org/mapfile/layer.html
>>>       
>> The original poster said he was using GeoServer. Although MapServer
>> does have a TOLERANCE parameter, I do not believe that there is a
>> corresponding functionality in GeoServer.
>>
>> Regards,
>> --
>> Christopher Schmidt
>> MetaCarta
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>
>>     
>
>
>
>   

-- 
---------------------------------------

   Mika Lehtonen
   XML-Scanning Littoinen Ky
   Lankakatu 2 E 13, 20660 Littoinen
   mika at digikartta.net
   mbl +358 (0)44 2908259

---------------------------------------




More information about the Users mailing list