﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
31162	GIS error logging when using WKT string as input to filter() query.	Arno	Mariusz Felisiak	"When executing a geometry lookup like `my_geo_model.objects.filter(my_geom__intersects=wkt_string)` (i.e. using a WKT string as value)  django.contrib.gis emits the following errors:

{{{
2020-01-13 10:16:07,145 - django.contrib.gis - ERROR - GDAL_ERROR 4: b'POLYGON ((1 1, 1 0, 0 0, 0 1, 1 1)): No such file or directory'
2020-01-13 10:16:08,403 - django.contrib.gis - ERROR - GDAL_ERROR 10: b""Pointer 'hObject' is NULL in 'GDALGetDescription'.\n""
}}}

The reason is that if passed a string, the string is first treated as a potential filename which GDAL tries to open and fails (""no such file""). Only then it is tried to open the string as WKT/GeoJSON etc. Older Django versions did not emit these errors. However, in commit 6f44f714c9 a check in django/contrib/gis/gdal/raster/source.py:69 whether the file exists was removed.

Silencing all errors from django.contrib.gis is not really a feasable workaround, as it would mean silcencing interesting GIS errors too.

According to https://docs.djangoproject.com/en/2.2/ref/contrib/gis/db-api/#geometry-lookups passing WKT strings is allowed, but there's no mention of being able to pass a filename as parameter.

It's a bit unexpected that Django first tries to open a file before it checks whether the passed string is valid WKT/GeoJSON, and that using WKT results in error messages. Or am I misunderstanding the documentation and calling the API wrongly?

Relevant parts of example source:

{{{
models.py:

class Area(models.Model):
    area = models.PolygonField()

settings.py:

LOGGING = {
    'version': 1,
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO',
    }
}

main.py:

from app.models import Area
Area.objects.filter(area__intersects='POLYGON ((1 1, 1 0, 0 0, 0 1, 1 1))')
}}}"	Bug	closed	GIS	dev	Normal	fixed			Accepted	1	0	0	0	0	0
