[Mapserver-users] A QUERY only mapfile, PHP/Mapscript, get not results
Dylan Keon
keon at nacse.org
Sat Mar 8 12:23:40 PST 2003
Steve,
Not sure if this is it, but try setting the last parameter in
queryByPoint() to -1 instead of 1.0. If you want to use the TOLERANCE
setting in the layer definition, the last parameter in queryByPoint()
should be <= 0. By setting it to 1.0, you're saying you want to find
features within 1.0 ground units of where you clicked. That may not be
enough tolerance to find features near your point (?).
Also, why do you have your printf statement printing both
$layer->tolerance and $layer-toleranceunits to the TOLERANCE line? I
thought the TOLERANCE line just accepted the tolerance level, and to set
toleranceunits you need a separate TOLERANCEUNITS line.
--Dylan
woodbri at swoodbridge.com wrote:
> Hi all,
>
> My brain must have gone on vacation or something, because I have what
> I thought should be a trivial example to put together and I can not
> seem to get it to work!
>
> Built a simple php script to do a query of a query only mapfile and
> print the results. I have included below the results, query.map,
> t2.php
>
> So, does anyone have any ideas on what stupid thing I have
> overlooked. Oh, the world_countries_shp file is good and in units DD.
> I have tried this with 12 different layers all with the same results.
> I just stripped that down to this simple example. And I have tried it
> on php-4.3.1 and MS-3.7_dev with the same results.
>
> -Steve W.
>
> ------------------------------ results
>
> query point = (-71.3940, 42.6140)
>
> LAYER country, 0
> STATUS 1
> TYPE 5
> SHAPEPATH /data/mdata/
> TILEINDEX
> DATA world/world_countries_shp
> TEMPLATE dummy
> TOLERANCE 3.000 6
>
> Warning: MapServer Error in msQueryByPoint(): No matching record(s)
> found.
> in /home/httpd/html/maptools/rgeo/t2.php on line 29
>
>
> ret=1
>
> ---------------------------------- query.map
>
> MAP
> NAME "EXAMPLE"
> STATUS ON
> EXTENT -180.0 -14.8 -51.75 113.4
> SHAPEPATH "/data/mdata/"
> UNITS DD
>
> LAYER # this is a polygon layer
> NAME "country"
> TYPE QUERY
> STATUS ON
> DATA "world/world_countries_shp"
> TEMPLATE "dummy"
> METADATA
> "DESCRIPTION" "World Countries"
> "RESULT_FIELDS" "NAME CAPITAL CONTINENT"
> END
> END
>
> END
>
>
> ---------------------------------- t2.php
>
> <?php
>
> dl("php4.2.2_mapscript-20020904.so"); # mapserver 3.6.2
>
> define(MAPFILE, '/data/mdata/query.map');
>
> $point = ms_newPointObj();
> $point->setXY(-71.394, 42.614);
>
> print "<pre>\n";
> printf("query point = (%.4f, %.4f)\n\n", $point->x, $point->y);
>
> $map = ms_newMapObj(MAPFILE) or
> die("Can't create mapObj using " . MAPFILE);
> $map->preparequery();
> $shapepath = $map->shapepath;
>
> for ($i=0; $i<$map->numlayers; $i++) {
>
> $layer = $map->getLayer($i);
> $layer->set('status', MS_ON);
> printf("LAYER %s, %d\n", $layer->name, $layer->index);
> printf(" STATUS %d\n TYPE %d\n", $layer->status, $layer->type);
> printf(" SHAPEPATH %s\n", $shapepath);
> printf(" TILEINDEX %s\n", $layer->tileindex);
> printf(" DATA %s\n", $layer->data);
> printf(" TEMPLATE %s\n", $layer->template);
> printf(" TOLERANCE %.3f %d\n", $layer->tolerance, $layer-
>
>>toleranceunits);
>
> $ret = $layer->queryByPoint($point, MS_MULTIPLE, 1.0);
> print "ret=$ret\n";
> if ($ret == MS_SUCCESS) {
> for ($j=0; $j<$layer->getNumResults(); $j++) {
> $result = $layer->getResult($j);
> printf("lay=%d, res=%d, si=%d, ti=%d, ci=%d\n",
> $i, $j, $result->shapeindex, $result->tileindex,
> $result->classindex);
> }
> }
>
> }
>
> phpinfo();
> ?>
>
> _______________________________________________
> 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