Question about querybypoint

Steve Lime Steve.Lime at DNR.STATE.MN.US
Thu May 18 17:21:37 EDT 2006


Layer tolerances are used to set a spatial filter that is used to identify target
features. Those features are then processed to make sure they meet the
target criterea. For example, if you query a layer with a tolerance of 100 meters
then MapServer constructs a bbox 200 meters on a side centered on the
query point and uses that to find candidate features.

There is no predictable relationship between tolerance and query speed although
in practice smaller tolerances should produce faster queries since there are likely
to be less candidate features to process.

MS_SINGLE will find the closest feature in a point query situation (potentially
across multiple layers). MS_MULTIPLE will find all features that meet the tolerance
settings. MS_SINGLE can be much faster in certain situations, especially when
querying a polygon layer since being inside the polygon gives you a distance
of 0 and stops the query process. When querying points and lines where a
perfect 0 distance is unlikely you end up having to process all candidate features
to make sure you identify the closest one.

Querybyrect is faster than querybyshape. 

Steve

>>> Frederico Lucca <fredlucca at GMAIL.COM> 5/18/2006 8:40:05 AM >>>
Hello list,

I'm querying a layer by point, using tolerance in meters because I need to
find some street in a point using Decimal Degrees and a range in meters.

Something like:

        layer.setSizeunits(mapscript.MS_METERS);
        layer.setToleranceunits(mapscript.MS_METERS);
        layer.setTolerance(radius);

        layer.queryByPoint(map, point, mapscript.MS_SINGLE, -1)

Comparing two radius, 100 and 50 meters, I think 50 is twice faster than
100, is this true?

What's the difference between MS_SINGLE and MS_MULTIPLE.
MS_SINGLE find one, and only one feature??? MS_SINGLE is much faster than
MS_MULTIPLE?
Supousing that I need to return the nearest street name and some streets
don't have name, is better to querybypoint with 50 meters and if the street
don't have a name find again, with 100 meters? Or find MS_MULTIPLE with 100
meters?
querybyrect or querybyshape are faster?

I need the fastest result because i need to query in 10 layers very quickly.

Thanks in advance.

Fred

-- 
"Everything under the sun is in tune
But the sun is eclipsed by the moon"



More information about the mapserver-users mailing list