[mapserver-users] getShape failing; changes from mapserver 5.6 to 6.0

Lime, Steve D (DNR) Steve.Lime at state.mn.us
Fri Aug 3 07:45:58 PDT 2012


The query code underwent major changes between 5.6 and 6.0 and one casualty was query processing like you're doing. On the bright side it's much more straight forward now. The general steps for a layer-based query is now just:

$layer->queryByRect($map, $rect); # layer is left open after a query operation

for($i=0; $i<$layer->getNumResults(); $i++) {
       $shape = $layer->getShape($layer->getResult($)); # much simpler
       # do something with the shape
}

I see the MapScript/Swig query docs are woefully out of date. I'll file a ticket on that...

Steve

-----Original Message-----
From: mapserver-users-bounces at lists.osgeo.org [mailto:mapserver-users-bounces at lists.osgeo.org] On Behalf Of Stefan Schwarzer
Sent: Friday, August 03, 2012 6:37 AM
To: mapserver-users at lists.osgeo.org
Subject: [mapserver-users] getShape failing; changes from mapserver 5.6 to 6.0

Hi there,

I am struggling with a few changes I need to go through in order to make my code working now with mapserver 6.x. This one concerns the query part, when a user clicks on the map and a window with some metadata is being displayed.

An error message occurred:

	"Catchable fatal error: Argument 1 passed to layerObj::getShape() must be an instance of resultObj, integer given"

When I changed the getShape command as indicated here [1], it says:

	"Fatal error: Call to a member function getShape() on a non-object"


This is the code:

	//Query the Map at the point clicked
	if (!$imgbox)
		@$a = $map -> queryByPoint($click_pt, MS_MULTIPLE, -1);
	else
		$a = $map -> queryByRect($click_rt);

	if ($a == MS_SUCCESS)
	{

		$numResults = $Layer -> getNumResults();
		$oLayer = $map -> getLayer($Layer -> index);

		// Open layer's table... take the list of fields to display from 
		// the "HEADERRESULT_FIELDS" metadata in the layer object.
		$oLayer -> open();

		$oRes = $oLayer -> getResult(0);		
		//$oShape = $oLayer -> getShape($oRes->tileindex,$oRes->shapeindex); 	// before
		$oShape = $layer -> getShape($oLayer -> getResult(0));  				// now ??
			
			
		while(list($key, $val) = each($oShape -> values))
		{
		    //echo "<br />x - ".count($selFields)." - ".$key . " = " . $val;
		 	if (($key <> "META_DATA") AND ($key <> "oid") AND ($key <> "id") AND ($key <> "uid"))
		 		$selFields[count($selFields)] = $key;
		}



Not sure what I should put there...

Thanks for any hints,

Stefan


[1] http://mapserver.org/MIGRATION_GUIDE.html
_______________________________________________
mapserver-users mailing list
mapserver-users at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapserver-users




More information about the mapserver-users mailing list