[gdal-dev] VRT OGRVRTDataSource filter & python function
Peter Schmitt
pschmitt at gmail.com
Mon Jul 28 15:18:44 PDT 2025
Hi,
I have two GDAL questions that are Mapserver adjacent (or perhaps
vice-versa?).
1. Does OGRVRTDataSource allow Python code similar to raster VRT Python
Pixel Functions?
2. Is there a reasonable way to pass custom arguments to a VRT?
I have a VRT that executes some SQL:
<!-- file.vrt -->
<OGRVRTDataSource>
<OGRVRTLayer name="0">
<SrcDataSource>PG:host=db user=me dbname=datastore
password=abc</SrcDataSource>
<SrcSQL>
SELECT some_table.location, some_table.id, some_table.geom FROM
some_table
</SrcSQL>
</OGRVRTLayer>
</OGRVRTDataSource>
Is there a reasonable way to pass some argument to filter the VRT? For
example, a condition like `WHERE some_table.id = 123`. Imagine the query
has a very large number of records. I dont want to process the filter
"client side": Ideally the condition gets executed in SQL before OGR gets
any results. I am aware of ogr2ogr's -sql statement
https://gdal.org/en/stable/programs/ogr2ogr.html#cmdoption-ogr2ogr-sql
Ultimately this will happen via MapServer, which is referencing the VRT
layer. I would like the client to pass a QUERYSTRING argument `foo_id=123`
to perform a filter on the data in the VRT. Usually I do this via
MapServer Runtime substitution. This works if I embed the contents of
file.vrt directly in my Mapfile
LAYER
NAME my_layer
TYPE POLYGON
EXTENT -180 -90 180 90
PROJECTION
"init=epsg:4326"
END
CONNECTIONTYPE OGR
TILEITEM 'location'
TILEINDEX "<OGRVRTDataSource>...WHERE some_table.id =
%foo_id%</SrcSQL></OGRVRTLayer></OGRVRTDataSource>"
VALIDATION
'foo_id' "^[0-9]+$"
'default_foo_id' "-1"
END
END
However, my actual OGRVRTDataSource file is large. If I inline a large VRT
Mapserver complains "msBuildPath(): Unable to access file. Path is too
long. Check server logs.". I could use a Mapserver FILTER
https://mapserver.org/mapfile/layer.html#filter, but I think that occurs
AFTER the VRT is evaluated. . . so if there are millions of rows, that data
gets filtered by the client (Mapserver) and not by SQL, so there's a lot of
data moving around and very slow performance.
Thanks!
Pete
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/gdal-dev/attachments/20250728/54d49b25/attachment.htm>
More information about the gdal-dev
mailing list