[GIS] PHP MapScript get feature / shape by index in layer

mapscriptmapserverPHP

I upgraded my MapServer version from 5.6.x to 6.2.0 (yes, big version jump here!) and I am stuck with getting a shapeObj from a layer by simply using its Index (or FID for shapefiles or GID in case of PostGIS).

In the old version I used the following:

$layer->open();
$shapeOjbect = $layer->getFeature($fid);
$bounds = $shapeObject->bounds;`

which returned to me the rectangular bounds.

Everything has changed in the new version of MapServer/MapScript. GetFeature() is not enabled any more, and $layerObj->getShape($resultObj) can be used instead BUT getShape requires the resultObj(nth result) from a $layerObj->queryByXXX , but there is no XXX = Index (e.g. $layerObj->queryByIndex($fid) ).

There is a $mapObj->queryByIndex(layerIndex, tileIndex, $fid, [$addToquery]), but I have not seen any examples using that function.

I hope I explained clearly.

Does anybody have any experiences on using this function?

Best Answer

I found that there actually is a method for querying by Index in the layerObj
$layerObj->queryByIndex(???, $fid)
where ??? is probably the tileIndex of a layer object.

Maybe I missed it in the documentation, but I am pretty sure that it is not there. I only found a int queryByIndex(....) in the mapObj section, but none in the layerObj section of the Mapserver Mapscript documentation.

So here is a summary of the method;

// query my layerObj ($layer) by my index valu ($myFID)
$layer->queryByIndex(0,$myFID);
// gets the first result, unique obviously because I query a single index ($myFID)
$result = $layer->getResult(0); 
// use the resultObject ($result) to get the respective shapeObj ($shape)
$shape = $layer->getShape($result);
// get the bounds attribute
$rect = $shape->bounds;
Related Question