[Mapserver-users] unclear on the concept

Sean Gillies sgillies at frii.com
Fri Jul 23 09:46:39 EDT 2004


Joel,

The layerObj class has a getItem() method and a shapeObj has a 
getValue()
method.  Use them in tandem to get attribute names and values for your
point.

Using Python list comprehensions I often do this:

     # Get the first shape
     shape = layer.getShape(0)

     # Make a dictionary of shape attributes
     s_atts = dict([(layer.getItem(i), shape.getValue(i)) for i in 
range(layer.numitems)])

I'm not sure what the Perl equivalent would be, but sure that it is 
something
equally concise, and that there are many ways :)  Please note that I'm 
using the
optional next generation API for getShape().

This methods are often overlooked.  If y'all have any ideas about how
to make them more visible, let me know.

Sean

On Jul 22, 2004, at 10:26 PM, Joel Gwynn wrote:

> The shapeindex numbers I'm getting don't seem to correspond to any 
> values in my "cities" table.  Even so, I would hope that I could 
> retrieve all the feature info from the mapserver object without 
> opening up a separate database connection.  Is this not so?
>
> I'm just having trouble finding the specific syntax to get information 
> about individual points on a point layer.  Here's what I would think 
> might work, but of course it's not.
>
>    my $so = new mapscript::shapeObj($mapscript::MS_SHAPE_POINT);
>    ...
> if(my $r = $city_layer->queryByPoint($map, $boston, 
> $mapscript::MS_MULTIPLE,10)){
>    print "no results.\n";
> }else{
>    my $i = 0;
>    print "status: $r\n";
>    while(my $rc = $city_layer->getResult($i)){
>    my $si = $rc->{shapeindex};
>    $r = $city_layer->getShape($so, 0, $si);
>    print "getShape: $r\n";
>    my $point = new mapscript::pointObj();
>    $point = $so->get(0);
>    print $point->{x}.' '.$point->{y}
> }
>
> What really obvious syntax am I missing?
>
> Thanks,
> Joel
>
> Lowell Filak wrote:
>
>> I don't know postgis but I would suspect that the query you want to do
>> could be done directly in postgis.
>> Excluding that as a possibility, the shapeindexes you receive back
>> should be the sequential number of the shape/attribute record as they
>> occur in the postgres table. You should be able to retrieve the shape
>> into a shapeObj via $layer->getShape($shape, 0, $si).
>>
>> HTH
>>
>> Lowell
>>
>> The following message was sent by Joel Gwynn <joelman at joelman.com> on
>> Wed, 21 Jul 2004 23:43:20 -0400.
>>
>>
>>> Perhaps I'm going about this the wrong way.  I'm using perl 
>>> mapscript, and I've got a postgis points layer and I want to get 
>>> some points, say within a certain radius of Boston:
>>>
>>> my $map = new mapscript::mapObj("$map_path/world_cities.map");
>>> my $boston = new mapscript::pointObj(-71.1029968261719, 42.375);
>>> my $city_layer = $map->getLayer(1);
>>>
>>> if(my $r = $city_layer->queryByPoint($map, $boston, 
>>> $mapscript::MS_MULTIPLE,10)){
>>>    print "no results.\n";
>>> }else{
>>>    my $i = 0;
>>>    print "status: $r\n";
>>>    while(my $rc = $city_layer->getResult($i)){
>>>    my $si = $rc->{shapeindex};
>>>    print "shapeindex: $si\n";
>>>    $i++;
>>>    }
>>> }
>>>
>>> This prints out a bunch of shapeindex numbers.  What are those 
>>> numbers? They don't seem to show up in my cities table in the 
>>> database.  Can I use the mapscript object to access the points?
>>> _______________________________________________
>>> Mapserver-users mailing list
>>> Mapserver-users at lists.gis.umn.edu
>>> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
>>>
>>
>>
>>
>
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
>




More information about the mapserver-users mailing list