[mapserver-users] getting field names using mapscript

Steve Lime Steve.Lime at dnr.state.mn.us
Thu Nov 6 11:59:55 EST 2008


If you're using a shapefile however you can do something like:

  // in perl
  $shapefile = new mapscript::shapefileObj('myshapefile', -1);
  print $shapefile->{numshapes};

There is a getNumFeatures() method for layer objects although I don't know if it is widely implemented.

Steve

>>> On 11/6/2008 at 8:10 AM, in message
<75b4b93e0811060610r44cba0e0x126a9279cbf108a at mail.gmail.com>, "Umberto
Nicoletti" <umberto.nicoletti at gmail.com> wrote:
> Sorry don't know that :-(
> 
> On Thu, Nov 6, 2008 at 2:32 PM, Jochen Wagner <jochen.wagner8 at googlemail.com>
> wrote:
>> thanks, works fine and fast for each layer:
>>
>> $layer->open();
>> $myitems = $layer->getItems();
>>
>> foreach($myitems as $item) {
>>        echo $item."<br>";
>> }
>> $layer->close();
>>
>> but how can I get the numer of records without a query?
>> Jo
>>
>>
>> 2008/11/6 Umberto Nicoletti <umberto.nicoletti at gmail.com>:
>>> You can use the items array on the layer object to get the field names
>>>
>>> On Thu, Nov 6, 2008 at 12:10 PM, Jochen Wagner
>>> <jochen.wagner8 at googlemail.com> wrote:
>>>> Hi list,
>>>> I would like to list from any layer ($ qlayer) only the field names of
>>>> the attribute tables and the number of objects in the table.
>>>>
>>>> With this code it works already:
>>>>
>>>> //loading mapfile
>>>> $map= ms_newMapObj($mapfilepath.'\
>>>> demo.map');
>>>>
>>>> //set layer
>>>> $layer = $map->getLayerByName($qlayer);
>>>>
>>>> //rectquery via mapextent
>>>> @$datQuery = $layer->queryByRect($map->extent);
>>>>
>>>> //if query is successful
>>>> if ($datQuery == MS_SUCCESS) {
>>>>  //number of objects
>>>>  $resnum = $layer->getNumResults();
>>>>  echo 'Anzahl: '.$resnum.'<br>';
>>>>
>>>>  $layer->open();
>>>>  $result = $layer->getResult(0);
>>>>  $shpobj = $layer->getShape($result->tileindex,$result->shapeindex);
>>>>
>>>>  //read attribute table
>>>>  $attr = $shpobj->values;
>>>>  foreach($attr as $name=>$wert) {
>>>>     echo 'Feld: '.$name.'<br>';
>>>>  }
>>>> }
>>>> $shpobj->free();
>>>> $layer->close();
>>>>
>>>> However, this method has the disadvantage using a layers with many
>>>> records the script takes a very long time, I guess because I have a
>>>> query about the whole issue run.
>>>> Has someone an approach for me, getting
>>>> 1. the field names of the table and
>>>> 2. the number of objects in the table
>>>> performantly using MapScript ?
>>>> thanks
>>>> Jo
>>>> _______________________________________________
>>>> 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