[gdal-dev] OGR and database filter on spatial extent

Brent Fraser bfraser at geoanalytic.com
Tue Jun 9 14:31:51 EDT 2009


Frank,

  Interesting.  I'm attempting to use Mapserver -> OGR -> VRT -> ODBC -> SqlServer2000 -> a table of 250k rows of point features.

  Testing with ogrinfo to return all the rows takes about 25 seconds, but with a "-spat"  to get about 3000 rows takes < 2 seconds (very acceptable).  And I didn't need to create a view with XMIN,YMIN,XMAX,YMAX as implied on GDAL's ODBC format page; OGR applied the filter to the point coordinate columns (dunno what it would do with lines or polygons and no min/max columns though).
 
  Looking at mapserver's mapogr.cpp, it appears that OGR_L_SetSpatialFilter is being called, so I'll have to do some more tracing/debugging to find out why my mapserver performance is so bad with this layer.

Thanks!
Brent Fraser

Frank Warmerdam wrote:
> Brent Fraser wrote:
>> Hi All,
>>
>>  In the case of accessing data in a relational database, does OGR have 
>> the ability to pass a spatial extent to the database to use as a 
>> filter on the geometry before sending the rows?
> 
> Brent,
> 
> Yes.  The OGRLayer has a SetSpatialFilter() method for this.  Some drivers
> evaluate the spatial filter in OGR after reading all records, but smart
> drivers are able to use the spatial filter for efficient querying.  So, the
> spatially enabled databases work it into the query.
> 
> The -spat switch for ogrinfo is translated into a SetSpatialFilter() call
> for instance.
> 
> Best regards,


More information about the gdal-dev mailing list