[mapserver-users] php mapscript

Sven Schroeter schroeter at netgis.de
Mon Mar 29 04:18:04 EDT 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