1

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?

2

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;
1

I cannot comment on the answer which is a great answer, but wanted to add that I believe with 7.0 now you have to add a $map var in the query like:

$layer->queryByIndex($map, 0, $myFID);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.