[mapserver-users] php mapscript
Sven Schroeter
schroeter at netgis.de
Mon Mar 29 01:18:04 PDT 2010
Hi,
thank you very much, shapeObj resultsGetShape is the solution.
resultsGetShape works fine.
But I don't understand why shapeObj getFeature is in the documentation?
Sven
----- Original Message -----
From: Worth Lutz
To: 'Sven Schroeter' ;
Sent: Friday, March 26, 2010 11:09 PM
Subject: RE: [mapserver-users] php mapscript
This problem is due to the new single pass query in 5.6.
I have marked your code with what I am using.
Try these mods marked with "*************************":
@$datQuery = $query_layer->queryByRect($qRect);
//number of objects
$resnum = $query_layer->getNumResults(); echo "number of objects:
".$resnum."<br>";
//if query success
if ($datQuery == MS_SUCCESS) {
// $query_layer->open(); // <<REMOVE OPEN AND CLOSE ***********
//first row
$result = $query_layer->getResult(0);
//$shpobj =
$query_layer->getShape($result->tileindex,$result->shapeindex);
// resultsGetShape is now the way to get the shape object
***************************
// note: change of order in arguments
************************************************
$shpobj = $query_layer->resultsGetShape($result->shapeindex,
$result->tileindex);
//read attribute
$attr = $shpobj->values;
//write headline
echo '<table cellspacing="0" cellpadding="2" border="1" ><tr>';
foreach($attr as $name=>$wert) {
echo '<td bgcolor="#CCCCCC">'.$name.'</td>';
}
echo '</tr>';
//write datasets
for ($j=0; $j<$query_layer->getNumResults(); $j++) {
$result = $query_layer->getResult($j);
//$shpobj =
$query_layer->getShape($result->tileindex,$result->shapeindex);
// see note above
**********************************************************************
$shpobj = $query_layer->resultsGetShape($result->shapeindex,
$result->tileindex);
$ri = $result->tileindex;
$si = $result->shapeindex;
$attr = $shpobj->values;
echo '<tr id="row'.$si.'" >';
foreach($attr as $name=>$wert) {
echo '<td>'.$wert.'</td>';
}
echo '</tr>';
$shpobj->free();
}
// $query_layer->close(); // <<REMOVE OPEN AND CLOSE ***********
echo '</table>';
} // end success
...
-----Original Message-----
From: mapserver-users-bounces at lists.osgeo.org
[mailto:mapserver-users-bounces at lists.osgeo.org] On Behalf Of Sven Schroeter
Sent: Thursday, March 25, 2010 10:52 AM
To: mapserver-users at lists.osgeo.org
Subject: Re: [mapserver-users] php mapscript
Alan,
thanks for the reply, I tried it with getFeature(), but there comes the same
error.
nextShape() works only after msWhichShapes and here I need a rectobj.
But I want to use the script for queryByShape and queryByAttributes too.
Why there comes no array in $attr = $shpobj->values; ?
Any idea?
Sven
----- Original Message -----
From: "Alan Boudreault" <aboudreault at mapgears.com>
To: <mapserver-users at lists.osgeo.org>
Cc: "Sven Schroeter" <schroeter at netgis.de>
Sent: Thursday, March 25, 2010 2:32 PM
Subject: Re: [mapserver-users] php mapscript
> Sven,
>
> getShape() is deprecated. Use rather getFeature(). I suggest to also take
> a
> look at the nextShape() function:
> http://mapserver.org/mapscript/php/index.html#layerobj-class
>
> Alan
>
> On March 25, 2010 09:18:50 am Sven Schroeter wrote:
>> Hi,
>> I have an old php mapscript code that works fine with mapserver 5.02 or
>> 5.2, but not with 5.6.1.
>> The code runs an attribute tabe from a postgis layer and different querys
>> i.e. queryByRect:
>>
>> ...
>> @$datQuery = $query_layer->queryByRect($qRect);
>>
>> //number of objects
>> $resnum = $query_layer->getNumResults();
>> echo "number of objects: ".$resnum."<br>";
>>
>> //if query success
>> if ($datQuery == MS_SUCCESS) {
>> $query_layer->open();
>>
>> //first row
>> $result = $query_layer->getResult(0);
>> $shpobj =
>> $query_layer->getShape($result->tileindex,$result->shapeindex);
>> //read attribute
>> $attr = $shpobj->values;
>>
>> //write headline
>> echo '<table cellspacing="0" cellpadding="2" border="1" ><tr>';
>> foreach($attr as $name=>$wert) {
>> echo '<td bgcolor="#CCCCCC">'.$name.'</td>';
>> }
>> echo '</tr>';
>>
>> //write datasets
>> for ($j=0; $j<$query_layer->getNumResults(); $j++) {
>> $result = $query_layer->getResult($j);
>> $shpobj =
>> $query_layer->getShape($result->tileindex,$result->shapeindex); $ri =
>> $result->tileindex;
>> $si = $result->shapeindex;
>> $attr = $shpobj->values;
>> echo '<tr id="row'.$si.'" >';
>> foreach($attr as $name=>$wert) {
>> echo '<td>'.$wert.'</td>';
>> }
>> echo '</tr>';
>> $shpobj->free();
>> }
>> $query_layer->close();
>> echo '</table>';
>>
>> } // end success
>> ...
>>
>> In ms 5.6.1 the query is also successful (I get the correct number of
>> objects) but there comes following warning:
>> Invalid argument supplied for foreach() in ... Fatal error: Call to a
>> member function free() on a non-object in ...
>> No object? Why? What has changed?
>> Thanks
>> Sven
>>
>>
>>
>> _______________________________________________
>> mapserver-users mailing list
>> mapserver-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>>
>
> --
> Alan Boudreault
> Mapgears
> http://www.mapgears.com
>
>
_______________________________________________
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