Hi, Nyall Dawson pointed to me in https://github.com/qgis/QGIS/pull/5501#issuecomment-340934947 about a weird behaviour of OGR spatial filtering regarding null and empty geometries.
To make it concrete, consider the following CSV file id,WKT 1,"POLYGON EMPTY" 2, 3,"POLYGON ((0 0,0 1,1 1,0 0))" $ ogrinfo test.csv -al -spat 0 0 1 1 -q Layer name: test OGRFeature(test):1 id (String) = 1 WKT (String) = POLYGON EMPTY POLYGON EMPTY OGRFeature(test):2 id (String) = 2 WKT (String) = OGRFeature(test):3 id (String) = 3 WKT (String) = POLYGON ((0 0,0 1,1 1,0 0)) POLYGON ((0 0,0 1,1 1,0 0)) $ ogrinfo test.csv -al -spat 1 1 2 2 -q Layer name: test OGRFeature(test):2 id (String) = 2 WKT (String) = OGRFeature(test):3 id (String) = 3 WKT (String) = POLYGON ((0 0,0 1,1 1,0 0)) POLYGON ((0 0,0 1,1 1,0 0)) So features with null geometries (FID 2) are always selected. And for a feature with an empty geometry (FID 1), it is selected by the -spat 0 0 1 1 filter since internally the envelope of POLYGON EMPTY is computed as xmin=xmax=ymin=ymax=0, but not by -spat 1 1 2 2 If ingesting this file into PostGIS and doing the same test, we get: $ ogrinfo pg:dbname=autotest test -spat 0 0 1 1 -q Layer name: test OGRFeature(test):3 id (String) = 3 wkt (String) = POLYGON ((0 0,0 1,1 1,0 0)) POLYGON ((0 0,0 1,1 1,0 0)) $ ogrinfo pg:dbname=autotest test -spat 1 1 2 2 -q Layer name: test OGRFeature(test):3 id (String) = 3 wkt (String) = POLYGON ((0 0,0 1,1 1,0 0)) POLYGON ((0 0,0 1,1 1,0 0)) So null or empty geometries are never selected when a spatial filter is set. This last behaviour seems to be the most logical for me, and I'd propose we adopt it for non-SQL based drivers as well. (note: the current behaviour dates back to the initial introduction of spatial filtering in OGR per https://trac.osgeo.org/gdal/changeset/7191 , 13 years ago ) Any thought ? Even -- Spatialys - Geospatial professional services http://www.spatialys.com
_______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev
