[Mapserver-users] Query of Point in multiple layers

Eric Bridger eric at gomoos.org
Mon Aug 25 11:28:52 EDT 2003


This is certainly possible using mapscript but you will need to query
each layer individually and then save the results for each
queryByPoint() on each polygon layer.  
The map file does allow you to put layers in a group using the GROUP
tag, but I'm not sure if that would allow you to query all the layers at
once.  

Remember, querying a shapefile layer only returns the record number of
the attribute data in the shapefile dbf file.  So for each query, you
need to open the DBF file and get the attributes you want.

Below is some perl code which you should be able to adapt to PHP. Note:
this is for mapserver 3.6.6 It gets the first attribute in the dbf file.
--------------------------------------------------------------------------------
use mapscript:
use XBase;

my @layers = ('states', 'counties', 'civil_divisions');
my @results = ();
foreach my $layer (@layers){
   my @tmp = queryLayer($layer, $map, $click_pt, 1);
   push @results, @tmp;
}
#########################################
# Run queryByPoint on a layer and lookup the $fld number in the XBase
dbf file.
#########################################
sub queryLayer{
    my($layer, $map, $point, $fld) = @_;
    my @results = ();

    my $layerObj = $map->getLayerByName($layer);
    $layerObj->{status} = $mapscript::MS_ON;
    if(!$layerObj->queryByPoint($map,$point,$mapscript::MS_MULTIPLE,
undef)){
        # Open the db handle.
        my $dbfile = $layerObj->{data};
        $dbfile .= '.dbf';
        my $hDBF = new XBase "$dbfile" or warn XBase->errstr . "\n";
        my $results = $layerObj->{resultcache};
        my $num_results = $results->{numresults};
        for my $i (0..$num_results-1){
            my $rslt = $layerObj->getResult($i);
            # record is the record number in the shape dbf file.
            my $record = $rslt->{shapeindex};
            my @row = $hDBF->get_record_nf($record, $fld) or warn
$hDBF->errstr . "\n";
            push @results, $row[1];
        }
        $hDBF->close();
    }
    return @results;
}

On Mon, 2003-08-25 at 17:13, Stephen Clark wrote:
> 
> I was wondering if there is the capability using php or mapscript to query
> multiple layers (each of polygons) and retrieve the list of which polygon
> this Point falls within?
> 
> 
> 
> thanks,
> Stephen Clark
> 
> _______________________________________________
> 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